Doker之Dockerfile編寫
阿新 • • 發佈:2018-12-21
使用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