Содержание
Правильная настройка Docker-хоста и выполнение необходимых действий могут сделать ваше погружение в контейнеризацию легким и заложить прочный фундамент для домашней лаборатории или производственного окружения. Давайте рассмотрим первые шаги, которые я выполняю на любом новом Docker-хосте. Это советы и настройки, которые я узнал за годы работы, делающие использование Docker проще, стабильнее и безопаснее.
1. Создание отдельного пользователя и защита SSH
Запуск всего от имени root или разрешение входа по SSH с паролем — два самых быстрых способа быть взломанным. Мой первый шаг — добавить не-root пользователя и защитить доступ по SSH. Лучший способ сделать это — включить аутентификацию по ключу и отключить аутентификацию по паролю.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<strong># Создание пользователя и добавление в группы sudo и docker</strong> sudo adduser dockeradmin sudo usermod -aG sudo,docker dockeradmin <strong># Копирование SSH-ключа</strong> sudo mkdir -p /home/dockeradmin/.ssh sudo cp ~/.ssh/id_rsa.pub /home/dockeradmin/.ssh/authorized_keys sudo chown -R dockeradmin:dockeradmin /home/dockeradmin/.ssh sudo chmod 700 /home/dockeradmin/.ssh sudo chmod 600 /home/dockeradmin/.ssh/authorized_keys <strong># Защита SSH: отключение входа root и паролей</strong> sudo sed -i \ -e 's/^PermitRootLogin.*/PermitRootLogin no/' \ -e 's/^#PasswordAuthentication yes/PasswordAuthentication no/' \ /etc/ssh/sshd_config sudo systemctl reload sshd |
Проверить пользователей в системе можно командой:
|
1 |
cat /etc/passwd |
2. Обновление ОС и установка основных CLI-утилит
После настройки пользователя одна из первых важных задач — обновление ОС. Это обязательный шаг, который нужно выполнить. Сразу же выполните все доступные обновления на вашем Linux-хосте.
Затем я устанавливаю несколько полезных инструментов. Взгляните на следующие команды для установки утилит в дополнение к обновлениям:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<strong># Обновление Linux-хоста</strong> sudo apt update && sudo apt upgrade -y <strong># Установка дополнительных утилит</strong> sudo apt install -y \ git \ curl \ wget \ jq \ yq \ htop \ btop \ chrony \ fail2ban |
Краткое описание этих дополнительных инструментов:
- git, curl, wget: загрузка репозиториев и файлов
- jq, yq: парсинг JSON/YAML в скриптах
- htop, btop: интерактивный мониторинг ресурсов
- chrony: надежный NTP-клиент
- fail2ban: защита от brute-force атак на SSH
Учтите, что команды могут отличаться для разных дистрибутивов Linux. Например, в RHEL/CentOS можно использовать dnf install -y.
3. Настройка часового пояса и локации
Точные временные метки важны для корреляции логов, проверки сроков действия сертификатов и метрик. Настройте хост на использование надежного NTP-пула и установите правильный часовой пояс.
|
1 2 3 4 5 6 7 8 9 10 11 |
<strong># Включение и запуск chrony</strong> sudo systemctl enable --now chrony <strong># Проверка статуса синхронизации NTP</strong> chronyc tracking <strong># Установка часового пояса</strong> sudo timedatectl set-timezone America/Chicago <strong># Подтверждение</strong> timedatectl status |
4. Создание директории для Docker-проектов
Единое место для всех ваших Docker Compose или Terraform-файлов упорядочивает рабочее пространство. Обычно я создаю:
|
1 2 |
mkdir -p ~/docker-projects chmod 755 ~/docker-projects |
Позже вы сможете клонировать каждый репозиторий приложения в ~/docker-projects/имя-приложения и запускать docker compose оттуда.
5. Защита хоста с помощью брандмауэра ufw и fail2ban
Независимо от того, какой брандмауэр вы используете, дополнительный уровень защиты на уровне ОС не помешает. Простое решение — установка ufw в Ubuntu Server.
|
1 2 3 4 5 6 7 8 9 |
<strong># Использование UFW в Ubuntu</strong> sudo apt install -y ufw sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh sudo ufw allow 2376/tcp # Docker daemon TLS (если используется) sudo ufw allow 7946/tcp # Общение между узлами Swarm (если используется) sudo ufw allow 4789/udp # Overlay-сети Swarm (если используется) sudo ufw enable |
Ранее мы видели, как установить Fail2Ban. Теперь давайте запустим и включим его:
|
1 |
sudo systemctl enable --now fail2ban |
6. Настройка Docker-демона
Вы можете настроить Docker-демон для принудительного ротирования логов, выбора предпочтительного драйвера хранилища и, при необходимости, указания зеркал реестров.
Создайте или отредактируйте /etc/docker/daemon.json:
|
1 2 3 4 5 6 7 8 9 10 |
{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" }, "storage-driver": "overlay2", "registry-mirrors": [], "insecure-registries": [] } |
После сохранения перезапустите Docker:
|
1 |
sudo systemctl restart docker |
7. Включение автоматических обновлений безопасности
В системах на основе Debian можно настроить автоматические обновления безопасности следующими командами:
|
1 2 |
sudo apt install -y unattended-upgrades sudo dpkg-reconfigure --priority=low unattended-upgrades |
Затем убедитесь, что в файле /etc/apt/apt.conf.d/50unattended-upgrades включены обновления безопасности. Это помогает поддерживать актуальность как ОС, так и пакетов Docker между вашими окнами обслуживания и гарантирует, что новые уязвимости безопасности будут исправлены как можно скорее.
Я предпочитаю использовать Netdata для мониторинга. Netdata предоставляет лицензию для домашних лабораторий и является отличным инструментом для мониторинга Docker-контейнеров.
Для мониторинга Docker-хоста и контейнеров можно использовать:
- Node Exporter для Prometheus
- cAdvisor для метрик на уровне контейнеров
- Netdata для интерактивных дашбордов
Пример фрагмента Docker Compose для cAdvisor и Node Exporter:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
version: "3.8" services: cadvisor: image: gcr.io/google-containers/cadvisor:latest volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro ports: - "8080:8080" restart: unless-stopped node-exporter: image: prom/node-exporter:latest pid: "host" volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys' - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($|/)' ports: - "9100:9100" restart: unless-stopped |
Стек можно запустить командой:
|
1 |
docker compose up -d |
9. Настройка расписания очистки Docker
Даже со встроенным ротированием Docker, неиспользуемые образы и тома будут накапливаться со временем. Я настраиваю еженедельное задание cron для их очистки:
|
1 |
sudo crontab -l | { cat; echo "0 3 * * SUN /usr/bin/docker system prune --all --volumes --force"; } | sudo crontab - |
Это задание выполняется каждое воскресенье в 3:00 AM и удаляет остановленные контейнеры, неиспользуемые сети, зависшие образы и неиспользуемые тома.
10. Опционально: настройка параметров ядра
Производительность сети и файловой системы Docker может быть улучшена с помощью нескольких настроек sysctl. Создайте файл /etc/sysctl.d/99-docker.conf:
|
1 2 3 4 |
net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 fs.file-max = 524288 vm.max_map_count = 262144 |
Примените их немедленно:
|
1 |
sudo sysctl --system |
- bridge-nf-call-iptables: гарантирует, что iptables видит bridge-трафик
- ip_forward: необходимо при использовании пользовательской маршрутизации
- file-max, max_map_count: поддерживают высокие нагрузки на файловую систему
11. Тестирование настройки с помощью простого контейнера
Прежде чем объявить хост готовым, убедитесь, что Docker настроен правильно:
|
1 2 3 |
docker run --rm hello-world docker run --rm -p 8080:80 nginx:alpine curl http://localhost:8080 |
Если обе команды выполняются успешно, сеть, драйвер хранилища и групповые разрешения работают как ожидалось.
12. Создание bootstrap-скрипта для воспроизводимости
После того как вы определили свой контрольный список, превратите его в исполняемый shell-скрипт (или Ansible-плейбук), чтобы вы могли автоматизированно и без ошибок переподготавливать хосты. Используйте ИИ-инструменты, такие как DeepSeek, ChatGPT, Gemini, Claude, или IDE с ИИ-функционалом, такие как Windsurf, Kilo Code или новый Amazon Kiro.
Заключение
С помощью описанных настроек и советов вы можете получить отлично настроенный Docker-хост, который будет безопасным и стабильно работать как в production, так и в домашней лаборатории. Этот набор шагов поможет сэкономить время на устранение неполадок и сделает ваш хост более безопасным и управляемым. Это не единственное, что можно сделать, но определенно те шаги, которые принесут реальную пользу. Что вы делаете на своих Docker-хостах?
Даже просто подбор, перевод и оформление статей требуют времени. А самостоятельный обзор устройств требует еще и финансовых вложений. Если Вы хотите больше обзоров, Вы можете помочь автору.






