Docker service 批量部署Ubuntu基础镜像

在之前的实验中发现,直接从官方的Docker镜像仓库拉取的Ubuntu等基础镜像直接用于Docker service会导致部署的容器在运行中报错并反复重启,为了解决这一问题,我们可以通过撰写Dockerfile自行定制镜像,同时,为了解决Dockerfile的CMD在启动时只能运行一个服务的问题,我通过supervisor管理Dockerfile多任务的启动,从而实现在启动容器的时候同时启动apache2与openssh-server,以下是该Dockerfile内容:

FROM ubuntu:16.04
RUN apt-get update && apt-get install -y openssh-server wget supervisor
RUN mkdir /var/run/sshd
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
RUN echo 'root:Password' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed '[email protected]\s*required\s*[email protected] optional [email protected]' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
RUN apt install -y apache2 net-tools vim nano
RUN rm -f /var/www/html/index.html
EXPOSE 22
EXPOSE 80/tcp
EXPOSE 80/udp
CMD ["/usr/bin/supervisord"]

接下来我们还要在文件夹中加入supervisord.conf配置文件:

[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D
[program:apache2]
command=/bin/bash -c "/etc/init.d/apache2 start"

由此,我们便可制作一个可在docker service使用,同时还可以启动多个服务的镜像
PS.目前还只试做过基于Ubuntu的,基于CentOS的在后期会进行尝试。

发表评论

电子邮件地址不会被公开。 必填项已用*标注