Docker решает ключевые проблемы системного администратора: изоляцию сервисов, воспроизводимость окружений и управление зависимостями. Эта статья дает практические инструкции, проверенные в рабочих средах. Вы получите готовые конфигурации для типовых сервисов и освоите операционные процедуры для production.
С чего начать: установка Docker и базовые концепции для сисадмина
Контейнеризация устраняет конфликты версий библиотек и упрощает развертывание. Docker Engine создает и запускает контейнеры, а Docker Compose управляет группами сервисов. Установка из официальных репозиториев гарантирует актуальность и безопасность.
Установка Docker Engine и Docker Compose: актуальные команды для 2026 года
Для Ubuntu 22.04 LTS и совместимых дистрибутивов:
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Для CentOS 8 Stream и RHEL-совместимых систем:
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
После установки добавьте пользователя в группу docker для работы без sudo:
sudo usermod -aG docker $USER
newgrp docker
Проверьте версии:
docker --version
docker compose version
Фиксируйте версию Docker Compose для стабильности. В 2026 году актуальна версия 2.23.0 или новее.
Dockerfile vs docker-compose.yml: что важно понимать системному администратору
| Компонент | Назначение | Использование сисадмином | Пример |
|---|---|---|---|
| Dockerfile | Инструкция для сборки образа одного сервиса | Кастомизация готовых образов, добавление конфигов | FROM nginx:alpine COPY nginx.conf /etc/nginx/ |
| docker-compose.yml | Декларативное описание группы сервисов | Управление стеками приложений, сетями, томами | services: web: image: nginx:alpine |
Системный администратор чаще работает с готовыми образами и compose-файлами. Понимание Dockerfile нужно для модификации образов под требования безопасности или политики компании.
Готовые шаблоны Dockerfile и docker-compose.yml для типовых сервисов
Эти конфигурации проверены на Ubuntu 22.04 LTS и CentOS 8. Используйте конкретные версии тегов вместо latest для воспроизводимости.
Nginx с кастомной конфигурацией и статикой
Dockerfile для кастомизации Nginx:
FROM nginx:1.24-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY sites-enabled/ /etc/nginx/sites-enabled/
COPY static/ /usr/share/nginx/html/
RUN chown -R nginx:nginx /usr/share/nginx/html
EXPOSE 80 443
Сервис в docker-compose.yml:
services:
nginx:
build: ./nginx
container_name: web-server
ports:
- "80:80"
- "443:443"
volumes:
- nginx_logs:/var/log/nginx
- ./ssl:/etc/nginx/ssl:ro
networks:
- frontend
restart: unless-stopped
PostgreSQL с персистентными данными и настройками
Используйте named volume для гарантированного сохранения данных:
services:
postgres:
image: postgres:15-alpine
container_name: postgres-db
environment:
POSTGRES_DB: appdb
POSTGRES_USER: admin
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
- ./postgresql.conf:/etc/postgresql/postgresql.conf:ro
command: >
postgres -c config_file=/etc/postgresql/postgresql.conf
networks:
- backend
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U admin"]
interval: 30s
timeout: 10s
retries: 3
Файл postgresql.conf оптимизирует shared_buffers для контейнера с 2 ГБ RAM:
shared_buffers = 512MB
max_connections = 100
log_statement = 'none'
log_duration = off
Redis как кэш или брокер сообщений
services:
redis:
image: redis:7-alpine
container_name: redis-cache
command: redis-server /usr/local/etc/redis/redis.conf
volumes:
- redis_data:/data
- ./redis.conf:/usr/local/etc/redis/redis.conf:ro
ports:
- "6379:6379"
networks:
- backend
restart: unless-stopped
Конфигурация redis.conf включает persistence:
appendonly yes
appendfilename "appendonly.aof"
save 900 1
maxmemory 512mb
maxmemory-policy allkeys-lru
Сборка стека: единый docker-compose.yml для всех сервисов
version: '3.8'
services:
nginx:
build: ./nginx
ports:
- "80:80"
- "443:443"
volumes:
- nginx_logs:/var/log/nginx
networks:
- frontend
- backend
depends_on:
postgres:
condition: service_healthy
restart: unless-stopped
postgres:
image: postgres:15-alpine
environment:
POSTGRES_DB: appdb
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- backend
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 30s
restart: unless-stopped
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
networks:
- backend
restart: unless-stopped
volumes:
nginx_logs:
postgres_data:
redis_data:
networks:
frontend:
driver: bridge
backend:
driver: bridge
internal: true
Сервисы в сети backend общаются по DNS-именам: postgres и redis. Nginx выступает шлюзом между frontend и backend сетями. Зависимость depends_on с healthcheck гарантирует запуск PostgreSQL до Nginx.
Для глубокого понимания работы с многоконтейнерными приложениями изучите пошаговое руководство по Docker Compose для DevOps.
Операционная эксплуатация: тома, сети, мониторинг и логи
Эти практики снижают риски в production-средах и упрощают диагностику проблем.
Управление данными: тома (volumes) и bind mounts на практике
| Тип | Управление | Использование | Пример в compose |
|---|---|---|---|
| Named volumes | Docker | Базы данных, кэши | postgres_data:/var/lib/postgresql/data |
| Bind mounts | Администратор | Конфиги, статика, логи | ./nginx.conf:/etc/nginx/nginx.conf:ro |
Бэкап named volume с PostgreSQL:
docker run --rm -v postgres_data:/data -v /backup:/backup alpine \
tar czf /backup/postgres_backup_$(date +%Y%m%d).tar.gz -C /data .
Восстановление:
docker stop postgres-container
docker run --rm -v postgres_data:/data -v /backup:/backup alpine \
tar xzf /backup/postgres_backup_20260507.tar.gz -C /data
docker start postgres-container
Сетевая изоляция и безопасная коммуникация между сервисами
Внешние порты открывайте только для шлюзовых сервисов. Внутренние сервисы изолируйте в отдельной сети с флагом internal: true. В compose-файле выше сеть backend не имеет доступа извне. Сервисы находят друг друга по имени, указанному в секции services.
Проверьте сетевую конфигурацию:
docker network ls
docker network inspect backend
Для сложных сценариев сетевой изоляции изучите продвинутый гайд по Docker сетям и безопасности.
Мониторинг потребления CPU, RAM и диска контейнерами
Команда docker stats показывает ресурсы в реальном времени:
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}"
Установите cAdvisor для сбора метрик и веб-интерфейса:
services:
cadvisor:
image: gcr.io/cadvisor/cadvisor:v0.47.0
container_name: cadvisor
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
- /dev/disk/:/dev/disk:ro
ports:
- "8080:8080"
restart: unless-stopped
Проверьте дисковое пространство внутри контейнера:
docker exec postgres-db df -h
docker exec postgres-db du -sh /var/lib/postgresql/data
Централизованное логирование: от просмотра логов до их сбора
Просмотр логов отдельного контейнера:
docker logs --tail 100 -f nginx-container
Логи всех сервисов в проекте:
docker-compose logs -f --tail=50
Настройте драйвер json-file с ротацией в docker-compose.yml:
services:
nginx:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
tag: "nginx"
Для production-сред используйте полное руководство по мониторингу и логированию Docker в production.
Процедуры обслуживания: обновление, бэкап и восстановление
Эти процедуры минимизируют downtime и защищают от потери данных.
Безопасное обновление образа контейнера без простоя сервиса
Для stateless-сервисов (Nginx, Redis):
- Загрузите новый образ:
docker-compose pull nginx - Перезапустите сервис:
docker-compose up -d --no-deps nginx - Удалите старый образ:
docker image prune -f
Для stateful-сервисов (PostgreSQL):
- Создайте полный бэкап базы данных
- Проверьте совместимость версий в changelog
- Остановите контейнер:
docker-compose stop postgres - Обновите версию образа в docker-compose.yml
- Запустите:
docker-compose up -d postgres - Проверьте целостность данных
Флаг --no-deps предотвращает перезапуск зависимых сервисов.
Стратегия бэкапа и восстановления данных из томов Docker
Скрипт для ежедневного бэкапа PostgreSQL:
#!/bin/bash
BACKUP_DIR="/backup/postgres"
DATE=$(date +%Y%m%d_%H%M%S)
VOLUME_NAME="$(docker volume ls -q | grep postgres)"
mkdir -p $BACKUP_DIR
docker run --rm -v $VOLUME_NAME:/data -v $BACKUP_DIR:/backup alpine \
tar czf /backup/postgres_$DATE.tar.gz -C /data .
# Удаляем бэкапы старше 30 дней
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete
Восстановление из бэкапа:
docker-compose stop postgres
docker run --rm -v postgres_data:/data -v /backup:/backup alpine \
sh -c "rm -rf /data/* && tar xzf /backup/postgres_20260507.tar.gz -C /data"
docker-compose start postgres
Тестируйте процедуру восстановления на тестовом стенде каждые 3 месяца.
От Docker Compose к оркестраторам: следующий шаг
Docker Compose учит декларативному описанию инфраструктуры. Эти знания напрямую применяются в оркестраторах:
- Сервис (service) в Docker Compose → Deployment в Kubernetes
- Тома (volumes) → PersistentVolumeClaim
- Сети (networks) → NetworkPolicy
- Переменные окружения (environment) → ConfigMap и Secret
Практики управления томами, сетевой изоляции и мониторинга одинаковы в Docker и Kubernetes. Для начала изучите практическое руководство по Docker Swarm - простую оркестрацию, совместимую с Docker Compose синтаксисом.
Для автоматизации работы с ИИ-моделями в инфраструктуре рассмотрите AiTunnel - агрегатор API для более 200 моделей нейросетей с единым интерфейсом и оплатой в рублях.
Дальнейшие шаги: освоить Docker Swarm для отказоустойчивости, затем перейти к Kubernetes для полной оркестрации. Все конфигурации из этой статьи станут основой для production-развертываний.