Dockerfile编写

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hannah_zh/article/details/84069939
使用Dockerfile可以允许用户创建自定义的镜像
Dockerfile一般由一条条语句组成,并支持以 # 开头的注释行
一般来说Dockerfile分为四部分
  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令

一、创建支持apache服务的docker镜像

1、编写支持apache的Dockerfile
[root@foundation51 ~]# mkdir /tmp/docker
[root@foundation51 ~]# cd /tmp/docker/
[root@foundation51 docker]# vim Dockerfile 
FROM rhel7
MAINTAINER [email protected]
ENV HOSTNAME server1
EXPOSE 80
COPY dvd.repo /etc/yum.repos.d/dvd.repo
RUN rpmdb --rebuilddb && yum install -y httpd && yum clean all
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
[root@foundation51 docker]# vim dvd.repo
[dvd]
name=rhel7.3
baseurl=http://172.25.51.250/rhel7.3
gpgcheck=0
2、删除上层镜像,保留rhel7最底层镜像
[root@foundation51 docker]# docker images rhel7   ##显示当前系统 docker rhel7 库中的所有镜像
[root@foundation51 docker]# docker rmi rhel7:v3   ##删除上层镜像,留下最底层
[root@foundation51 docker]# docker rmi rhel7:v2
[root@foundation51 docker]# docker rmi rhel7:v1
[root@foundation51 docker]# docker rmi rhel7:super
[root@foundation51 docker]# docker rmi rhel7:ssh
[root@foundation51 docker]# docker rmi rhel7:apache
  • 显示当前系统 docker rhel7 库中的所有镜像
    在这里插入图片描述
  • 删除上层镜像后,留下的最底层镜像
    在这里插入图片描述
3、构建镜像
[root@foundation51 docker]# docker build -t rhel7:apache .
  • 查看构建的apache镜像
    在这里插入图片描述
    在这里插入图片描述
4、测试apache
[root@foundation51 docker]# vim index.html   ##编写测试页
www.Hannah_zh.org  
[root@foundation51 ~]# docker run -d --name vm1 rhel7:apache       ##创建并运行vm1容器
[root@foundation51 docker]# docker container cp index.html vm1:/var/www/html
  • 测试apache服务
    在这里插入图片描述

二、创建支持ssh服务的docker镜像

1、编写支持ssh的Dockerfile
[root@foundation51 docker]# vim Dockerfile 
FROM rhel7
MAINTAINER [email protected]
ENV HOSTNAME server2
EXPOSE 22
COPY dvd.repo /etc/yum.repos.d/dvd.repo
RUN rpmdb --rebuilddb && yum install -y openssh-server openssh-clients && yum clean all
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -q -N "" && ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -q -N "" && ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -q -N "" && echo root:redhat | chpasswd
CMD ["/usr/sbin/sshd", "-D"]
2、构建镜像
[root@foundation51 docker]# docker build -t rhel7:ssh .

在这里插入图片描述

3、测试sshd服务
[root@foundation51 docker]# docker run -d --name vm2 -p 2222:22 rhel7:ssh  ##端口映射
[root@foundation51 docker]# ssh -p 2222 [email protected]   ##测试sshd服务
  • 查看创建并运行的vm2容器
    在这里插入图片描述
  • iptables -t nat -nL 查看外部访问容器的NAT规则

在这里插入图片描述

  • 测试sshd服务
    在这里插入图片描述

三、创建支持supervisord服务的docker镜像

CMD 如果只有一个命令,那如果我们需要运行多个服务怎么办呢?
最好的办法是分别在不同的容器中运行,通过 link 进行连接,比如先前实验中用到的web、app、db 容器。如果一定要在一个容器中运行多个服务可以考虑用 Supervisord 来进行进程管理,方式就是将多个启动命令放入到一个启动脚本中。

1、编写supervisord.conf文件
[root@foundation51 docker]# vim supervisord.conf
[supervisord]
nodaemon=true

[program:httpd]
command=/usr/sbin/httpd

[program:ssh]
command=/usr/sbin/sshd -D
2、编写dvd.repo文件
[root@foundation51 docker]# vim dvd.repo 
[dvd]
name=rhel7.3
baseurl=http://172.25.51.250/rhel7.3
gpgcheck=0

[supervisor]
name=supervisor
baseurl=http://172.25.254.250/pub/docker     ##镜像
gpgcheck=0
3、编写apache测试页
[root@foundation51 docker]# vim index.html   ##编写测试页
www.Hannah_zh.org  
4、编写支持supervisord的Dockerfile(同时运行apache、sshd服务)
[root@foundation51 docker]# vim Dockerfile 
FROM rhel7
MAINTAINER [email protected]
ENV HOSTNAME server3
EXPOSE 22 80
COPY dvd.repo /etc/yum.repos.d/dvd.repo
RUN rpmdb --rebuilddb && yum install -y openssh-server openssh-clients httpd supervisor && yum clean all
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -q -N "" && ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -q -N "" && ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -q -N "" && echo root:redhat | chpasswd
COPY supervisord.conf /etc/supervisord.conf
CMD ["/usr/bin/supervisord"]
5、构建镜像
[root@foundation51 docker]# docker build -t rhel7:supervisord .
6、测试
  • 创建容器vm3并端口映射
[root@foundation51 docker]# docker run -d --name vm3 -p 8080:80 -v /tmp/docker/:/var/www/html rhel7:supervisord
  • 查看容器vm3的ip地址
[root@foundation120 ns]# docker inspect vm3 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.4",
                    "IPAddress": "172.17.0.4",
  • 测试sshd服务
[root@foundation120 docker]# ssh [email protected]
  • 测试apache服务
[root@foundation51 docker]# curl http://172.25.51.250:8080/
www.Hannah_zh.org  

猜你喜欢

转载自blog.csdn.net/Hannah_zh/article/details/84069939