Docker 学习之 容器中运行多个服务

来源:互联网 发布:程序员培训班排名 编辑:程序博客网 时间:2024/06/05 18:53

Docker 容器中运行多个服务

昨天踩了个天坑,我有一个基本的镜像centos6.5+ssh,是通过Dockerfile build的,利用CMD命令启动ssh。

通过centos6.5+ssh镜像,我想build一个rabbitmq镜像,Dockerfile中CMD启动rabbitmq服务。虽然我知道Dockerfile中的CMD只能有一个,但没想到创建另一个image,也会继承FROM image的CMD.

利用Docker的命令inspect可以看到,CMD已经被替换了。

"Cmd": [   /usr/bin/supervisord"],

下面进入正题,如何同时启动多个服务,主要有如下方式

supervisor是Linux下监控进程的工具,通过supervisor启动所有服务。

  • 创建Dockerfile:
# use this image to run multiple service# add service in supervisord.confFROM centos6-sshMAINTAINER edwardsbean@gmail.comRUN yum install -y supervisorRUN mkdir -p /var/run/sshdRUN mkdir -p /var/log/supervisorADD supervisord.conf /etc/supervisord.conf# expose your port to hostEXPOSE 22 80CMD ["/usr/bin/supervisord"]
  • 创建supervisord.conf
    [supervisord]
    nodaemon=true
    [program:sshd]
    command=/usr/sbin/sshd -D

构建镜像image:

docker build -t supervisord .

这样就可以通过supervisord.conf来添加不通的服务

CMD启动脚本

通过将所有要启动的服务封装成一个脚本,利用CMD命令去启动这个脚本。但是不如supervisord好、不推荐。

【注意】使用容器的更高层次的目的是实现分布式架构,实现microservice的模式来设计架构,这种一容器多服务的方式个人不做推荐。