Esta puede ser una pregunta un poco confusa...
Recientemente comencé a jugar con Docker y estoy intentando configurar un servidor de lámpara básico.
Tengo una imagen acoplable de centos con httpd, php y mysql.
Sin embargo, en un contenedor acoplable no puedo iniciar servicios como lo haría normalmente a través de systemd/service.
Puedo ejecutar httpd directamente a través de/usr/sbin/httpd
Entonces, ¿qué diferencia hay entre ejecutar httpd vía /usr/sbin/httpd
en lugar de vía systemctl start httpd
?
¿Existe una forma "adecuada" de detener o reiniciar httpd? - Pensé que podría simplemente finalizar el proceso, pero parece iniciar unos 10 procesos de Apache.
Aprecio que esta no sea una pregunta particularmente bien enfocada, pero cualquier sugerencia sobre material relevante será recibida con gratitud.
Respuesta1
No puede usarlo systemctl
si su PID 1 no es systemd. Puede encontrar su PID 1 con ps -q 1
.
Poder iniciar y detener servicios de forma normal es una de las ventajas mencionadas en este artículo sobreEjecutando systemd en un contenedor sin privilegios. Otros registran o rastrean procesos secundarios como se describe en la respuesta de Andrei.
Respuesta2
Un servicio systemd iniciará el proceso de manera similar a ejecutarlo directamente, sin embargo, realizará un seguimiento de todos los procesos y subprocesos bifurcados. Esto significa que cuando systemctl stop apache
cierre todos los procesos secundarios. También es bueno usar procesos systemd porque se ejecutarán en segundo plano y se pueden iniciar al iniciar el sistema.
Respuesta3
Teniendo en cuenta su ubicación en la curva de aprendizaje, no usaría Docker para su tarea.
Si está utilizando Docker para aislar procesos, puede usar usuarios únicos de Unix para eso, o systemd también incluye directivas para limitar a qué puede acceder un servicio systemd. Véase por ejemplo Capabilities=
en man systemd.exec
.
Además, para el aislamiento de procesos con Docker, ejecutaría cada una de las bases de datos y el servidor web en diferentes contenedores Docker.
Otra característica importante que systemd
ofrece es la gestión de procesos. Es decir, si su httpd
proceso falla, systemd lo reiniciará por usted.
Mi recomendación es primero ejecutar todos los procesos directamente en un servidor host usando systemd. Muchos paquetes modernos systemd
ya vienen con archivos de configuración.
Una vez que comprenda bien y systemd
tenga claro qué beneficio proporcionará agregar Docker, considere Docker a la mezcla.
En mi trabajo, intentamos usar Docker para administrar un conjunto de servicios, pero luego acostumbramos a administrarlos directamente systemd
y el resultado es un sistema más limpio que el equipo prefiere con menos bash
scripts para unir las cosas y mantenerlas.