Справочники
Шпаргалка по Docker
Частые команды docker и docker compose, а рядом — ключи compose.yaml с примерами: сборка, порты, тома, depends_on с healthcheck, профили, лимиты и переменные.
Показано 80 из 80 строк.
Контейнеры
docker ps -a
Все контейнеры, включая остановленные.
docker run -d -p 8080:80 --name web nginx
Запустить контейнер в фоне с пробросом порта и именем.
docker run --rm -it ubuntu bash
Одноразовый интерактивный контейнер (удалится при выходе).
docker run -v $(pwd):/app -w /app node:22 npm test
Прогнать команду в контейнере с текущей папкой.
docker exec -it web bash
Зайти внутрь работающего контейнера.
docker logs -f --tail 100 web
Последние 100 строк логов и следить дальше.
docker stop web && docker rm web
Остановить и удалить контейнер.
docker restart web
Перезапустить контейнер.
docker stats
CPU/память/сеть контейнеров в реальном времени.
docker inspect web
Полная конфигурация контейнера в JSON.
docker port web
Проброшенные порты контейнера.
docker cp web:/var/log/nginx/access.log .
Скопировать файл из контейнера на хост.
docker update --restart unless-stopped web
Автозапуск контейнера после перезагрузки хоста.
Образы
docker build -t myapp:1.0 .
Собрать образ из Dockerfile в текущей папке.
docker build --no-cache -t myapp .
Пересобрать образ без кэша слоёв.
docker images
Список локальных образов.
docker rmi myapp:1.0
Удалить образ.
docker tag myapp:1.0 registry.example.com/myapp:1.0
Пометить образ для реестра.
docker push registry.example.com/myapp:1.0
Отправить образ в реестр.
docker pull postgres:16
Скачать образ из реестра.
docker history myapp:1.0
Слои образа и их размер.
Тома, сети и уборка
docker volume ls
Список volume.
docker volume rm myvolume
Удалить volume (данные будут потеряны).
docker network ls
Список сетей Docker.
docker network inspect bridge
Кто подключён к сети и какие IP.
docker system df
Сколько места занимают образы, контейнеры и volume.
docker system prune -a
Удалить всё неиспользуемое: контейнеры, образы, сети (осторожно).
Команды docker compose
docker compose up -d
Поднять все сервисы из compose-файла в фоне.
docker compose up -d --build
Пересобрать образы и перезапустить сервисы.
docker compose down
Остановить и удалить контейнеры и сети проекта.
docker compose down -v
То же + удалить volume проекта (данные будут потеряны).
docker compose logs -f service
Логи одного сервиса из compose.
docker compose ps
Статус сервисов проекта.
docker compose restart service
Перезапустить один сервис.
docker compose exec service sh
Зайти в контейнер сервиса.
docker compose pull && docker compose up -d
Обновить образы и перезапустить (типичный деплой).
docker compose config
Итоговый файл после подстановки переменных, override-файлов и extends — первое, что смотреть при странностях.
docker compose -f compose.yaml -f compose.prod.yaml up -d
Наложить второй файл на первый: словари сливаются, списки портов и томов дополняются.
docker compose --profile debug up -d
Поднять и сервисы с profiles: [debug], которые без флага не стартуют.
docker compose run --rm service npm run migrate
Разовая команда в новом контейнере сервиса.
docker compose watch
Синхронизировать код и пересобирать по правилам develop.watch (Compose 2.22+).
compose.yaml: ключи сервиса
Файл по умолчанию — compose.yaml (понимаются и старые docker-compose.yml). Ключ version: устарел: Compose v2 его игнорирует и предупреждает.
image: postgres:16-alpine
Готовый образ. Вместе с build — имя, под которым собранный образ будет сохранён.
build: context: . dockerfile: Dockerfile.prod target: runtime args: NODE_VERSION: "22"
Собрать образ: папка контекста, другой Dockerfile, стадия многоэтапной сборки и ARG.
command: ["npm", "run", "start"]
Заменить CMD образа. Форма массива не проходит через shell.
entrypoint: ["/docker-entrypoint.sh"]
Заменить ENTRYPOINT образа.
environment: NODE_ENV: production DB_HOST: db
Переменные окружения контейнера (словарём или списком KEY=value).
env_file: - .env.app
Переменные из файла прямо в контейнер. Не путать с .env рядом с compose.yaml — тот нужен для подстановок ${…} в сам файл.
ports: - "8080:80" - "127.0.0.1:5432:5432"
ХОСТ:КОНТЕЙНЕР. Порт без адреса открыт всему миру и обходит ufw — базе данных нужен 127.0.0.1.
expose: - "3000"
Только объявить порт для других сервисов, без публикации на хосте.
volumes: - pgdata:/var/lib/postgresql/data - ./nginx.conf:/etc/nginx/nginx.conf:ro
Именованный том (переживает down) и файл с хоста только для чтения.
restart: unless-stopped
Политика перезапуска: no, always, on-failure[:N], unless-stopped.
container_name: myapp-db
Фиксированное имя контейнера. Мешает масштабированию: два экземпляра с одним именем не создать.
user: "1000:1000"
От чьего имени запускать процесс.
working_dir: /app
Рабочая папка процесса.
extra_hosts: - "host.docker.internal:host-gateway"
Дать контейнеру имя хоста — на Linux его нет по умолчанию.
profiles: ["debug"]
Сервис стартует, только если профиль включён флагом --profile или COMPOSE_PROFILES.
deploy: resources: limits: cpus: "1.5" memory: 512M
Лимиты процессора и памяти; обычный docker compose их соблюдает, Swarm не нужен.
logging: driver: json-file options: max-size: "10m" max-file: "3"
Ротация логов. Без неё json-логи растут, пока не кончится диск.
init: true
Маленький init-процесс PID 1: пересылает сигналы и убирает зомби.
stop_grace_period: 30s
Сколько ждать после SIGTERM до SIGKILL (по умолчанию 10 с).
read_only: true tmpfs: - /tmp
Файловая система контейнера только для чтения, /tmp — в памяти.
cap_drop: [ALL] cap_add: [NET_BIND_SERVICE]
Снять все привилегии ядра и вернуть только нужную.
platform: linux/amd64
Архитектура образа — например, запустить amd64-образ на Mac с Apple Silicon.
compose.yaml: зависимости и здоровье
Короткий depends_on ждёт только старта контейнера, а не готовности базы. Чтобы ждать готовности, нужны healthcheck у зависимости и condition: service_healthy.
depends_on: - db
Порядок запуска: db стартует раньше. Готовность не проверяется.
depends_on: db: condition: service_healthy restart: true
Ждать, пока healthcheck db станет healthy; restart: true — перезапускать сервис вслед за db.
depends_on: migrate: condition: service_completed_successfully
Дождаться, пока разовый сервис (миграции) завершится с кодом 0.
healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 start_period: 30s
Проверка готовности. По умолчанию interval и timeout — 30 с, retries — 3.
healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
Проверка HTTP-ручки; curl должен быть внутри образа.
healthcheck: disable: true
Отключить HEALTHCHECK, объявленный в образе.
compose.yaml: верхний уровень и переменные
name: myproject
Имя проекта — префикс контейнеров, сетей и томов. Иначе берётся имя папки.
volumes: pgdata: {}
Объявить именованный том, на который ссылаются сервисы.
volumes: shared: external: true
Том создан заранее вне проекта; down -v его не удалит.
networks: backend: internal: true
Сеть без выхода наружу — для базы и очередей.
secrets: db_password: file: ./secrets/db_password.txt
Секрет из файла; в сервисе — secrets: [db_password], внутри — /run/secrets/db_password.
include: - ../shared/compose.yaml
Подключить другой compose-файл со своими относительными путями (Compose 2.20+).
image: "nginx:${NGINX_TAG:-1.27}"
Подстановка из окружения или .env; после :- — значение по умолчанию.
password: ${DB_PASSWORD:?задайте DB_PASSWORD}
Остановиться с ошибкой, если переменная пуста или не задана.
command: ["/bin/sh", "-c", "echo $$HOME"]
Compose передаёт буквальный $ явно запущенному shell, который раскрывает HOME внутри контейнера.
compose.override.yaml
Файл рядом с compose.yaml подхватывается автоматически и накладывается сверху — удобно для локальной разработки.
x-common: &common restart: unless-stopped services: api: <<: *common
Ключи x-* Compose игнорирует — место для YAML-якорей с общими настройками.