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 быстрее и эффективнее. Они не обязательны для начала, но очень помогут, когда проект станет больше и сложнее.
Перейти на оригинал