Это может показаться немного запутанным вопросом...
Недавно я начал экспериментировать с Docker и пытаюсь настроить базовый сервер Lamp.
У меня есть docker-образ centos с httpd, php и mysql.
Однако в контейнере Docker я не могу запускать службы так, как я обычно это делаю через systemd / service.
Я могу запустить httpd напрямую через/usr/sbin/httpd
Так в чем же тогда разница между запуском httpd через , /usr/sbin/httpd
а не через systemctl start httpd
?
Есть ли «правильный» способ остановить или перезапустить httpd? - Я думал, что могу просто завершить процесс, но, похоже, он запускает около 10 процессов Apache.
Я понимаю, что это не совсем конкретный вопрос, но любые ссылки на соответствующие материалы будут приняты с благодарностью.
решение1
Вы не можете использовать systemctl
, если ваш PID 1 не является systemd. Вы можете узнать свой PID 1 с помощью ps -q 1
.
Возможность запускать и останавливать службы обычным способом — одно из преимуществ, упомянутых в этой статье.Запуск systemd в непривилегированном контейнере. Другие регистрируют или отслеживают дочерние процессы, как описано в ответе Андрея.
решение2
Служба systemd запустит процесс аналогично запуску напрямую, однако она будет отслеживать все ответвленные процессы и потоки. Это означает, что когда вы systemctl stop apache
завершите все дочерние процессы. Также использование процессов systemd удобно, потому что они будут работать в фоновом режиме и могут быть запущены при запуске системы.
решение3
Учитывая ваш уровень обучения, я бы не советовал использовать Docker для решения вашей задачи.
Если вы используете Docker для изоляции процесса, вы можете использовать для этого уникальных пользователей Unix, или systemd также включает директивы для ограничения того, к чему может получить доступ служба systemd. См., например, Capabilities=
в man systemd.exec
.
Кроме того, для изоляции процессов с помощью Docker вам необходимо запустить каждую базу данных и веб-сервер в разных контейнерах Docker.
Другая важная функция, которая systemd
обеспечивает управление процессами. То есть, если ваш httpd
процесс падает, systemd перезапустит его для вас.
Я рекомендую сначала запустить все процессы непосредственно на хост-сервере с помощью systemd. Многие современные пакеты systemd
уже поставляются с файлами конфигурации.
Как только вы хорошо поймете systemd
и поймете, какие преимущества даст добавление Docker, рассмотрите возможность его использования в вашем случае.
На моей работе мы пробовали использовать Docker для управления набором сервисов, но позже привыкли управлять им напрямую, systemd
и в результате получилась более чистая система, которая нравится команде, с меньшим количеством bash
скриптов для объединения и обслуживания всех элементов.