Docker стал одним из ключевых инструментов современной разработки: он помогает создавать изолированные среды, ускорять развертывание приложений и упрощать совместную работу команд. Однако комфортная работа с контейнерами невозможна без уверенного владения базовыми командами.
Что такое Docker и зачем знать его команды
Docker — это платформа контейнеризации, которая упорядочивает запуск приложений и помогает держать окружение под контролем. Она позволяет собирать рабочие среды из образов, разделять сервисы на независимые компоненты, управлять конфигурациями и переносить проекты между системами без лишних усилий.
В основе работы Docker лежит набор команд. Через них происходит все взаимодействие с системой: создание образов, запуск контейнеров, подключение сетей, управление хранилищами и мониторинг состояния сервисов. Команды формируют понятный и предсказуемый рабочий процесс, а каждый шаг можно увидеть, настроить и воспроизвести в любой среде.
Основные команды Docker с примерами
Командная строка играет решающую роль в работе с Docker: большинство операций выполняется именно через терминал. Каждая команда строится по простой логике — вы указываете, что хотите сделать, и над чем именно. Все инструкции начинаются со слова docker, после чего следуют действие и дополнительные параметры, если они нужны.
Общий формат выглядит так:
docker <команда> [параметры] <объект>
В качестве объекта может выступать контейнер, образ, сеть или том. Чтобы система понимала, к чему именно обращена команда, используется имя или идентификатор. ID Docker назначает автоматически, а имя можно указать при создании — это удобно, если вы работаете с большим числом контейнеров. Если имя не задано, платформа создает его сама, выбирая случайную комбинацию из двух слов, например silver_hopper или brave_curie.

Как работать с Docker-контейнерами
Контейнер представляет собой изолированную среду, где запускается приложение со всеми нужными зависимостями. Он работает автономно и не зависит от настроек основной системы, что упрощает перенос и развертывание сервисов. Контейнеры создаются за короткое время, требуют минимум ресурсов и позволяют поднимать несколько экземпляров одного приложения без конфликтов между ними.
Создание и запуск контейнеров — docker run
Команда docker run отвечает за создание контейнера из выбранного образа и его мгновенный запуск. Это базовый инструмент, который используется практически в каждом рабочем процессе Docker.
Простой пример запуска контейнера с Node.js:
[crayon-6985edc4e9317458600721/]Контейнер будет работать, пока вы его не остановите или пока процесс внутри не завершится.
Запуск ранее созданного контейнера — docker start
Если контейнер был создан раньше, но сейчас не работает, его можно запустить без пересоздания. Достаточно указать имя или идентификатор:
[crayon-6985edc4e9328310783839/]Остановка работающего контейнера — docker stop
Чтобы корректно завершить работу контейнера, используйте:
[crayon-6985edc4e932d232411705/]Проверка текущего состояния — docker ps
Чтобы понять, какие контейнеры активны в данный момент, используется команда:
[crayon-6985edc4e9331909769137/]Она показывает список работающих контейнеров: их идентификаторы, образы, время запуска, статус и доступные порты. Это помогает быстро оценить, какие сервисы сейчас запущены.
Если нужно увидеть полный список, включая те, что были остановлены ранее, используйте:
[crayon-6985edc4e9335487922462/]Пример вывода:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab17c4d19e23 nginx "nginx -g 'daemon…'" 1 hour ago Up 59 minutes 0.0.0.0:9000->80/tcp node_app
f3b87a612b9f alpine "/bin/sh" 2 days ago Exited (0) 30 hours ago test_env
c2e5f79ad113 mariadb "docker-entrypoint…" 3 days ago Up 25 minutes 3306/tcp db_local
Выполнение команд внутри контейнера — docker exec
Чтобы выполнить команду прямо внутри контейнера, пропишите:
[crayon-6985edc4e9338779518387/]Просмотр событий и сообщений контейнера — docker logs
Чтобы узнать, что происходит внутри контейнера и какие сообщения он генерирует, используется команда docker logs. Она выводит журналы работы приложения, запущенного внутри контейнера:
[crayon-6985edc4e933c677524032/]В результате вы увидите вывод, сформированный процессами контейнера: ошибки, уведомления, системные сообщения или логи веб-сервера.
Если нужно отслеживать события в режиме реального времени, добавьте флаг -f:
[crayon-6985edc4e933f661442574/]Удаление ненужных контейнеров — docker rm
Если контейнер выполнил свою задачу и больше не нужен, его можно удалить, чтобы освободить место и не захламлять список доступных контейнеров. Для этого используется команда docker rm.
Перед удалением контейнер должен быть остановлен. Например, если вы тестировали Node.js-приложение:
[crayon-6985edc4e9342649861783/]После остановки контейнер можно убрать из системы:
[crayon-6985edc4e9345440138515/]Отслеживание потребления ресурсов — docker stats
Если вы запускаете одновременно несколько контейнеров, важно понимать, сколько CPU, памяти и сетевых ресурсов они используют. Команда docker stats выводит данные в реальном времени и помогает выявить контейнеры, которые нагружают систему сильнее остальных:
[crayon-6985edc4e9349178369709/]Вы увидите примерно следующий вывод:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
ab341f9d11c8 node_app 1.28% 152MiB / 1GiB 14.8% 21.4kB / 18.2kB 1.1MB / 0B 12
d7c51ba2e4f9 node_worker 0.42% 87MiB / 1GiB 8.5% 9.6kB / 7.1kB 0B / 0B 6
ee517dbac4a1 cache_node 0.05% 45MiB / 512MiB 8.7% 1.3kB / 1.5kB 0B / 0B 2

Как работать с Docker-образами
Образы в Docker — это основа для создания контейнеров. Каждый образ представляет собой упакованное окружение: зависимости, конфигурации и само приложение. Контейнеры запускаются именно на базе образов, поэтому умение работать с ними — важная часть управления проектами в Docker.
Поиск нужного образа — docker search
Если требуется найти подходящий образ в Docker Hub, используется команда docker search. Она выводит список доступных вариантов с кратким описанием. Например, попробуем найти образы для Node.js:
[crayon-6985edc4e934d689157463/]Пример вывода:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
node Official Node.js image 18000 [OK]
bitnami/node Bitnami Node.js images 500 [OK]
library/node Base image with Node.js runtime 3000 [OK]
mhart/alpine-node Minimal Node.js images based on Alpine Linux 2200 [OK]
nodesource/node Node.js builds from NodeSource 900 [OK]
Звезды (STARS) помогают оценить популярность образа, а отметка [OK] в столбце OFFICIAL говорит о том, что образ официальный и проходит проверку со стороны Docker или создателей платформы.
Загрузка образа из Docker Hub — docker pull
Чтобы использовать образ у себя локально, его сначала нужно загрузить. Для этого предназначена команда docker pull, которая скачивает выбранный образ вместе со всеми необходимыми слоями.
Например, загрузим стандартный образ Node.js:
[crayon-6985edc4e9351480857110/]Если требуется конкретная версия, достаточно указать тег через двоеточие. Допустим, вам нужен Node.js версии 20:
[crayon-6985edc4e9355227490889/]Просмотр загруженных образов — docker images
Чтобы увидеть, какие образы уже находятся на локальной машине, используется команда:
[crayon-6985edc4e9358393619124/]Она выводит список всех загруженных образов, включая их репозитории, теги, размер и дату создания. Пример вывода:
REPOSITORY TAG IMAGE ID CREATED SIZE
node 20 d2a9f17c4b10 8 days ago 980MB
ubuntu 22.04 93fdce12af71 3 weeks ago 77MB
redis 7 b8123ab44aab 1 month ago 125MB
alpine latest 76c8aa91f2bd 2 months ago 7.3MB
Список позволяет быстро оценить, какие образы занимают место и какие версии установлены.
Создание собственного образа — docker build
Если вам нужно собрать собственный образ, который включает ваш код, зависимости и настройки, используется команда docker build. Все шаги сборки описываются в файле Dockerfile — именно в нем определяется исходный базовый образ, устанавливаются пакеты, копируются файлы проекта и указывается команда запуска.
Пример команды для сборки образа с вашим Node.js-приложением:
[crayon-6985edc4e935b852478547/]Флаг -t присваивает образу имя, а точка в конце указывает, что Dockerfile находится в текущей директории.
Собственный образ позволяет зафиксировать окружение приложения, чтобы оно запускалось одинаково в любой системе — на локальном компьютере, на сервере или в CI/CD-пайплайне.
Удаление ненужных образов — docker rmi
Со временем локальное хранилище Docker может заполняться старыми и неиспользуемыми образами. Чтобы поддерживать порядок и освободить место, используется команда docker rmi, которая удаляет выбранный образ.
Если образ больше не требуется, его можно удалить:
[crayon-6985edc4e935e690780690/]Если нужно избавиться от образов, которые не привязаны к контейнерам и просто занимают пространство, можно выполнить:
[crayon-6985edc4e9362515945710/]Эта команда освобождает место, удаляя образы, которые уже не связаны ни с одним контейнером.

Как управлять хранилищами в Docker
Контейнеры Docker по умолчанию хранят данные внутри себя, однако такое хранилище считается временным. Стоит контейнеру завершить работу или быть пересозданным — и информация исчезнет. Чтобы обеспечить сохранность данных, Docker предлагает использовать специальные механизмы постоянного хранения. Наиболее удобные из них — это тома.
Создание томов — docker volume create
Чтобы подготовить постоянное хранилище для контейнеров, используется команда docker volume create. Том создается один раз, после чего может подключаться к любому количеству контейнеров:
[crayon-6985edc4e9365188073560/]Если требуется использовать конкретный драйвер (например, локальный или сетевой):
[crayon-6985edc4e9369498373758/]Вы можете также добавить метки, чтобы легче ориентироваться в большом количестве томов:
[crayon-6985edc4e936c508018015/]Подключение тома к контейнеру — docker run -v
Чтобы контейнер мог сохранять данные в постоянное хранилище, том нужно привязать при его запуске. Команда docker run -v позволяет указать, какой том следует подключить и в какую директорию внутри контейнера он должен быть смонтирован:
[crayon-6985edc4e9370756640432/]В этом случае контейнер сможет записывать и читать данные в директории /app/storage, и все, что там появится, будет сохраняться в томе project_data.
Если нужно предоставить доступ только на чтение, используйте модификатор :ro:
[crayon-6985edc4e9373360295803/]Так контейнер сможет просматривать данные, но не сможет изменять их.
Список доступных томов — docker volume ls
Чтобы увидеть, какие тома уже существуют в вашей Docker-среде, используется команда:
[crayon-6985edc4e9376187503037/]Она выводит список всех доступных хранилищ вместе с драйвером, который используется для их работы. Это помогает быстро понять, какие тома готовы к подключению, какие относятся к старым контейнерам и что можно удалить.
Пример вывода:
DRIVER VOLUME NAME
local project_data
local service_volume
local shared_storage
Удаление томов — docker volume rm
Если том больше не нужен или данные в нем утратили актуальность, его можно удалить:
[crayon-6985edc4e9379548901472/]Если вы хотите освободить место и удалить все тома, которые не используются контейнерами, выполните:
[crayon-6985edc4e937d148914174/]
Основные команды Docker Compose
Docker Compose позволяет запускать несколько контейнеров как один проект. Все сервисы — база данных, серверная часть, интерфейс и другие элементы — описываются в одном YAML-файле. После этого их можно включать, останавливать и настраивать одной командой, не поднимая каждый контейнер вручную.
Какие команды вам могут пригодиться:
docker compose up
Запускает все сервисы из docker-compose.yml. Если контейнеров еще нет, Compose создаст их, соберет образы (если требуется) и поднимет нужные сети и тома. Команда выводит логи сервиса прямо в терминал. Используется, когда нужно подготовить полноценное окружение одним действием.
docker compose up -d переводит работу контейнеров в фоновый режим.
docker compose down
Останавливает и удаляет контейнеры, которые созданы через up. Также удаляются созданные сети и временные тома. Эта команда помогает сбросить окружение до чистого состояния.
docker compose start
Запускает контейнеры, которые уже существуют и не были удалены. Это быстрый способ снова поднять проект после остановки — не пересоздавая сервисы и не собирая его с нуля.
docker compose stop
Останавливает все работающие контейнеры, но не удаляет их. Состояние окружения при этом сохраняется, и его можно в любой момент вернуть к работе через start.
docker compose restartПолностью перезапускает все сервисы. Часто используется после изменения переменных окружения или если контейнер ведет себя нестабильно. Команда останавливает и сразу же запускает все сервисы заново, сохраняя данные и существующие контейнеры.
docker compose build
Собирает образы на основе Dockerfile и настроек, которые описаны в docker-compose.yml. Применяется, когда были внесены изменения в Dockerfile, обновлен код или изменены параметры сборки.
docker compose logs
Выводит логи всех сервисов или отдельного контейнера. Позволяет анализировать работу приложения, отслеживать ошибки и следить за тем, как ведет себя система в реальном времени. Может показывать историю логов за весь период работы контейнера.
docker compose ps
Отображает список контейнеров, которые связаны с текущим проектом. Показывает статус каждого сервиса, открытые порты и имена контейнеров. Этой командой вы можете проверить, все ли запущено и нет ли упавших сервисов.
docker compose exec
Позволяет выполнить команду внутри работающего контейнера. Применяется для доступа в интерактивном режиме (например, через bash) или для выполнения единичных команд. Используется только с уже работающими контейнерами.
docker compose run
Запускает одноразовый контейнер, который не связан напрямую с запущенной инфраструктурой. Подойдет для выполнения команд, которые не требуют запуска всех сервисов, например миграций, анализов, генерации файлов. В отличие от exec, создает новый контейнер, а не использует существующий.
docker compose config
Проверяет корректность файла docker-compose.yml, отображает итоговую конфигурацию с учетом всех переменных окружения и наследований. Команда помогает выявить ошибки в структуре файла и понять, какие параметры реально применяются в итоговом окружении.

Как читать логи и диагностировать проблемы
Если контейнер запускается неправильно или ведет себя нестабильно, логи помогают понять, что именно происходит. Чтобы их увидеть, используют команду docker logs с указанием имени контейнера. В выводе отображается все, что приложение отправляет в стандартный поток: сообщения о запуске, системные заметки, предупреждения и ошибки.
Чтение логов стоит начинать с конца вывода, где находятся свежие записи, которые указывают причину сбоя. Важно обращать внимание на строки, которые содержат слова error, exception, failed, cannot, denied, not found. Они помогают быстро увидеть, где произошел сбой: в подключении к базе данных, в настройках окружения, в зависимостях или в конфигурации портов.
Предположим, вы запустили контейнер с приложением, которое должно подключаться к базе данных. Вы открываете логи и видите такие строки:
Connecting to database on localhost:5432
Error: connection refused
Failed to start application
В этом выводе сказано о том, что контейнер пытается обратиться к базе данных по адресу localhost, но получить доступ не может. Проблема в том, что внутри контейнера localhost — это сам контейнер, а не ваша хост-машина. То есть приложение ищет базу по неверному адресу. Как решить эту проблему? Нужно указать имя контейнера базы данных или внутренний адрес сети Docker.
Рассмотрим другой пример:
ModuleNotFoundError: No module named requests
Application exited with code 1
По этой ошибке видно, что внутри контейнера нет нужной зависимости. А значит, в Dockerfile не установлен пакет requests или используется устаревшая версия образа.
Если контейнер работает, но периодически выдает ошибки, вы можете использовать флаг -f. Так можно увидеть ошибку в момент, когда она происходит: например, при обращении к внешнему сервису или при увеличении нагрузки.
Кроме того, можно включить отображение времени через флаг timestamps. С ним вы сможете оценить частоту ошибок и определить, в какой момент сервис начинает работать неправильно. Если логов накопилось слишком много, можно вывести только последние строки с помощью флага tail, чтобы не тратить время на просмотр всего объема.

Как оптимизировать Dockerfile
От того, как устроен Dockerfile, зависит скорость сборки, размер образа и стабильность окружения. Хорошо написанный файл помогает избежать лишних зависимостей, ускоряет деплой и делает образы предсказуемыми.
Что можно улучшить:
- использовать минимальные базовые образы, чтобы сократить размер итогового файла;
- разделять стадии сборки через multi-stage build, чтобы в финальном слое оставались только необходимые файлы;
- устанавливать зависимости перед копированием исходного кода — это повышает шанс сохранения кеша и ускоряет повторные сборки;
- объединять команды RUN, чтобы уменьшить количество слоев;
- удалять временные файлы и кеши внутри RUN, иначе они займут место в образе;
- фиксировать версии пакетов, чтобы избежать неожиданных изменений при пересборке;
- использовать .dockerignore для исключения ненужных файлов и папок из контекста сборки;
- задавать переменные окружения через ENV, когда они действительно необходимы, чтобы контролировать конфигурацию образа;
- прописывать CMD и ENTRYPOINT так, чтобы контейнер вел себя предсказуемо, а команда запуска оставалась гибкой;
- следить за количеством копируемых директорий — чем меньше контекст сборки, тем быстрее собирается образ;
- выбирать понятные имена для стадий сборки, чтобы упростить поддержку Dockerfile;
- добавлять HEALTHCHECK, когда важно контролировать состояние контейнера после запуска.
Преимущества Docker в облаке
Запуск Docker в облачной среде позволяет использовать контейнеры максимально эффективно. Облако предоставляет достаточно ресурсов для масштабирования, а Docker гарантирует предсказуемое поведение приложений независимо от их количества и нагрузки. Контейнеры можно быстро развернуть, перенести на другую машину или обновить без простоя — это важно для проектов, где стабильность и гибкость имеют решающее значение.
Контейнеризация в облаке помогает экономить ресурсы: на одном сервере можно запускать множество контейнеров с разными сервисами, не расходуя память на отдельные операционные системы. Это упрощает обслуживание инфраструктуры и делает ее более компактной. Кроме того, обновления, тестирование и развертывание проходят быстрее, поскольку все компоненты уже упакованы в образ.
В Рег.облаке можно заказать облачный сервер с Docker, который уже установлен и готов к работе. Это значит, что вы сразу начинаете развёртывать контейнеры, без потери времени на конфигурацию сервера. Масштабируйте ресурсы по нагрузке, платите только за то, что используете, контейнеры работают изолированно, и приложение, которое запустилось на вашей машине, без проблем будет работать в облаке.

FAQ
Как использовать команды для управления сетью в Docker?
В Docker сетью управляют через набор встроенных команд. С их помощью можно создавать собственные сети, подключать к ним контейнеры, просматривать конфигурации и удалять ненужные сети. Основные команды, чтобы:
- создать сеть:
docker network create my_network
- посмотреть доступные сети:
docker network ls
- подключить контейнер к сети:
docker network connect my_network my_container
- отключить контейнер:
docker network disconnect my_network my_container
- посмотреть подробности сети:
docker network inspect my_network
- удалить сеть:
docker network rm my_network
Какие параметры можно использовать с командой docker run?
Команда docker run поддерживает большое количество параметров:
-d— запускает контейнер в фоновом режиме.-p :— пробрасывает порты, чтобы контейнер был доступен снаружи.--name <имя>— задает понятное имя контейнера вместо случайного.-v :/path— подключает том или директорию для сохранения данных.-e =— передает переменные окружения внутрь контейнера.--restart— задает политику автоматического перезапуска (например, always).--network— подключает контейнер к определенной Docker-сети.--rm— автоматически удаляет контейнер после его остановки.-it— запускает контейнер в интерактивном режиме с подключенным терминалом.
Как создать новый образ в Docker?
Новый образ создается с помощью команды docker build, но основной процесс начинается с файла Dockerfile. В этом файле вы описываете, какой базовый образ использовать, какие зависимости установить, какие файлы добавить и что должно выполняться при запуске контейнера.
Как перезапустить контейнер без остановки сервиса?
В Docker нельзя перезапустить один и тот же контейнер без остановки сервиса, но можно добиться его обновления без фактической паузы. Для этого создают новый контейнер из актуального образа и запускают его параллельно, а затем переключают трафик на него. Старый контейнер удаляют после проверки.
Как остановить все контейнеры сразу?
Остановить все запущенные контейнеры можно одной командой. Для этого сначала получают список идентификаторов активных контейнеров, а затем передают его в команду остановки:
docker stop $(docker ps -q)
Команда завершит работу всех контейнеров, которые были активны в момент запуска.
Как очистить Docker от старых контейнеров и образов?
Docker можно быстро очистить от объектов, которые больше не используются. Чаще всего для этого используют команду:
docker system prune
Она удаляет остановленные контейнеры, неиспользуемые сети и временные слои образов.
Если нужно освободить еще больше места и удалить также неиспользуемые образы, можно добавить флаг -a:
docker system prune -a
Где можно безопасно протестировать Docker-окружение?
Для тестирования Docker лучше всего использовать отдельный сервер, чтобы эксперименты не затрагивали рабочие проекты. Один из вариантов — развернуть окружение на облачном сервере. На платформе Рег.облака можно создать изолированный сервер, установить Docker и свободно пробовать разные конфигурации, запускать контейнеры, тестировать обновления или собирать образы. Тестовый сервер не повлияет на основную инфраструктуру и позволяет безопасно экспериментировать с Docker-процессами в реальных условиях.