Docker для системных администраторов: практическое руководство по контейнеризации и эксплуатации сервисов | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Docker для системных администраторов: практическое руководство по контейнеризации и эксплуатации сервисов

07 мая 2026 6 мин. чтения
Содержание статьи

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):

  1. Загрузите новый образ: docker-compose pull nginx
  2. Перезапустите сервис: docker-compose up -d --no-deps nginx
  3. Удалите старый образ: docker image prune -f

Для stateful-сервисов (PostgreSQL):

  1. Создайте полный бэкап базы данных
  2. Проверьте совместимость версий в changelog
  3. Остановите контейнер: docker-compose stop postgres
  4. Обновите версию образа в docker-compose.yml
  5. Запустите: docker-compose up -d postgres
  6. Проверьте целостность данных

Флаг --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-развертываний.

Поделиться:
Сохранить гайд? В закладки браузера