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

4

Esta pode ser uma questão confusa ...

Recentemente, comecei a brincar com o docker e estou tentando configurar um servidor básico de lâmpadas.

Eu tenho uma imagem do docker do centos com httpd, php e mysql.

No entanto, em um contêiner do docker, não consigo iniciar os serviços da maneira que normalmente faria através do systemd / service.

Eu posso fazer o httpd rodar diretamente via /usr/sbin/httpd

Então, qual é a diferença na execução do httpd via /usr/sbin/httpd em vez de via systemctl start httpd ?

Existe uma maneira 'adequada' de parar ou reiniciar o httpd? - Eu pensei que poderia apenas matar o processo, mas parece que ele lança cerca de 10 processos apache.

Eu aprecio que esta não seja uma questão particularmente bem focada, mas qualquer indicação de material relevante seria recebida com gratidão.

    
por jx12345 15.04.2017 / 13:34

3 respostas

3

Você não pode usar systemctl se 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 da maneira normal é uma vantagem mencionada neste artigo sobre Executando o systemd em um contêiner não privilegiado . Outros estão registrando ou rastreando processos filhos, conforme descrito na resposta de Andrei.

    
por 15.04.2017 / 16:12
2

Um serviço systemd iniciará o processo de maneira semelhante a executá-lo diretamente, no entanto, ele acompanhará todos os processos e segmentos bifurcados. Isso significa que quando você systemctl stop apache irá desligar todos os processos filhos. Também é legal usar processos systemd porque eles serão executados em segundo plano e podem ser iniciados na inicialização do sistema.

    
por 15.04.2017 / 15:45
1

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 do processo, poderá usar usuários Unix exclusivos para isso ou o systemd também incluirá diretivas para limitar o acesso de um serviço do systemd. Veja por exemplo Capabilities= in man systemd.exec .

Além disso, para isolamento do processo com o Docker, você executaria cada um dos bancos de dados e do servidor da Web em diferentes contêineres do Docker.

Outro recurso importante que systemd fornece é o gerenciamento de processos. Isso é-- se o seu processo de httpd falhar, o systemd irá reiniciá-lo para você.

Minha recomendação é primeiro obter todos os seus processos em execução diretamente em um servidor host usando o systemd. Muitos pacotes modernos já vêm com arquivos de configuração systemd .

Uma vez que você tenha um bom entendimento de systemd , está claro qual o benefício que o Docker irá oferecer, então considere o Docker no mix.

No meu trabalho, tentamos usar o Docker para gerenciar um conjunto de serviços, mas depois gerenciamos diretamente com systemd e o resultado é um sistema mais limpo que a equipe prefere com menos scripts bash para colar as coisas e manter eles.

    
por 15.04.2017 / 22:24