Executando um programa como serviço ou diretamente, qual a diferença

Executando um programa como serviço ou diretamente, qual a diferença

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/httpdem 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 systemctlse 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 apachedesligar 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 systemdoferece é o gerenciamento de processos. Isto é - se o seu httpdprocesso 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 systemdjá vêm com arquivos de configuração.

Depois de ter um bom entendimento de systemdquais 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 systemde o resultado é um sistema mais limpo que a equipe prefere, com menos bashscripts para unir as coisas e mantê-las.

informação relacionada