我正在编写一个Python Web应用程序,它包含多个服务-一个用于Web应用程序本身,一个用于队列工作程序,以及一个用于队列工作程序顶部的仪表板的服务。这些服务都包含在同一个应用程序中,但需要独立运行。
我想在单独的Docker容器中使用超级用户来运行所有服务。理想情况下,我将为整个应用程序使用1个Dockerfile,并使用多个入口点独立启动各种服务。
这是到目前为止我一直在使用的模式:
Dockerfile:
FROM python:3.7-slim
# copy app, install dependencies...
COPY supervisor/base.conf /etc/supervisor/base.conf
COPY supervisor/service_1.conf /etc/supervisor/conf.d/service_1.conf
COPY supervisor/service_2.conf /etc/supervisor/conf.d/service_2.conf
COPY supervisor/service_3.conf /etc/supervisor/conf.d/service_3.conf
COPY docker/start_service_1.sh /start_service_1.sh
COPY docker/start_service_2.sh /start_service_2.sh
COPY docker/start_service_3.sh /start_service_3.sh
start_service_1.sh:
#!/bin/bash
supervisord -c /etc/supervisor/conf.d/service_1.conf
service_1.conf
[include]
files=/etc/supervisor/base.conf # Shared supervisor config for all services
[program:service_1]
command=run service_1
autostart=true
这对我来说现在很好。我可以构建单个Docker映像,并使用它们的start_service.sh
脚本在单独的容器中启动服务。
但是,我想知道这样的事情是否有更好的模式。感觉很“ hacky”,但我找不到任何与我的体系结构相似的好例子。我的问题/担忧是:
start_service.sh
脚本中的重复代码。