Правильная настройка 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-хостах?
Даже просто подбор, перевод и оформление статей требуют времени. А самостоятельный обзор устройств требует еще и финансовых вложений. Если Вы хотите больше обзоров, Вы можете помочь автору.








Добавить комментарий