1. 程式人生 > >Doker之Dockerfile編寫

Doker之Dockerfile編寫

使用Dockerfile可以允許使用者建立自定義的映象
Dockerfile一般由一條條語句組成,並支援以 # 開頭的註釋行
一般來說Dockerfile分為四部分
  • 基礎映象資訊
  • 維護者資訊
  • 映象操作指令
  • 容器啟動時執行指令

一、建立支援apache服務的docker映象

1、編寫支援apache的Dockerfile
[[email protected] ~]# mkdir /tmp/docker
[[email protected] ~]# cd /tmp/docker/
[[email protected] 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"] [[email protected] docker]# vim dvd.repo [dvd] name=rhel7.3 baseurl=http://172.25.51.250/rhel7.3 gpgcheck=0
2、刪除上層映象,保留rhel7最底層映象
[[email protected] docker]# docker images rhel7   ##顯示當前系統 docker rhel7 庫中的所有映象
[[email protected] docker]# docker rmi rhel7:v3   ##刪除上層映象,留下最底層
[[email protected] docker]# docker rmi rhel7:v2
[[email protected] docker]# docker rmi rhel7:v1
[[email protected]
docker]# docker rmi rhel7:super [[email protected] docker]# docker rmi rhel7:ssh [[email protected] docker]# docker rmi rhel7:apache
  • 顯示當前系統 docker rhel7 庫中的所有映象 在這裡插入圖片描述
  • 刪除上層映象後,留下的最底層映象 在這裡插入圖片描述
3、構建映象
[[email protected] docker]# docker build -t rhel7:apache .
  • 檢視構建的apache映象 在這裡插入圖片描述 在這裡插入圖片描述
4、測試apache
[[email protected] docker]# vim index.html   ##編寫測試頁
www.Hannah_zh.org  
[[email protected] ~]# docker run -d --name vm1 rhel7:apache       ##建立並執行vm1容器
[[email protected] docker]# docker container cp index.html vm1:/var/www/html
  • 測試apache服務 在這裡插入圖片描述

二、建立支援ssh服務的docker映象

1、編寫支援ssh的Dockerfile
[[email protected] 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、構建映象
[[email protected] docker]# docker build -t rhel7:ssh .

在這裡插入圖片描述

3、測試sshd服務
[[email protected] docker]# docker run -d --name vm2 -p 2222:22 rhel7:ssh  ##埠對映
[[email protected] 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檔案
[[email protected] docker]# vim supervisord.conf
[supervisord]
nodaemon=true

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

[program:ssh]
command=/usr/sbin/sshd -D
2、編寫dvd.repo檔案
[[email protected] 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測試頁
[[email protected] docker]# vim index.html   ##編寫測試頁
www.Hannah_zh.org  
4、編寫支援supervisord的Dockerfile(同時執行apache、sshd服務)
[[email protected] 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、構建映象
[[email protected] docker]# docker build -t rhel7:supervisord .
6、測試
  • 建立容器vm3並埠對映
[[email protected] docker]# docker run -d --name vm3 -p 8080:80 -v /tmp/docker/:/var/www/html rhel7:supervisord
  • 檢視容器vm3的ip地址
[[email protected] ns]# docker inspect vm3 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.4",
                    "IPAddress": "172.17.0.4",
  • 測試sshd服務
[[email protected] docker]# ssh [email protected]
  • 測試apache服務
[[email protected] docker]# curl http://172.25.51.250:8080/
www.Hannah_zh.org