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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiezhongtian/article/details/76855140

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.conf

FROM centos6-ssh
MAINTAINER edwardsbean@gmail.com
RUN yum install -y supervisor
RUN mkdir -p /var/run/sshd
RUN mkdir -p /var/log/supervisor
ADD supervisord.conf /etc/supervisord.conf
# expose your port to host
EXPOSE 22 80
CMD ["/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的模式来设计架构,这种一容器多服务的方式个人不做推荐。

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试