一、dockfile 說明
docker 運行一個自定義的image時,就需要自己來定義,這時候就需要dockfile了。
二、docker commit生成新鏡像
2.1.運行容器
# docker run -it centos /bin/bash
2.2.安裝vim
# yum install vim
2.3.將容器打包成新鏡像
# docker commit 07929e3af3ef cent-vim
2.4.查看新鏡像
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE cent-vim latest 4659d1ec001d 7 seconds ago 225MB centos latest 1e1148e4cc2c 8 days ago 202MB nginx latest 568c4670fa80 2 weeks ago 109MB ubuntu latest 93fd78260bd1 3 weeks ago 86.2MB busybox latest 59788edf1f3e 2 months ago 1.15MB
這樣操作,非常不便,切容易出錯,如何有更好方式來定義鏡像呢?這就需要dockfile了
三、dockfile
3.1.編輯dockfile文件
# vim Dockerfile FROM centos RUN yum update && yum install vim -y
3.2.build構建鏡像
# docker build -t centos-vim . #-t 將新鏡像命名爲centos-vim Sending build context to Docker daemon 16.9kB Step 1/2 : FROM centos #鏡像來源 ---> 1e1148e4cc2c Step 2/2 : RUN yum update && yum install vim -y #構建時執行的命令 ---> Running in d7a98cfdffb7 Loaded plugins: fastestmirror, ovl Determining fastest mirrors * base: centos.ustc.edu.cn * extras: mirrors.aliyun.com * updates: mirrors.cn99.com No packages marked for update Loaded plugins: fastestmirror, ovl Loading mirror speeds from cached hostfile * base: centos.ustc.edu.cn * extras: mirrors.aliyun.com * updates: mirrors.cn99.com Resolving Dependencies --> Running transaction check ---> Package vim-enhanced.x86_64 2:7.4.160-5.el7 will be installed .... Removing intermediate container d7a98cfdffb7 ---> 82fd472e3387 Successfully built 82fd472e3387 #構建成功,鏡像ID爲82fd472e3387 Successfully tagged centos-vim:latest #爲鏡像添加一個TAG
查看鏡像:
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos-vim latest 82fd472e3387 2 minutes ago 327MB cent-vim latest 4659d1ec001d About an hour ago 225MB centos latest 1e1148e4cc2c 8 days ago 202MB nginx latest 568c4670fa80 2 weeks ago 109MB ubuntu latest 93fd78260bd1 3 weeks ago 86.2MB busybox latest 59788edf1f3e 2 months ago 1.15MB
3.3.構建鏡像時拷貝文件
3.3.1.文件內容:
# cat ckl.txt The narcissus bloom every year.
3.3.2.dockfile 內容
# vim Dockerfile FROM centos RUN yum update && yum install vim -y COPY ckl.txt /
3.3.3.構建鏡像
# docker build -t cent-ckl-vim .
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE cent-ckl-vim latest fc090867ce91 42 seconds ago 327MB centos-vim latest 82fd472e3387 16 minutes ago 327MB cent-vim latest 4659d1ec001d About an hour ago 225MB centos latest 1e1148e4cc2c 8 days ago 202MB nginx latest 568c4670fa80 2 weeks ago 109MB ubuntu latest 93fd78260bd1 3 weeks ago 86.2MB busybox latest 59788edf1f3e 2 months ago 1.15MB
3.3.4.運行容器查看內容
# docker run -it cent-ckl-vim [root@050821c80ca8 /]# [root@050821c80ca8 /]# [root@050821c80ca8 /]# ls anaconda-post.log bin ckl.txt dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var [root@050821c80ca8 /]# [root@050821c80ca8 /]# [root@050821c80ca8 /]# cat ckl.txt The narcissus bloom every year. #拷貝的文件 [root@050821c80ca8 /]# [root@050821c80ca8 /]# [root@050821c80ca8 /]# vim 1.txt #vim 已經按照
3.3.5.拷貝容器的另一種方式
# vim Dockerfile FROM centos RUN yum update && yum install vim -y ADD nginx-1.12.2.tar.gz /
構建鏡像:
# docker build -t centos-ckl-ng . Sending build context to Docker daemon 1MB Step 1/3 : FROM centos ---> 1e1148e4cc2c Step 2/3 : RUN yum update && yum install vim -y ---> Using cache #之前已經構建過了以上步驟,所以這裏使用了緩存 ---> 82fd472e3387 Step 3/3 : ADD nginx-1.12.2.tar.gz / ---> 248da05fb49e Successfully built 248da05fb49e Successfully tagged centos-ckl-ng:latest
查看鏡像:
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos-ckl-ng latest 248da05fb49e 23 seconds ago 333MB centos-vim latest 82fd472e3387 24 minutes ago 327MB cent-vim latest 4659d1ec001d About an hour ago 225MB centos latest 1e1148e4cc2c 8 days ago 202MB nginx latest 568c4670fa80 2 weeks ago 109MB ubuntu latest 93fd78260bd1 3 weeks ago 86.2MB busybox latest 59788edf1f3e 2 months ago 1.15MB
運行鏡像容器:
# docker run -it centos-ckl-ng [root@a7bdc5e9ecf4 /]# [root@a7bdc5e9ecf4 /]# [root@a7bdc5e9ecf4 /]# ls anaconda-post.log bin dev etc home lib lib64 media mnt nginx-1.12.2 opt proc root run sbin srv sys tmp usr var
#tar 包已經被解壓,COPY則不會
3.3.6.構建鏡像啓動後運行命令CMD
編輯文件:
# vim Dockerfile RUN yum install -y httpd RUN yum install -y httpd FROM centos RUN yum update && yum install vim -y ADD nginx-1.12.2.tar.gz / RUN yum install -y httpd && yum -y install initscripts pm-utils CMD ["service","httpd","start"]
構建鏡像:
# docker build -t cent-ckl-http .
查看鏡像:
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE cent-ckl-http latest d848cf5482e6 4 seconds ago 443MB centos-ckl-ng latest 248da05fb49e 22 minutes ago 333MB centos-vim latest 82fd472e3387 About an hour ago 327MB cent-vim latest 4659d1ec001d 2 hours ago 225MB centos latest 1e1148e4cc2c 8 days ago 202MB nginx latest 568c4670fa80 2 weeks ago 109MB ubuntu latest 93fd78260bd1 3 weeks ago 86.2MB busybox latest 59788edf1f3e 2 months ago 1.15MB
運行鏡像的容器:
# docker run -it cent-ckl-http Redirecting to /bin/systemctl start httpd.service #已經執行了CMD的命令 Failed to get D-Bus connection: Operation not permitted
這個的原因是因爲dbus-daemon沒能啓動。其實systemctl並不是不可以使用。將你的CMD或者entrypoint設置爲/usr/sbin/init即可。會自動將dbus等服務啓動起來。
然後就可以使用systemctl了。
# docker run -it --privileged cent-ckl-http init [FAILED] Failed to start LSB: Bring up/down networking. See 'systemctl status network.service' for details.
沒有搞定!!!
3.3.7.構建鏡像設置環境變量及目錄
修改dockfile文件
# vim Dockerfile FROM centos RUN yum update && yum install vim -y && mkdir /tmp/soft ADD nginx-1.12.2.tar.gz /tmp/soft WORKDIR /tmp/soft/nginx-1.12.2 ENV NAME=ckl RUN yum install -y httpd && yum -y install initscripts pm-utils CMD ["service","httpd","start"] CMD ["echo","$NAME"]
構建鏡像文件:
# docker build -t cent-ckl-http .
啓動鏡像容器:
# docker run -it cent-ckl-http /bin/bash [root@355cc5d1501e nginx-1.12.2]# #當前目錄 [root@355cc5d1501e nginx-1.12.2]# [root@355cc5d1501e nginx-1.12.2]# echo $NAME #變量 ckl
三、dockfile 參數說明
Dockerfile 一般分爲四部分:基礎鏡像信息、維護者信息、鏡像操作指令和容器啓動時執行指令 FROM:指定基礎鏡像,必須爲第一個命令 MAINTAINER: 維護者信息 RUN:構建鏡像時執行的命令 ADD:將本地文件添加到容器中,tar類型文件會自動解壓,可以訪問網絡資源,類似wget COPY:功能類似ADD,但是是不會自動解壓文件,也不能訪問網絡資源 CMD:構建容器後調用,也就是在容器啓動時才進行調用。 ENTRYPOINT:配置容器,使其可執行化。配合CMD可省去"application",只使用參數。 LABEL:用於爲鏡像添加元數據 ENV:設置環境變量 EXPOSE:指定於外界交互的端口 VOLUME:用於指定持久化目錄 WORKDIR:工作目錄,類似於cd命令 USER:指定運行容器時的用戶名或 UID,後續的 RUN 也會使用指定用戶。使用USER指定用戶時,可以使用用戶名、UID或GID,或是兩者的組合。當服務不需要管理員權限時,可以通過該命令指定運行用戶。並且可以在之前創建所需要的用戶 ARG:用於指定傳遞給構建運行時的變量 ONBUILD:用於設置鏡像觸發器 來源參考:https://www.cnblogs.com/panwenbin-logs/p/8007348.html
四、配置nginx安裝示例
4.1.編輯dockfile文件
vim Dockerfile FROM centos MAINTAINER ckl RUN yum update && yum -y install vim zlib zlib-devel openssl openssl-devel gcc-c++ pcre pcre-devel initscripts pm-utils RUN mkdir /tmp/soft RUN adduser ckl ADD nginx-1.12.2.tar.gz /tmp/soft WORKDIR /tmp/soft/nginx-1.12.2 RUN ./configure --prefix=/usr/local/nginx --user=ckl --group=ckl --with-http_ssl_module && make && make install ENV PATH /usr/local/nginx/sbin:$PATH EXPOSE 80 CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
4.2.構建鏡像
docker build -t nginx-centos .
4.3.啓動鏡像容器:
docker run -p 80 --name 'ckl-ng' -d nginx-centos
4.4.已經啓動了nginx
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4f68eeb38e28 nginx-centos "/usr/local/nginx/sb…" 7 minutes ago Up 7 minutes 0.0.0.0:32768->80/tcp ckl-ng
4.5.訪問:
# curl http://172.17.0.3 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>