Подробный гайд: Docker + systemd в ALT Linux

Гайд по установке Docker в ALT Linux: настройка systemd, права пользователей, drop-in конфиги, автозапуск compose и диагностика сервисов.

2026.04.28                  


Подробный гайд: Docker + systemd в ALT LinuxПодробный гайд: 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

  1. Пакетный менеджер: apt (не dnf/yum). Синтаксис совместим с Debian/Ubuntu, но пакеты RPM.
  2. Репозитории: http://ftp.altlinux.org/pub/distributions/ALTLinux/ + ветка (p10, p11, sisyphus).
  3. Systemd: Полноценная поддержка с версии 9.0+. Unit-файлы совместимы с upstream.
  4. Контейнерный runtime: В современных пакетах ALT containerd устанавливается как зависимость автоматически.
  5. Безопасность: По умолчанию 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/

Итог

  1. Установите docker и docker-compose-plugin через apt.
  2. Включите и запустите сервис: systemctl enable --now docker.
  3. При необходимости настройте лимиты, proxy или параметры запуска через override.conf.
  4. Добавьте пользователя в группу docker для удобства (с учётом рисков безопасности).
  5. Используйте journalctl -u docker для диагностики.