Autor: Tercio

  • Executando vários serviços num único container

    Doca, Recipiente, Exportar, Carga, Frete, Envio, Porto

    Docker foi projetado para isolar a execução de serviços, favorecendo assim a extensão, manutenção, etc. das aplicações.

    Contudo é possível executar mais de um serviço num único container usando Supervisor. Supervisor é um sistema cliente/servidor que permite controlar processos em sistemas *nix.

    O exemplo abaixo cria um container com dois serviços distintos (apenas com código semelhante) executando sob o controle de um supervisor.

    Você pode baixar o código em https://github.com/t3rcio/docker-supervisor

    Dockerfile

    #Dockerfile
    FROM python:3.9
    
    ENV PYTHONUNBUFFERED=1
    
    RUN apt-get update && apt-get install -y supervisor
    RUN mkdir -p /var/log/supervisor
    
    WORKDIR /code
    COPY . /code
    COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
    RUN mkdir logs
    
    RUN supervisord -c /etc/supervisor/conf.d/supervisord.conf &

    docker-compose.yml

    version: "3.9"
    
    services:
       supervisor:
          build: .
          restart: always
          command: /usr/bin/supervisord
          volumes:
             - .:/code

    Coloque esses arquivos num diretório e execute:

    user@user-pc:~$ docker-compose -f docker-compose.yml -up

    Para verificar a execução dos serviços, execute (também no diretório em que vc executou o container):

    user@user-pc:~$ tail -f out1.log
    (...)
    user@user-pc:~$ tail -f out2.log

    Pronto :-) Com essa técnica simples você pode executar vários serviços em um único container; por exemplo, você pode ter um agendador e um consumidor das tarefas agendadas.

    Referências