Справочники

Шпаргалка по 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-якорей с общими настройками.