Supervisor是一个进程控制系统,可以用来监控和管理多个进程。在容器环境中使用Supervisor可以方便地管理多个服务(如Nginx和Tomcat),而不需要为每个服务单独创建容器。
首先创建一个Dockerfile,安装Supervisor、Nginx和Tomcat:
FROM ubuntu:20.04
# 安装必要的软件包
RUN apt-get update && \
apt-get install -y supervisor nginx openjdk-8-jdk tomcat8 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 复制Supervisor配置文件
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# 暴露Nginx和Tomcat端口
EXPOSE 80 8080
# 启动Supervisor
CMD ["/usr/bin/supervisord"]
创建supervisord.conf
文件来配置Nginx和Tomcat服务:
[supervisord]
nodaemon=true
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
autostart=true
autorestart=true
startretries=5
stderr_logfile=/var/log/nginx/error.log
stdout_logfile=/var/log/nginx/access.log
[program:tomcat]
command=/usr/share/tomcat8/bin/catalina.sh run
autostart=true
autorestart=true
startretries=5
environment=JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64",CATALINA_HOME="/usr/share/tomcat8"
stderr_logfile=/var/log/tomcat8/catalina.err
stdout_logfile=/var/log/tomcat8/catalina.out
构建Docker镜像并运行容器:
docker build -t nginx-tomcat .
docker run -d -p 80:80 -p 8080:8080 --name webapp nginx-tomcat
如果需要自定义Nginx配置,可以在Dockerfile中添加:
COPY nginx.conf /etc/nginx/nginx.conf
COPY my-site.conf /etc/nginx/conf.d/
要部署自定义WAR应用到Tomcat:
COPY myapp.war /var/lib/tomcat8/webapps/
可以通过环境变量配置Supervisor管理的服务:
ENV TOMCAT_OPTS="-Xmx512m"
然后在supervisord.conf中使用这些变量:
[program:tomcat]
command=/usr/share/tomcat8/bin/catalina.sh run %(ENV_TOMCAT_OPTS)s
在容器运行时,可以进入容器管理Supervisor:
docker exec -it webapp bash
然后可以使用Supervisor的客户端工具:
supervisorctl status # 查看服务状态
supervisorctl restart nginx # 重启Nginx
supervisorctl stop tomcat # 停止Tomcat
supervisorctl start all # 启动所有服务
虽然Supervisor可以方便地管理多个进程,但在容器环境中,更推荐的做法是:
这种"一个容器一个进程"的模式更符合Docker的最佳实践,便于扩展和故障隔离。
希望这个指南能帮助你使用Supervisor管理Nginx和Tomcat容器!