Подробный гайд: Docker + systemd в ALT Linux
Данный гайд рассчитан на стабильные ветки ALT Linux (p10, p11). В этих ветках systemd используется в качестве инициализатора по умолчанию, а пакетный менеджер — apt (RPM-based). Все команды выполняются от root или через sudo.
1. Подготовка системы
# Обновление пакетной базы и системы
sudo apt-get update
sudo apt-get dist-upgrade
# Проверка текущей ветки
cat /etc/altlinux-release
Примечание:
- Для production рекомендуется
p10илиp11. ВеткаSisyphusсодержит самые свежие пакеты, но не предназначена для стабильных серверов.
2. Установка Docker
В ALT Linux Docker поставляется в официальных репозиториях.
Установка выполняется одной командой:
# Установка демона Docker и базовых утилит
sudo apt-get install docker
# (Опционально) Плагин Compose v2 (рекомендуется вместо старого docker-compose)
sudo apt-get install docker-compose-plugin
Проверка доступной версии:
apt-cache policy docker
docker --version
docker compose version
Если вам требуется конкретная версия или Edge-релиз, можно подключить официальный репозиторий Docker Inc., но в большинстве случаев штатного пакета ALT достаточно.
3. Интеграция с systemd
Пакет docker в ALT Linux автоматически создаёт unit-файл docker.service.
Проверим его состояние:
systemctl status docker
Включение и запуск
sudo systemctl enable docker # автозапуск при загрузке
sudo systemctl start docker # немедленный запуск
Проверка:
systemctl is-enabled docker
systemctl is-active docker
docker info | grep -i "server version"
4. Управление сервисом через systemd
| Задача | Команда |
|---|---|
| Запуск / Остановка / Перезапуск | sudo systemctl start/stop/restart docker |
| Перезагрузка конфига без остановки контейнеров | sudo systemctl reload docker |
| Просмотр статуса и логов запуска | sudo systemctl status docker |
| Логи в реальном времени | sudo journalctl -u docker -f |
| Проверка зависимостей | systemctl list-dependencies docker |
| Проверка ограничений ресурсами | systemctl show docker -p MemoryLimit,LimitNOFILE |
5. Настройка прав пользователя
По умолчанию dockerd требует root.
Чтобы запускать команды от обычного пользователя:
# Группа docker создаётся автоматически при установке пакета
sudo usermod -aG docker $USER
# Применить изменения без перезагрузки
newgrp docker
# или выйдите и войдите в систему заново
Проверка:
docker run --rm hello-world
Безопасность:
- Добавление пользователя в группу
dockerэквивалентно правамrootв контексте контейнеризации. Используйте только для доверенных пользователей.
6. Продвинутая настройка systemd (Drop-in overrides)
Системный unit-файл находится в /usr/lib/systemd/system/docker.service. Не редактируйте его напрямую.
Используйте директорию override:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/override.conf
Примеры конфигов
1. Увеличение лимита открытых файлов и процессов
[Service]
LimitNOFILE=65536
LimitNPROC=65536
2. Настройка HTTP/HTTPS для pull/push
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:3128"
Environment="HTTPS_PROXY=http://proxy.example.com:3128"
Environment="NO_PROXY=localhost,127.0.0.1,.local"
3. Передача дополнительных параметров демону
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --log-level=warn --live-restore
Пустой ExecStart= необходим, чтобы полностью перезаписать стандартную строку запуска, а не добавить аргументы к ней.
Применение изменений:
sudo systemctl daemon-reload
sudo systemctl restart docker
7. Автоматизация Docker Compose проектов через systemd
Часто требуется запускать compose-стек как системную службу.
Пример создания unit-файла для приложения в /opt/myapp:
sudo nano /etc/systemd/system/myapp.service
[Unit]
Description=My Docker Compose Application
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Активация:
sudo systemctl daemon-reload
sudo systemctl enable --now myapp.service
sudo systemctl status myapp.service
8. Диагностика и troubleshooting
| Симптом | Решение |
|---|---|
docker.service не запускается |
sudo journalctl -u docker -e --no-pager |
Ошибка Cannot connect to Docker daemon |
sudo systemctl start docker && sudo systemctl enable docker |
| Контейнеры не имеют сети | sudo sysctl net.bridge.bridge-nf-call-iptables=1 (добавьте в /etc/sysctl.d/99-docker.conf) |
| SELinux/AppArmor блокирует запуск | В ALT Linux SELinux часто отключён. Если включён: sudo setsebool -P container_manage_cgroup 1 |
| Конфликт с firewalld/iptables | Docker управляет правилами автоматически. При необходимости: sudo firewall-cmd --permanent --add-masquerade && sudo firewall-cmd --reload |
| Старые образы занимают место | sudo docker system prune -af --volumes |
9. Особенности ALT Linux
- Пакетный менеджер:
apt(неdnf/yum). Синтаксис совместим с Debian/Ubuntu, но пакеты RPM. - Репозитории:
http://ftp.altlinux.org/pub/distributions/ALTLinux/+ ветка (p10,p11,sisyphus). - Systemd: Полноценная поддержка с версии 9.0+. Unit-файлы совместимы с upstream.
- Контейнерный runtime: В современных пакетах ALT
containerdустанавливается как зависимость автоматически. - Безопасность: По умолчанию SELinux в ALT Linux отключён (
enforcing=0). Если вы включали его вручную, потребуется настройка политик для Docker.
10. Полезные команды для ежедневной работы
# Проверка версии и конфигурации
docker version
docker info
# Мониторинг ресурсов
docker stats
systemd-cgtop
# Обновление пакетов (включая Docker)
sudo apt-get update
sudo apt-get install docker docker-compose-plugin
# Резервное копирование конфигурации systemd
sudo cp -a /etc/systemd/system/docker.service.d /backup/docker-systemd-overrides/
Итог
- Установите
dockerиdocker-compose-pluginчерезapt. - Включите и запустите сервис:
systemctl enable --now docker. - При необходимости настройте лимиты, proxy или параметры запуска через
override.conf. - Добавьте пользователя в группу
dockerдля удобства (с учётом рисков безопасности). - Используйте
journalctl -u dockerдля диагностики.