Esta pode ser uma pergunta um pouco confusa ...
Recentemente, comecei a brincar com o docker e estou tentando configurar um servidor de lâmpada básico.
Eu tenho uma imagem docker de centos com httpd, php e mysql.
No entanto, em um contêiner docker, não consigo iniciar serviços da maneira que normalmente faria via systemd/service.
Posso fazer o httpd rodar diretamente via/usr/sbin/httpd
Então, qual é a diferença na execução de httpd via /usr/sbin/httpd
em vez de via systemctl start httpd
?
Existe uma maneira 'correta' de parar ou reiniciar o httpd? - Achei que poderia simplesmente encerrar o processo, mas parece que ele lançou cerca de 10 processos do Apache.
Compreendo que esta não seja uma questão particularmente bem focada, mas qualquer indicação de material relevante seria recebida com gratidão.
Responder1
Você não pode usar systemctl
se o seu PID 1 não for systemd. Você pode encontrar seu PID 1 com ps -q 1
.
Ser capaz de iniciar e parar serviços normalmente é uma vantagem mencionada neste artigo sobreExecutando o systemd em um contêiner sem privilégios. Outros estão registrando ou rastreando processos filhos, conforme descrito na resposta de Andrei.
Responder2
Um serviço systemd iniciará o processo de maneira semelhante à execução direta, mas manterá o controle de todos os processos e threads bifurcados. Isso significa que quando você systemctl stop apache
desligar todos os processos filhos. Também é bom usar processos do systemd porque eles serão executados em segundo plano e podem ser iniciados na inicialização do sistema.
Responder3
Considerando sua localização na curva de aprendizado, eu não usaria o Docker para sua tarefa.
Se você estiver usando o Docker para isolamento de processos, poderá usar usuários Unix exclusivos para isso, ou o systemd também inclui diretivas para limitar o que um serviço systemd pode acessar. Veja por exemplo Capabilities=
em man systemd.exec
.
Além disso, para isolamento de processos com Docker, você executaria cada banco de dados e servidor web em diferentes contêineres Docker.
Outro recurso importante que systemd
oferece é o gerenciamento de processos. Isto é - se o seu httpd
processo travar, o systemd irá reiniciá-lo para você.
Minha recomendação é primeiro executar todos os seus processos diretamente em um servidor host usando o systemd. Muitos pacotes modernos systemd
já vêm com arquivos de configuração.
Depois de ter um bom entendimento de systemd
quais benefícios a adição do Docker proporcionará, considere o Docker na mistura.
No meu trabalho, tentamos usar o Docker para gerenciar um conjunto de serviços, mas depois acostumamos a gerenciar diretamente systemd
e o resultado é um sistema mais limpo que a equipe prefere, com menos bash
scripts para unir as coisas e mantê-las.