Docker — Commands
If you like this project, consider supporting me on Buy Me a Coffee ☕️
🐳 Docker — Container Runtime & Build Engine
Description / Описание:
Docker is an open-source platform for building, shipping, and running applications in lightweight, portable containers. It packages applications with their dependencies into standardized units (images) that can run consistently across any environment — from a developer's laptop to production servers. Docker uses a client-server architecture with the Docker daemon (dockerd), the CLI (docker), and an image registry (Docker Hub or self-hosted). It is the industry standard for containerization and the foundation for most container orchestration platforms.
[!NOTE] Current Status: Docker remains the most widely used container runtime for development and CI/CD pipelines. For Kubernetes CRI, containerd (which Docker itself uses internally) is now the default runtime. Daemonless alternatives include Podman (rootless, systemd-native) and nerdctl (containerd-compatible CLI). For builds, BuildKit (built into Docker), Kaniko, and Buildah are popular alternatives. / Текущий статус: Docker остаётся самой популярной средой выполнения контейнеров. Для Kubernetes CRI по умолчанию используется containerd. Безпроцессные альтернативы: Podman, nerdctl. Для сборки: BuildKit, Kaniko, Buildah.
Default Ports: Daemon HTTP:
2375(insecure), Daemon HTTPS:2376(TLS), Registry:5000
Installation & Configuration
Package Management / Установка пакетов
# Install Docker (Debian/Ubuntu) / Установка Docker (Debian/Ubuntu)
apt-get update && apt-get install docker-ce docker-ce-cli containerd.io
# Install Docker (RHEL/CentOS) / Установка Docker (RHEL/CentOS)
yum install docker-ce docker-ce-cli containerd.io
Configuration Files / Конфигурационные файлы
/etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
[!TIP] Always validate JSON syntax before restarting the service. / Всегда проверяйте синтаксис JSON перед перезапуском сервиса.
/etc/default/docker
Environment variables for the Docker daemon (Startup options). / Переменные окружения для демона Docker.
~/.docker/config.json
Client-side configuration (Auth tokens, aliases). / Клиентская конфигурация (токены авторизации, алиасы).
Contexts / Контексты
Manage multiple Docker environments. / Управление несколькими окружениями Docker.
docker context ls # List contexts / Список контекстов
docker context create my-context --docker "host=ssh://<USER>@<HOST>" # Create context via SSH / Создать контекст через SSH
docker context use my-context # Switch context / Переключить контекст
Core Management
Lifecycle / Жизненный цикл
docker run -d --name <CONTAINER_NAME> <IMAGE> # Run container detached / Запуск контейнера в фоне
docker start <CONTAINER_ID> # Start stopped container / Запустить остановленный контейнер
docker stop <CONTAINER_ID> # Stop running container / Остановить запущенный контейнер
docker restart <CONTAINER_ID> # Restart container / Перезапустить контейнер
docker pause <CONTAINER_ID> # Pause processes / Приостановить процессы
docker unpause <CONTAINER_ID> # Unpause processes / Возобновить процессы
docker wait <CONTAINER_ID> # Block until container stops / Ждать остановки контейнера
docker kill <CONTAINER_ID> # Kill container / Принудительно завершить контейнер
Containers / Контейнеры
docker ps # List running containers / Список запущенных контейнеров
docker ps -a # List all containers / Список всех контейнеров
docker logs <CONTAINER_ID> # View logs / Просмотр логов
docker logs -f <CONTAINER_ID> # Follow logs / Следить за логами
docker inspect <CONTAINER_ID> # Inspect container / Информация о контейнере
docker stats # Resource usage stats / Статистика использования ресурсов
docker top <CONTAINER_ID> # Display running processes / Показать запущенные процессы
Interactive Execution / Интерактивное выполнение
docker exec -it <CONTAINER_ID> /bin/bash # Open bash shell / Открыть оболочку bash
docker exec -it <CONTAINER_ID> sh # Open sh shell / Открыть оболочку sh
Images / Образы
docker images # List images / Список образов
docker pull <IMAGE>:<TAG> # Pull image / Скачать образ
docker push <REGISTRY>/<IMAGE>:<TAG> # Push image / Отправить образ
docker rmi <IMAGE_ID> # Remove image / Удалить образ
docker tag <SOURCE_IMAGE> <TARGET_IMAGE> # Tag image / Назначить тег
docker history <IMAGE_ID> # View image layers / Просмотр слоёв образа
docker build -t <IMAGE>:<TAG> . # Build from Dockerfile / Сборка из Dockerfile
docker buildx build --platform linux/amd64,linux/arm64 -t <IMAGE>:<TAG> . # Multi-arch build / Мульти-арх сборка
Networks / Сети
| Driver | Description (EN / RU) | Use Case / Best for... |
|---|---|---|
| bridge | Default network driver / Драйвер по умолчанию | Standalone containers communicating on the same host. |
| host | Remove network isolation / Нет сетевой изоляции | Performance optimization, removing NAT overhead. |
| overlay | Multi-host network / Сеть между хостами | Swarm services, communicating across multiple daemons. |
| macvlan | Assign MAC address / Назначение MAC-адреса | Legacy apps needing direct physical network connection. |
| none | Disable networking / Отключить сеть | Complete isolation, offline batch jobs. |
docker network ls # List networks / Список сетей
docker network create --driver bridge <NET_NAME> # Create bridge network / Создать bridge сеть
docker network inspect <NET_NAME> # Inspect network / Информация о сети
docker network connect <NET_NAME> <CONTAINER_ID> # Connect container / Подключить контейнер
docker network disconnect <NET_NAME> <CONTAINER_ID> # Disconnect container / Отключить контейнер
docker network rm <NET_NAME> # Remove network / Удалить сеть
Volumes / Тома
| Type | Description (EN / RU) | Use Case / Best for... |
|---|---|---|
| volume | Managed by Docker / Управляется Docker | Persisting data generated by and used by Docker containers. |
| bind mount | Host file system path / Путь ФС хоста | Sharing config files or source code between host and container. |
| tmpfs | In-memory storage / Хранение в памяти | Storing sensitive info or performance-critical non-persistent data. |
docker volume ls # List volumes / Список томов
docker volume create <VOL_NAME> # Create volume / Создать том
docker volume inspect <VOL_NAME> # Inspect volume / Информация о томе
docker volume rm <VOL_NAME> # Remove volume / Удалить том
docker volume prune # Remove unused volumes / Удалить неиспользуемые тома
Cleanup / Очистка
[!WARNING] Use prune commands with caution in production. They permanently delete data. Используйте команды очистки с осторожностью в продакшене. Данные удаляются безвозвратно.
docker system df # Show disk usage / Показать использование диска
docker system prune # Remove unused data / Удалить неиспользуемые данные
docker system prune -a --volumes # Deep clean (incl. volumes) / Глубокая очистка (вкл. тома)
docker container prune # Remove stopped containers / Удалить остановленные контейнеры
docker image prune -a # Remove unused images / Удалить неиспользуемые образы
Sysadmin Operations
Service Control / Управление сервисом
systemctl start docker # Start Docker / Запустить Docker
systemctl stop docker # Stop Docker / Остановить Docker
systemctl restart docker # Restart Docker / Перезапустить Docker
systemctl enable docker # Enable on boot / Включить автозапуск
systemctl status docker # Check status / Проверить статус
Resource Tuning / Настройка ресурсов
Limit container resources via docker run. / Ограничение ресурсов контейнера через docker run.
--memory="1g" # Hard memory limit / Жесткий лимит памяти
--memory-reservation="512m" # Soft memory limit / Мягкий лимит памяти
--cpus="1.5" # CPU quota (1.5 cores) / Квота CPU (1.5 ядра)
--pids-limit=100 # Limit PIDs / Лимит количества процессов
Default Ports / Порты по умолчанию
| Port | Description (EN / RU) |
|---|---|
| 2375 | Docker daemon HTTP (insecure) / Демон Docker HTTP (небезопасно) |
| 2376 | Docker daemon HTTPS (TLS) / Демон Docker HTTPS (TLS) |
| 5000 | Docker Registry / Реестр Docker |
Logging & Rotation / Логирование и ротация
Default Log Paths / Пути к логам по умолчанию
/var/lib/docker/containers/<CONTAINER_ID>/<CONTAINER_ID>-json.log
[!NOTE] It is best practice to configure log rotation in
daemon.jsonto prevent disk exhaustion. Рекомендуется настроить ротацию логов вdaemon.jsonдля предотвращения переполнения диска.
Security
User Wrapper / Управление правами пользователей
Manage strict permissions via user groups instead of sudo. / Управление правами через группы пользователей вместо sudo.
usermod -aG docker <USER> # Add user to docker group / Добавить пользователя в группу docker
newgrp docker # Activate group changes / Применить изменения группы
Registry Authentication / Аутентификация в реестре
docker login <REGISTRY_URL> # Login / Вход
docker logout <REGISTRY_URL> # Logout / Выход
Using a Service Account or Token / Использование сервисного аккаунта или токена:
cat ~/my-password.txt | docker login --username <USER> --password-stdin <REGISTRY_URL>
Content Trust / Подпись образов
Enable enforcement of signed images. / Включить проверку подписанных образов.
export DOCKER_CONTENT_TRUST=1 # Enable trust / Включить проверку подписей
Backup & Restore
Image Backup / Резервная копия образов
Transfer images between air-gapped systems. / Перенос образов между изолированными системами.
docker save -o <IMAGE_NAME>.tar <IMAGE_NAME> # Save image to tar / Сохранить образ в tar
docker load -i <IMAGE_NAME>.tar # Load image from tar / Загрузить образ из tar
Container Backup / Резервная копия контейнеров
Export filesystem (without metadata/history). / Экспорт файловой системы (без метаданных/истории).
docker export <CONTAINER_ID> > <CONTAINER_NAME>.tar # Export container / Экспорт контейнера
docker import <CONTAINER_NAME>.tar # Import as image / Импорт как образ
Volume Backup / Резервная копия томов
Backup data from a volume using a helper container. / Бэкап данных из тома с помощью вспомогательного контейнера.
docker run --rm -v <VOL_NAME>:/volume -v $(pwd):/backup alpine tar cvf /backup/backup.tar /volume
Troubleshooting & Tools
Common Issues / Частые проблемы
| Issue / Проблема | Fix / Решение |
|---|---|
| Permission Denied | Check if user is in docker group or socket permissions (/var/run/docker.sock). / Проверить группу docker или права на сокет. |
| Network Conflicts | Check subnet overlap in docker network inspect. / Проверить пересечение подсетей. |
| OOMKilled | Check docker inspect <CONTAINER_ID> → State → OOMKilled. / Проверить через docker inspect. |
Debug Tools / Инструменты отладки
docker events # Stream server events / Поток событий сервера
docker diff <CONTAINER_ID> # Show FS changes / Показать изменения ФС
ctop # Top-like interface for containers / Top-подобный интерфейс
dive <IMAGE> # Inspect image layers / Инспекция слоёв образа
Debug Container / Отладочный контейнер
Run a container with a custom entrypoint to debug startup issues. / Запуск контейнера с пользовательской точкой входа для отладки.
docker run -it --entrypoint /bin/sh <IMAGE> # Override entrypoint / Переопределить точку входа
Docker Compose
docker-compose.yml
version: "3.8"
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- app-net
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: <PASSWORD>
volumes:
- db-data:/var/lib/postgresql/data
networks:
- app-net
volumes:
db-data:
networks:
app-net:
Compose CLI Basics / Базовые команды Compose
docker compose up -d # Start detached / Запуск в фоне
docker compose down # Stop & remove resources / Остановить и удалить
docker compose logs -f # Follow logs / Следить за логами
docker compose config # Validate config / Проверить конфиг
Environment Files / Файлы окружения
.env
# Example / Пример
POSTGRES_PASSWORD=<PASSWORD>
APP_ENV=prod
[!NOTE]
docker composeautomatically loads variables from.envin the project directory.docker composeавтоматически подхватывает переменные из.envв каталоге проекта.
Production-ish App + DB (Healthchecks + Safe Defaults) / Прод-подобный пример (Healthchecks + безопасные настройки)
docker-compose.yml
version: "3.8"
services:
app:
image: <REGISTRY>/<IMAGE>:<TAG> # App image / Образ приложения
environment:
APP_ENV: "prod" # Environment / Окружение
DATABASE_URL: "postgresql://<USER>:<PASSWORD>@db:5432/<DB>" # DSN / Строка подключения
depends_on:
db:
condition: service_healthy # Wait for DB health / Ждать готовности БД
ports:
- "8080:8080" # Publish port / Проброс порта
read_only: true # Reduce write surface / Минимизировать запись
tmpfs:
- /tmp # Ephemeral temp / Временные данные
security_opt:
- no-new-privileges:true # Prevent privilege escalation / Запрет повышения привилегий
cap_drop:
- ALL # Drop Linux caps / Сбросить capabilities
healthcheck:
test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8080/health"] # Health endpoint / Эндпоинт здоровья
interval: 10s
timeout: 3s
retries: 5
networks:
- app-net
db:
image: postgres:16
environment:
POSTGRES_USER: <USER>
POSTGRES_PASSWORD: <PASSWORD>
POSTGRES_DB: <DB>
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U <USER> -d <DB>"] # DB readiness / Готовность БД
interval: 10s
timeout: 5s
retries: 10
networks:
- app-net
volumes:
db-data:
networks:
app-net:
[!CAUTION]
depends_on.condition: service_healthyis supported by the Docker Compose implementation, but some orchestrators ignore it.depends_on.condition: service_healthyподдерживается Docker Compose, но некоторые оркестраторы это игнорируют.
Dev/Prod Overrides / Разделение dev/prod через override
docker-compose.yml
version: "3.8"
services:
app:
image: <IMAGE>:<TAG> # Base config / Базовая конфигурация
environment:
APP_ENV: "prod"
docker-compose.override.yml
version: "3.8"
services:
app:
environment:
APP_ENV: "dev" # Dev mode / Режим разработки
volumes:
- ./:/app # Bind mount source / Монтировать исходники
command: ["sh", "-lc", "./run-dev.sh"] # Dev command / Команда для dev
docker compose up -d # Uses override automatically / Автоматически использует override
docker compose -f docker-compose.yml -f docker-compose.override.yml up -d # Explicit / Явно
Secrets (File-based) / Секреты (через файлы)
docker-compose.yml
version: "3.8"
services:
app:
image: <REGISTRY>/<IMAGE>:<TAG>
secrets:
- app_secret_key
environment:
SECRET_KEY_FILE: "/run/secrets/app_secret_key" # Read from file / Читать из файла
secrets:
app_secret_key:
file: ./secrets/app_secret_key.txt # Store outside VCS / Не хранить в VCS
[!WARNING] Treat
./secrets/*as sensitive. Do not commit it to Git../secrets/*— чувствительные данные. Не коммитьте в Git.
Profiles (Optional Services) / Профили (опциональные сервисы)
docker-compose.yml
version: "3.8"
services:
app:
image: <IMAGE>:<TAG>
debug:
image: alpine:3.20
command: ["sh", "-lc", "sleep infinity"] # Debug toolbox / Отладочный контейнер
profiles: ["debug"]
docker compose up -d # Start normal services / Запуск обычных сервисов
docker compose --profile debug up -d # Include debug service / Запуск с debug-сервисом
Production Runbook (Deploy/Rollback) / Прод-ранбук (Deploy/Rollback)
- Deploy / Деплой
docker compose pull— Pull new images / Скачать новые образыdocker compose up -d— Apply changes / Применить измененияdocker compose ps— Verify / Проверитьdocker compose logs -f --tail=200 app— Watch / Наблюдать
- Rollback / Откат
- Pin previous tag in
docker-compose.yml(e.g.<TAG_OLD>) / Зафиксировать предыдущий тег docker compose pull && docker compose up -d— Redeploy / Повторный деплой- Validate health endpoint / Проверить health
- Pin previous tag in
Dockerfile Templates
./Dockerfile
Alpine Base
FROM alpine:3.14
RUN apk add --no-cache curl
CMD ["sh"]
Node.js
FROM node:14-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
USER node
CMD ["npm", "start"]
Java
FROM openjdk:11-jre-slim
COPY app.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
Node.js Multi-stage (Smaller Runtime) / Multi-stage Node.js (меньше образ)
FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY --from=build /app/dist ./dist
COPY --from=build /app/package*.json ./
RUN npm ci --omit=dev
USER node
EXPOSE 8080
HEALTHCHECK --interval=10s --timeout=3s --retries=5 CMD wget -qO- http://127.0.0.1:8080/health || exit 1
CMD ["node", "dist/server.js"]
Python (Non-root + No cache) / Python (не root + без кэша)
FROM python:3.12-slim
WORKDIR /app
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1
RUN useradd -r -u 10001 -g nogroup appuser
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
USER 10001
EXPOSE 8000
CMD ["python", "-m", "app"]
Go Multi-stage (Static Binary) / Go Multi-stage (статический бинарник)
FROM golang:1.22-alpine AS build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /out/app ./cmd/app
FROM alpine:3.20
RUN adduser -D -u 10001 appuser
COPY --from=build /out/app /usr/local/bin/app
USER 10001
EXPOSE 8080
CMD ["/usr/local/bin/app"]
Distroless (Minimal Attack Surface) / Distroless (минимальная поверхность атаки)
FROM golang:1.22 AS build
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o /out/app ./cmd/app
FROM gcr.io/distroless/static-debian12
USER 65532:65532
COPY --from=build /out/app /app
EXPOSE 8080
ENTRYPOINT ["/app"]
[!NOTE] Distroless images often have no shell/tools. Prefer external debugging containers (e.g.
alpine) and good logging. В distroless обычно нет shell/утилит. Для отладки используйте внешние debug-контейнеры и хорошие логи.
Build Args + Labels / Аргументы сборки + метки
FROM alpine:3.20
ARG VCS_REF="<GIT_SHA>"
ARG BUILD_DATE="<YYYY-MM-DD>"
LABEL org.opencontainers.image.revision=$VCS_REF \
org.opencontainers.image.created=$BUILD_DATE \
org.opencontainers.image.source="<REPO_URL>"
CMD ["sh", "-lc", "echo revision=$VCS_REF created=$BUILD_DATE"]
[!CAUTION] Avoid baking secrets into images via
ARGorENV. Use runtime secrets instead (Compose secrets/K8s secrets). Не вшивайте секреты в образ черезARGилиENV. Используйте секреты на этапе запуска.
Logrotate Configuration
/etc/logrotate.d/docker
/var/log/docker.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
Documentation Links
- Docker Official Documentation: https://docs.docker.com/
- Docker CLI Reference: https://docs.docker.com/reference/cli/docker/
- Dockerfile Reference: https://docs.docker.com/reference/dockerfile/
- Docker Compose Reference: https://docs.docker.com/compose/
- Docker Hub: https://hub.docker.com/
- Docker GitHub Repository: https://github.com/moby/moby
- Docker Security Best Practices: https://docs.docker.com/build/building/best-practices/