Хостинг SpaceWeb
Серверы Дизайн Сайты Безопасность Домены PHP Кейсы клиентов

Docker на практике: полный гайд по командам

Docker — это инструмент, который помогает разработчикам и системным администраторам упаковывать приложения вместе со всеми зависимостями в изолированные контейнеры. Их легко запускать, переносить и масштабировать, независимо от среды — будь то локальный компьютер, тестовый сервер или облако.

Проще говоря, Docker помогает запускать приложения отдельно от основной системы — как маленькие серверы, для которых не нужно каждый раз заново настраивать окружение. Это экономит время и избавляет от лишних проблем.

В этой статье мы собрали основные команды Docker, которые пригодятся для повседневной работы, и даже больше. 

Что стоит знать перед началом работы с Docker

Перед тем как перейти к практике, важно познакомиться с базовыми понятиями, которые используются в Docker:

Как устроены команды в 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

Где:

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

Перейти на оригинал