Docker на практике: полный гайд по командам
Docker — это инструмент, который помогает разработчикам и системным администраторам упаковывать приложения вместе со всеми зависимостями в изолированные контейнеры. Их легко запускать, переносить и масштабировать, независимо от среды — будь то локальный компьютер, тестовый сервер или облако.
Проще говоря, Docker помогает запускать приложения отдельно от основной системы — как маленькие серверы, для которых не нужно каждый раз заново настраивать окружение. Это экономит время и избавляет от лишних проблем.
В этой статье мы собрали основные команды Docker, которые пригодятся для повседневной работы, и даже больше.
Что стоит знать перед началом работы с Docker
Перед тем как перейти к практике, важно познакомиться с базовыми понятиями, которые используются в Docker:
- Контейнер — это изолированная среда, в которой запускается приложение. Каждый контейнер содержит все необходимое для работы программы: код, библиотеки, зависимости и настройки. Благодаря изоляции, контейнеры не мешают друг другу и не влияют на основную систему.
 - Образ — это шаблон для создания контейнера. В него входит приложение и все, что нужно для его запуска. Из одного образа можно запустить сколько угодно контейнеров. Готовые образы можно найти на Docker Hub или создать свои.
 - Dockerfile — это текстовый файл с инструкциями, по которым собирается образ. В нем прописывается, какие компоненты нужно установить, какие файлы скопировать и какие команды выполнить для подготовки среды.
 - Docker Hub — это онлайн-репозиторий, где хранятся тысячи готовых образов для различных программ и сервисов. Вы можете скачать нужный образ или загрузить собственный.
 - Репозиторий — это пространство для хранения и управления образами. Как правило, репозитории размещаются на Docker Hub, но можно использовать и частные решения.
 - Контейнеризация — процесс упаковки приложения и всех его зависимостей в контейнер. Так оно запускается одинаково на любой системе, независимо от настроек окружения.
 - Том — это способ хранить данные вне контейнера. Даже если контейнер будет удален, данные в томе сохранятся. Подходит для работы с базами данных и другими постоянными файлами.
 
Как устроены команды в Docker
Команды Docker похожи на команды в обычном терминале: вы пишете инструкцию, добавляете нужные параметры — и система выполняет вашу задачу. Главное отличие в том, что любая команда начинается со слова docker, а дальше указывается, что вы хотите сделать: запустить, остановить, посмотреть список или удалить что-то.
Синтаксис команд выглядит так:
docker <действие> [аргументы] [опции] <объект>
Чтобы управлять контейнером или образом, обычно нужен его ID или имя. ID — это уникальный набор символов, который Docker присваивает автоматически. Для удобства можно задать свое имя — его проще запомнить, чем длинную комбинацию букв и цифр. Если имя не указать, Docker придумает его сам — что-то вроде keen_babbage или laughing_spence.
Команды для управления контейнерами
Запуск нового контейнера — docker run
Самая популярная команда в Docker — docker run. Она нужна, чтобы создать новый контейнер из выбранного образа и сразу его запустить. Дополнительно можно указать параметры: например, задать имя контейнеру, открыть нужные порты или настроить работу в фоновом режиме.
Например, чтобы запустить приложение на Python с образом python:3.11, используйте команду:
docker run python:3.11
Контейнер начнет работать, и вы сможете использовать Python внутри этой изолированной среды. Он будет работать до тех пор, пока его не остановить или пока процесс внутри не завершится.
Рассмотрим вариант с дополнительными настройками:
docker run -d --name test_postgres -e POSTGRES_PASSWORD=12345 postgres
Где:
- -d — запуск контейнера в фоновом режиме;
 - --name test_postgres — имя контейнера;
 - -e POSTGRES_PASSWORD=12345 — установка пароля для базы данных Postgres.
 
После этой команды у вас будет собственный экземпляр базы данных PostgreSQL, который будет доступен для ваших приложений. Дополнительные параметры позволяют управлять поведением контейнера и делать его настройку удобнее для работы и тестирования.
Запуск и остановка контейнера — docker start и docker stop
Если вы уже запускали контейнер раньше, но сейчас он остановлен — его можно снова включить с помощью команды docker start.
Например:
docker start test_postgres
Контейнер продолжит работу с того места, где был остановлен (если это возможно для приложения внутри).
Чтобы остановить работающий контейнер, выполните docker stop:
docker stop test_postgres
Команды работают как с именем контейнера, так и с его идентификатором (ID). Вы можете выбрать любой удобный вариант.
Информация о контейнерах — docker ps
Чтобы узнать, какие контейнеры сейчас запущены, выполните команду:
docker ps
Она покажет список активных контейнеров с основными сведениями: ID, имя, образ и время работы.
Если хотите увидеть все контейнеры, включая остановленные, добавьте параметр -a:
docker ps -a
Пример вывода может быть таким:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1a2b3d4e5f6 redis "redis-server" 2 hours ago Up 1 hour 6379/tcp test_redis
b7c8d9e0f1a2 node "node app.js" 5 days ago Exited (0) 3 days ago node_app
d3e4f5a6b7c8 postgres "docker-entrypoint…" 7 days ago Up 4 hours 5432/tcp db_server
Выполнение команд внутри контейнера — docker exec
Если нужно зайти внутрь уже запущенного контейнера и выполнить там команды, используется команда docker exec. Она открывает интерактивный терминал, позволяя работать с контейнером как с обычным сервером.
Например, чтобы получить доступ к командной строке контейнера с именем test_postgres, выполните:
docker exec -it test_postgres bash
После этого откроется терминал внутри контейнера, и вы сможете выполнять любые команды, управлять файлами или настраивать приложение прямо там.
Просмотр логов контейнера — docker logs
Чтобы увидеть, что происходит внутри контейнера, можно посмотреть его логи — записи о работе приложения. Для этого используется команда:
docker logs test_postgres
Если нужно постоянно следить за новыми сообщениями, добавьте флаг -f — follow:
docker logs -f test_postgres
Так вы будете видеть все новые записи в режиме реального времени — удобно для отладки и мониторинга.
Удаление контейнеров — docker rm
Когда контейнер больше не нужен, его можно удалить командой docker rm. Но сначала важно остановить контейнер, иначе ничего не получится:
docker stop test_postgres
Теперь можно его удалить:
docker rm test_postgres
Удаление контейнеров помогает поддерживать чистоту в вашей Docker-среде и освобождает ресурсы. Регулярно проверяйте контейнеры и удаляйте ненужные.
Отслеживание ресурсов контейнеров — docker stats
Чтобы узнать, сколько ресурсов (процессор, память, сеть и диск) использует каждый контейнер, используйте команду:
docker stats
Она покажет в реальном времени текущую нагрузку на систему от каждого запущенного контейнера.
Пример вывода:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
f4b1a2c3d4e5 app_server 1.20% 150MiB / 1GiB 14.65% 10kB / 8kB 0B / 1MB 15
b6c7d8e9f0a1 redis_cache 0.10% 30MiB / 512MiB 5.86% 2kB / 2.5kB 0B / 0B 6
c3d4e5f6a7b8 backend_api 3.05% 200MiB / 2GiB 9.77% 15kB / 12kB 2MB / 0B 22
С этой командой вы легко сможете отслеживать нагрузку и вовремя заметите, если какой‑то контейнер потребляет слишком много ресурсов.
Команды для управления образами
Поиск образов в Docker Hub — docker search
Если нужно найти подходящий образ для вашего проекта, команда docker search поможет найти его в официальном реестре Docker Hub.
Например, чтобы поискать образы с Node.js, используйте:
docker search node
Пример вывода:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
node Official Node.js runtime 14000 [OK]
nodered/node-red Flow-based programming for the Internet of Things 1200 [OK]
bitnami/node Bitnami Node.js Docker Image 700 [OK]
mhart/alpine-node Node.js base image on Alpine Linux 300 [OK]
Звезды (STARS) отражают, насколько образ популярен среди пользователей, а пометка [OK] означает, что образ проверен и официально поддерживается.
Загрузка образов — docker pull
Чтобы скачать образ из Docker Hub на свой компьютер, используется команда:
docker pull postgres
Если нужна конкретная версия образа, укажите ее тег через двоеточие, например:
docker pull postgres:14
Теги помогают точно выбрать нужную версию приложения и гарантируют стабильную работу в нужной среде.
Просмотр образов — docker images
Чтобы увидеть все образы, которые уже скачаны и хранятся на вашем компьютере, выполните команду:
docker images
Она выведет список образов с основными данными: название, тег, ID, дата создания и размер.
Пример вывода:
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest f9d0f865e1a2 1 week ago 105MB
python 3.9 3b5d5b2a9c1f 2 weeks ago 895MB
alpine 3.15 a24bb4013296 3 weeks ago 5.6MB
mongo 5.0 0a4b0d3c13f1 1 month ago 512MB
Создание образа — docker build
Для создания своего образа используют команду docker build. Основой для сборки служит файл Dockerfile, в котором прописываются все шаги: какой базовый образ взять, какие программы установить, какие файлы скопировать и как настроить приложение.
Пример команды для сборки образа с именем my_app_image из текущей папки:
docker build -t my_app_image .
Флаг -t задает имя создаваемому образу, а точка . означает, что Dockerfile находится в текущей директории. Созданный образ можно будет запускать и передавать другим пользователям.
Удаление образов — docker rmi
Если образ больше не нужен, его можно удалить командой:
docker rmi image_id
Где image_id — уникальный идентификатор образа.
Если нужно удалить сразу несколько образов, укажите их через пробел:
docker rmi image_id1 image_id2
Чтобы убрать все неиспользуемые образы и освободить место на диске, воспользуйтесь командой:
docker image prune
Она удалит образы, которые не связаны с активными контейнерами.
Команды для управления томами
Создание тома для хранения данных — docker volume create
Том — это специальное место на диске, где контейнер сохраняет данные отдельно от своей среды. Чтобы создать такой том для хранения данных базы данных, выполните команду:
docker volume create test_db_data
Если нужно создать том с определенным драйвером, например локальным, используйте:
docker volume create --driver local test_db_backup
Чтобы проще ориентироваться в томах, можно добавить метки, например для указания среды или проекта:
docker volume create --label environment=production test_db_logs
Такие тома помогают сохранить важные данные (например, базы данных или логи), которые сохраняются даже после удаления контейнера.
Привязка тома к контейнеру — docker run -v
Чтобы контейнер мог сохранять и использовать данные вне своей среды, том привязывают к определенной папке внутри контейнера с помощью параметра -v.
Например, чтобы подключить том test_db_data к папке /var/lib/postgresql/data внутри контейнера, используйте команду:
docker run -v test_db_data:/var/lib/postgresql/data postgres
Если хотите, чтобы данные были доступны только для чтения, добавьте суффикс :ro (read-only):
docker run -v test_db_data:/var/lib/postgresql/data:ro postgres
Привязка тома помогает сохранить данные, даже если контейнер остановлен или удален.
Просмотр списка томов — docker volume ls
Чтобы увидеть все тома, созданные на вашем компьютере, выполните команду:
docker volume ls
Пример вывода:
DRIVER VOLUME NAME
local test_db_data
local test_app_logs
Этот список помогает быстро cориентироваться в доступных томах и использовать их для управления данными: удалять, подключать к контейнерам и так далее.
Удаление тома — docker volume rm
Важно! После удаления тома все данные внутри него будут потеряны.
Чтобы удалить ненужный том, используйте команду:
docker volume rm test_app_volume
Чтобы удалить сразу несколько томов, укажите их имена через пробел:
docker volume rm test_db_data old_backup logs_volume
Чтобы очистить систему от всех томов, которые не используются ни одним контейнером, выполните:
docker volume prune
Команды для управления многоконтейнерными приложениями
Docker Compose — это инструмент, который позволяет запускать и управлять сразу несколькими контейнерами как единым приложением. Все настройки описываются в одном файле — docker-compose.yml, где указываются образы, порты, переменные окружения, тома и другие параметры для каждого сервиса.
Compose особенно полезен, когда ваше приложение состоит из нескольких компонентов, например: базы данных, бекенда и фронтенда. Вместо того чтобы запускать каждый контейнер вручную, можно описать все в одном файле и управлять проектом одной командой.
Ниже мы описали основные команды Docker Compose, которые часто используются при разработке и сопровождении проектов:
| 
             Команда  | 
        
             Назначение  | 
    
| 
             docker-compose pull  | 
        
             Загружает актуальные версии образов из реестра для всех сервисов перед запуском проекта  | 
    
| 
             docker-compose build  | 
        
             Собирает или пересобирает образы на основе инструкций в docker-compose.yml и Dockerfile  | 
    
| 
             docker-compose up  | 
        
             Запускает все сервисы, создает необходимые контейнеры, сети и тома  | 
    
| 
             docker-compose ps  | 
        
             Показывает список запущенных сервисов с их статусом и портами  | 
    
| 
             docker-compose logs  | 
        
             Выводит логи всех контейнеров проекта для мониторинга и отладки  | 
    
| 
             docker-compose stop  | 
        
             Останавливает все запущенные контейнеры без удаления  | 
    
| 
             docker-compose start  | 
        
             Запускает ранее остановленные контейнеры без пересборки  | 
    
| 
             docker-compose restart  | 
        
             Перезапускает контейнеры — сначала останавливает, затем запускает заново  | 
    
| 
             docker-compose down  | 
        
             Останавливает и удаляет контейнеры, сети и тома проекта, освобождая ресурсы  | 
    
| 
             docker-compose config  | 
        
             Проверяет и выводит итоговую конфигурацию проекта, объединяя все настройки и переменные  | 
    
| 
             docker-compose exec <сервис> <команда>  | 
        
             Выполняет команду внутри работающего контейнера указанного сервиса  | 
    
| 
             docker-compose pause  | 
        
             Приостанавливает работу всех контейнеров проекта без их остановки  | 
    
| 
             docker-compose unpause  | 
        
             Возобновляет работу приостановленных контейнеров  | 
    
| 
             docker-compose rm  | 
        
             Удаляет все остановленные контейнеры, которые связаны с проектом  | 
    
Команды для оптимизации сетевых ресурсов в Docker
Сети — важная часть Docker, которая обеспечивает связь между контейнерами и взаимодействие с внешними системами. Docker автоматически создает несколько стандартных сетей, и в процессе работы могут появляться дополнительные пользовательские сети. Со временем старые, неиспользуемые или временные сети накапливаются, что приводит к избыточному потреблению ресурсов и потенциальным конфликтам.
Команды в этом разделе могут вам понадобиться, чтобы:
- освободить ресурсы, которые заняты неиспользуемыми сетями;
 - упростить управление и избежать путаницы с большим числом сетей;
 - предотвратить ошибки и конфликты из-за старых настроек;
 - повысить безопасность, удалив ненужные сети и ограничив доступ к контейнерам.
 
Просмотр списка сетей — docker network ls
Чтобы увидеть все сети, которые есть в вашей системе Docker, используйте команду:
docker network ls
Она покажет список сетей с их идентификаторами, именами и типами (например, bridge, host, overlay), например:
NETWORK ID NAME DRIVER SCOPE
1a2b3c4d5e6f bridge bridge local
7g8h9i0j1k2l test_network bridge local
Подробная информация о сети — docker network inspect
Если нужно узнать детали конкретной сети — к каким контейнерам она подключена, какие настройки использует — выполните:
docker network inspect test_network
Команда выдаст подробный отчет в формате JSON.
Отключение контейнера от сети — docker network disconnect
Чтобы отключить контейнер с именем web_app от сети test_network, выполните:
docker network disconnect test_network web_app
Контейнер продолжит работу, но перестанет быть связан с этой сетью.
Удаление ненужной сети — docker network rm
Удалить сеть можно командой:
docker network rm test_network
Важно! К сети не должно быть подключено ни одного контейнера. Если она используется, команда выдаст ошибку.
Чтобы удалить нескольких сетей одновременно, перечислите их через пробел:
docker network rm network1 network2
Удаление неиспользуемых сетей — docker network prune
Если нужно быстро убрать все сети, которые не связаны ни с одним контейнером, используйте команду:
docker network prune
Перед удалением Docker попросит подтвердить действие. Чтобы продолжить, введите y.
Еще больше полезных команд
Docker предлагает широкий набор команд, которые помогают глубже контролировать и настраивать среду, а также диагностировать проблемы и оптимизировать работу. Помимо базовых операций с контейнерами, образами, сетями и томами, есть команды для управления ресурсами, переноса данных, мониторинга и многое другое:
| 
             Команда  | 
        
             Описание  | 
    
| 
             docker pause  | 
        
             Приостанавливает работу контейнера и замораживает процессы  | 
    
| 
             docker unpause  | 
        
             Возобновляет работу приостановленного контейнера  | 
    
| 
             docker kill  | 
        
             Немедленно завершает работу контейнера  | 
    
| 
             docker rename  | 
        
             Переименовывает существующий контейнер  | 
    
| 
             docker cp  | 
        
             Копирует файлы и папки между контейнером и локальной системой  | 
    
| 
             docker update  | 
        
             Обновляет настройки ресурсов запущенного контейнера, например, лимиты по памяти или CPU  | 
    
| 
             docker inspect  | 
        
             Выводит подробную информацию об объекте Docker (контейнер, образ, сеть, том) в формате JSON  | 
    
| 
             docker history  | 
        
             Показывает историю создания образа, включая команды и слои  | 
    
| 
             docker save  | 
        
             Сохраняет образ в архив для переноса на другой компьютер или сервер  | 
    
| 
             docker load  | 
        
             Загружает образ из архива, созданного с помощью docker save  | 
    
| 
             docker system df  | 
        
             Анализирует использование дискового пространства образами, контейнерами, томами и сетями  | 
    
| 
             docker system prune  | 
        
             Удаляет все неиспользуемые объекты: остановленные контейнеры, неиспользуемые образы, сети и тома  | 
    
| 
             docker info  | 
        
             Отображает общую информацию о Docker: количество контейнеров, образов, свободное место и настройки  | 
    
| 
             docker version  | 
        
             Показывает версии клиента и сервера Docker  | 
    
| 
             docker stats  | 
        
             Показывает в реальном времени загрузку ресурсов (CPU, память, сеть) запущенных контейнеров  | 
    
| 
             docker attach  | 
        
             Подключается к терминалу запущенного контейнера для просмотра вывода и взаимодействия  | 
    
| 
             docker wait  | 
        
             Ждет завершения контейнера и выводит его код выхода  | 
    
| 
             docker diff  | 
        
             Показывает изменения в файловой системе контейнера по сравнению с исходным образом  | 
    
| 
             docker login  | 
        
             Выполняет вход в Docker Registry* для доступа к приватным образам  | 
    
| 
             docker logout  | 
        
             Выполняет выход из Docker Registry  | 
    
| 
             docker push  | 
        
             Загружает локальный образ в удаленный реестр Docker  | 
    
* Docker Registry — это сервер для хранения и распространения Docker-образов. Он позволяет сохранять образы, чтобы их можно было скачивать и использовать на разных машинах. Самый известный публичный реестр — уже знакомый вам Docker Hub.
Освоив эти команды, вы сможете работать с Docker быстрее и эффективнее. Они не обязательны для начала, но очень помогут, когда проект станет больше и сложнее.
Перейти на оригинал