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