Рассмотрим как собрать Docker конейтнер с systemd. Будем использовать образ Debian Buster
systemd может понадобиться если в конейтнере деплоится какое-то приложение, которым нужно управлять так же как это делается обычно при размещении на хост машине.
Во всех стандартных сборках с Debian в качестве системы инициализации предполагается init. Любые попытки использовать systemd в готовом конейнере обречены на неудачу даже если установить systemd.
Выход — добавить systemd на этапе подготовки контейнера.
Создаем такой Dockerfile, здесь устанавливается также init (опционально)
FROM debian:buster RUN apt-get update && apt-get install -y init && apt-get clean all RUN apt-get update && apt-get install systemd
Затем в каталоге с Dockerfile запускается сборка
docker build .
На выходе имеем идентификатор образа, указывая его зпускаем контейнер
docker run -itd —privileged 9e9242ac61b9 systemd
Далее можно заходить в него
docker exec -it 47df433941f3bff531f4fdba1319edfb68d98f2f9517210504718669df6c0ff4 bash
Внутри будет привычная система Debian Buster, PID 1 будет иметь процесс systemd, который будет отвечать за запук других служб
Пример unit файла systemd для деплоя ruby приложения можно найти в статье