Executando vários serviços num único container
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.