Инструкция разделена на три логических этапа: базовое управление Docker, автоматизация через Docker Compose и развертывание отказоустойчивого кластера Docker Swarm.
ЧАСТЬ 1. Базовый Docker (Одиночные контейнеры)
1.1. Работа с образами (Images)
Скачать образ из Docker Hub без запуска контейнера:
docker pull ubuntu:latestПосмотреть список всех скачанных образов:
docker imagesУдалить ненужный образ:
docker rmi [IMAGE_ID_или_NAME]
1.2. Управление контейнерами (Containers)
Запустить контейнер в фоновом режиме (-d), пробросить порт (-p 80:80) и дать ему имя:
docker run -d --name my-web-server -p 80:80 nginx:latest
Посмотреть список только активных контейнеров:docker ps
Посмотреть список всех контейнеров (включая остановленные):
docker ps -aОстановить, запустить или перезапустить контейнер:
docker stop my-web-serverdocker start my-web-serverdocker restart my-web-server
Удалить остановленный контейнер:docker rm my-web-serverПринудительно удалить работающий контейнер (одним махом):
docker rm -f my-web-server
1.3. Логи и диагностикаПосмотреть логи контейнера в реальном времени (-f) с выводом таймстампов (-t):docker logs -ft my-web-serverПосмотреть только последние 50 строк лога:docker logs --tail 50 my-web-serverПровалиться внутрь запущенного контейнера в интерактивном режиме (вызов терминала):
docker exec -it my-web-server bash
Посмотреть потребление ресурсов (CPU, RAM, Сеть) контейнерами в реальном времени:
docker statsПосмотреть подробную низкоуровневую JSON-информацию о контейнере (IP-адрес, пути монтирования и т.д.):docker inspect my-web-server
ЧАСТЬ 2. Docker Compose (Управление мультиконтейнерными приложениями)Docker Compose используется, когда нужно запустить связку (например, Web + PHP + MySQL) одной командой, описав её в файле docker-compose.yml.
2.1. Основные команды управления
Все команды выполняются строго внутри директории, где лежит файл docker-compose.yml.
Собрать образы, создать и запустить все контейнеры из файла в фоновом режиме:
docker compose up -dПосмотреть статус контейнеров, описанных в текущем Compose-файле:
docker compose psПосмотреть агрегированные логи всех контейнеров проекта:
docker compose logs -fОстановить и полностью удалить контейнеры, сети и тома, созданные этой сборкой:
docker compose downОстановить контейнеры, но не удалять их:
docker compose stopВыполнить команду внутри конкретного контейнера из Compose-файла (например, в сервисе с именем db):
docker compose exec db mysql -u root -p
ЧАСТЬ 3. Docker Swarm (Оркестрация и Кластеризация)
Docker Swarm превращает несколько серверов с Docker в один виртуальный суперкомпьютер.
Нам понадобятся как минимум две роли: Manager (управляет кластером) и Worker (ноды, выполняющие задачи).
3.1. Инициализация кластераВыполняется строго на главной ноде, которая станет Менеджером (например, IP 10.10.1.42):Инициализировать Swarm-режим и привязать его к сетевому интерфейсу:
docker swarm init --advertise-addr 10.10.1.42После выполнения этой команды Docker выведет в консоль уникальную строку с токеном вида: docker swarm join --token SWMTKN-... 10.10.1.42:2377
Если вы забыли или потеряли токен для добавления воркеров, выведите его заново:
docker swarm join-token workerЕсли вам нужно добавить еще один Менеджер для отказоустойчивости, выведите токен управления:
docker swarm join-token manager
3.2. Подключение нод к кластеру
Выполняется на целевых рабочих серверах (Workers):
Вставьте скопированную на Менеджере команду, чтобы подключить сервер к кластеру:
docker swarm join --token SWMTKN-1-XXXXX-XXXXX 10.10.1.42:2377
3.3. Управление нодами кластера
Выполняется только на Менеджере:
Посмотреть список всех серверов в кластере и их статус (Active/Ready):
docker node lsПеревести ноду в режим обслуживания (Drain), чтобы Swarm автоматически перенес с неё все работающие контейнеры на другие живые сервера перед перезагрузкой:
docker node update --availability drain [имя_ноды]Вернуть ноду в рабочий режим (Active) после обслуживания:[
code]docker node update --availability active [имя_ноды][/code
]Удалить упавшую/демонтированную ноду из списка кластера:
docker node rm [имя_ноды]
3.4. Управление Сервисами (Services) вместо контейнеров
В Swarm вместо одиночных контейнеров запускаются "Сервисы". Они следят за тем, чтобы указанное количество копий приложения всегда работало в кластере.Создать сервис (например, веб-сервер) в количестве 3 реплик, распределенных по всему кластеру:
docker service create --name swarm-web --replicas 3 -p 8080:80 nginx:latestПосмотреть список всех запущенных сервисов в Swarm:docker service lsПосмотреть, на каких конкретно серверах (нодах) развернуты реплики конкретного сервиса:docker service ps swarm-webПосмотреть логи всего распределенного сервиса со всех нод сразу:
docker service logs -f swarm-webМасштабировать сервис "на лету" (изменить количество копий, например, увеличить до 5 или уменьшить до 1):
docker service scale swarm-web=5Обновить образ сервиса без остановки приложения (Rolling Update — контейнеры будут перезапускаться по очереди):docker service update --image nginx:alpine swarm-webПолностью удалить сервис из кластера:docker service rm swarm-web
3.5. Деплой через Стек (Stack)
Чтобы не писать длинные команды docker service create, в Swarm используют готовые Compose-файлы, которые разворачиваются как единый Стек (Stack).
Развернуть или обновить стек приложений из файла docker-compose.yml под именем prod_env:
docker stack deploy -c docker-compose.yml prod_envПосмотреть список запущенных стеков:
docker stack lsПосмотреть список всех сервисов, входящих в конкретный стек:
docker stack services prod_envПолностью удалить весь стек и все его ресурсы из кластера:
docker stack rm prod_env
🧹 ЧАСТЬ 4. Очистка системы (Полезный бонус)Docker кэширует образы и хранит логи остановленных контейнеров, что со временем забивает диск.Удалить ВСЕ остановленные контейнеры, неиспользуемые сети и кэш сборщика (безопасно, не трогает работающее):
docker system prune -fТотальная очистка (удалит вообще всё, включая неиспользуемые образы и тома):
docker system prune -a --volumes -f