Полное руководство по Docker: от контейнера до кластера Docker Swarm

Автор George, Май 13, 2026, 10:20

« назад - далее »

George

Инструкция разделена на три логических этапа: базовое управление Docker, автоматизация через Docker Compose и развертывание отказоустойчивого кластера Docker Swarm.

ЧАСТЬ 1. Базовый Docker (Одиночные контейнеры)

1.1. Работа с образами (Images)
Скачать образ из Docker Hub без запуска контейнера:
Код: bash
docker pull ubuntu:latest
Посмотреть список всех скачанных образов:
Код: bash
docker images
Удалить ненужный образ:
Код: bash
docker rmi [IMAGE_ID_или_NAME]

1.2. Управление контейнерами (Containers)
Запустить контейнер в фоновом режиме (-d), пробросить порт (-p 80:80) и дать ему имя:
Код: bash
docker run -d --name my-web-server -p 80:80 nginx:latest

Посмотреть список только активных контейнеров:
Код: bash
docker ps

Посмотреть список всех контейнеров (включая остановленные):

Код: bash
docker ps -a
Остановить, запустить или перезапустить контейнер:
Код: bash
docker stop my-web-serverdocker start my-web-serverdocker restart my-web-server

Удалить остановленный контейнер:
Код: bash
docker rm my-web-server
Принудительно удалить работающий контейнер (одним махом):
Код: bash
docker rm -f my-web-server

1.3. Логи и диагностикаПосмотреть логи контейнера в реальном времени (-f) с выводом таймстампов (-t):
Код: bash
docker logs -ft my-web-server
Посмотреть только последние 50 строк лога:
Код: bash
docker logs --tail 50 my-web-server
Провалиться внутрь запущенного контейнера в интерактивном режиме (вызов терминала):
Код: bash
docker exec -it my-web-server bash

Посмотреть потребление ресурсов (CPU, RAM, Сеть) контейнерами в реальном времени:
Код: bash
docker stats
Посмотреть подробную низкоуровневую JSON-информацию о контейнере (IP-адрес, пути монтирования и т.д.):
Код: bash
docker inspect my-web-server
  •  

George

ЧАСТЬ 2. Docker Compose (Управление мультиконтейнерными приложениями)Docker Compose используется, когда нужно запустить связку (например, Web + PHP + MySQL) одной командой, описав её в файле docker-compose.yml.

2.1. Основные команды управления
Все команды выполняются строго внутри директории, где лежит файл docker-compose.yml.
Собрать образы, создать и запустить все контейнеры из файла в фоновом режиме:
Код: bash
docker compose up -d
Посмотреть статус контейнеров, описанных в текущем Compose-файле:
Код: bash
docker compose ps
Посмотреть агрегированные логи всех контейнеров проекта:
Код: bash
docker compose logs -f
Остановить и полностью удалить контейнеры, сети и тома, созданные этой сборкой:
Код: bash
docker compose down
Остановить контейнеры, но не удалять их:
Код: bash
docker compose stop
Выполнить команду внутри конкретного контейнера из Compose-файла (например, в сервисе с именем db):
Код: bash
docker compose exec db mysql -u root -p
  •  

George

ЧАСТЬ 3. Docker Swarm (Оркестрация и Кластеризация)
Docker Swarm превращает несколько серверов с Docker в один виртуальный суперкомпьютер.
 Нам понадобятся как минимум две роли: Manager (управляет кластером) и Worker (ноды, выполняющие задачи).
3.1. Инициализация кластераВыполняется строго на главной ноде, которая станет Менеджером (например, IP 10.10.1.42):Инициализировать Swarm-режим и привязать его к сетевому интерфейсу:
Код: bash
docker swarm init --advertise-addr 10.10.1.42
После выполнения этой команды Docker выведет в консоль уникальную строку с токеном вида: docker swarm join --token SWMTKN-... 10.10.1.42:2377
Если вы забыли или потеряли токен для добавления воркеров, выведите его заново:
Код: bash
docker swarm join-token worker
Если вам нужно добавить еще один Менеджер для отказоустойчивости, выведите токен управления:
Код: bash
docker swarm join-token manager

3.2. Подключение нод к кластеру
Выполняется на целевых рабочих серверах (Workers):
Вставьте скопированную на Менеджере команду, чтобы подключить сервер к кластеру:
Код: bash
docker swarm join --token SWMTKN-1-XXXXX-XXXXX 10.10.1.42:2377

3.3. Управление нодами кластера
Выполняется только на Менеджере:
Посмотреть список всех серверов в кластере и их статус (Active/Ready):
Код: bash
docker node ls
Перевести ноду в режим обслуживания (Drain), чтобы Swarm автоматически перенес с неё все работающие контейнеры на другие живые сервера перед перезагрузкой:
Код: bash
docker node update --availability drain [имя_ноды]
Вернуть ноду в рабочий режим (Active) после обслуживания:[
code]docker node update --availability active [имя_ноды][/code
]Удалить упавшую/демонтированную ноду из списка кластера:
Код: bash
docker node rm [имя_ноды]

3.4. Управление Сервисами (Services) вместо контейнеров
В Swarm вместо одиночных контейнеров запускаются "Сервисы". Они следят за тем, чтобы указанное количество копий приложения всегда работало в кластере.Создать сервис (например, веб-сервер) в количестве 3 реплик, распределенных по всему кластеру:
Код: bash
docker service create --name swarm-web --replicas 3 -p 8080:80 nginx:latest
Посмотреть список всех запущенных сервисов в Swarm:
Код: bash
docker service ls
Посмотреть, на каких конкретно серверах (нодах) развернуты реплики конкретного сервиса:
Код: bash
docker service ps swarm-web
Посмотреть логи всего распределенного сервиса со всех нод сразу:
Код: bash
docker service logs -f swarm-web
Масштабировать сервис "на лету" (изменить количество копий, например, увеличить до 5 или уменьшить до 1):
Код: bash
docker service scale swarm-web=5
Обновить образ сервиса без остановки приложения (Rolling Update — контейнеры будут перезапускаться по очереди):
Код: bash
docker service update --image nginx:alpine swarm-web
Полностью удалить сервис из кластера:
Код: bash
docker service rm swarm-web

3.5. Деплой через Стек (Stack)
Чтобы не писать длинные команды docker service create, в Swarm используют готовые Compose-файлы, которые разворачиваются как единый Стек (Stack).
Развернуть или обновить стек приложений из файла docker-compose.yml под именем prod_env:
Код: bash
docker stack deploy -c docker-compose.yml prod_env
Посмотреть список запущенных стеков:
Код: bash
docker stack ls
Посмотреть список всех сервисов, входящих в конкретный стек:
Код: bash
docker stack services prod_env
Полностью удалить весь стек и все его ресурсы из кластера:
Код: bash
docker stack rm prod_env

🧹 ЧАСТЬ 4. Очистка системы (Полезный бонус)Docker кэширует образы и хранит логи остановленных контейнеров, что со временем забивает диск.Удалить ВСЕ остановленные контейнеры, неиспользуемые сети и кэш сборщика (безопасно, не трогает работающее):
Код: bash
docker system prune -f
Тотальная очистка (удалит вообще всё, включая неиспользуемые образы и тома):
Код: bash
docker system prune -a --volumes -f
  •  

🡱 🡳

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.