Docker映象製作和管理
Docker映象製作和管理
docker 映象生命週期
通過docker commit手動構建映象
基於容器手動製作映象步驟具體如下:
1.下載一個系統的官方基礎映象,如: CentOS 或 Ubuntu
2.基於基礎映象啟動一個容器,並進入到容器
3.在容器裡面做配置操作
安裝基礎命令
配置執行環境
安裝服務和配置服務
放業務程式程式碼
4.提交為一個新映象 docker commit
5.基於自己的的映象建立容器並測試訪問
格式一: [root@ubuntu1804 ~]#docker commit -a "wang<[email protected]>" -c 'CMD /bin/httpd -f -h /data/html' -c "EXPOSE 80" b1 httpd-busybox:v1.0 格式二: [root@ubuntu1804 ~]#docker commit -a "wang<[email protected]>" -c 'CMD ["/bin/httpd", "-f", "-h", "/data/html"]' -c "EXPOSE 80" b1 httpd-busybox:v1.0
利用Dockerfile檔案執行docker build自行構建映象
DockerFile是一種被Docker程式解釋執行的指令碼,由一條條命令組成,每條命令對應linux下面的一條命令,DOcker程式將這些Dockerfile指令再翻譯成真正的linux命令,其有自己的書寫方式和支援的命令,Docker程式讀取Dockerfile並根據指令生成Docker映象。相比手動製作映象方式,Dockerfile更能直觀的展示映象是怎麼產生的,有了Dockerfile,當後期有額外的需求時,只要在之前的Dockerfile新增或修改響應的命令即可重新生成新的Docker映象,避免了重複手動製作映象的麻煩,類似與shell指令碼一樣,可以方便高效的製作映象
Docker守護程式Dockerfile逐一執行指令,如有必要,將每個指令的結果提交到新映象,然後最終輸出新映象ID。Docker守護程式將自動清理髮送的上下文
注:每條指令 都是獨立執行的,並會導致建立新映象。比如RUN , cd /tmp 對下一條指令不會有任何影響
Docker將盡可能重用中間映像(快取),以顯著加速docker build命令的執行過程,這由Using cache控制檯輸出中的訊息指示
Dockerfile映象製作和使用流程
Dockerfile檔案的製作映象的分層結構
Dockerfile檔案說明:
-
每一行以Dockerfile的指令開頭,指令不區分大小寫,但是慣例使用大寫
-
使用#開始作為註釋
-
每一行只支援一條指令,每條指令可以攜帶多個引數
-
指令按檔案的順序從上至下進行執行
-
每個指令的執行會生成一個新的映象層,為了減少分層和映象大小,儘可能將多條指令合併成一條指令
-
製作映象一般可能需要反覆多次,每次執行dockerfile都按順序執行,從頭開始,已經執行過的指令已經快取,不需要再執行,如果後續有一行新的指令沒執行過,其往後的指令將會重新執行過,所以為加速映象製作,將最常變化的內容放下dockerfile的檔案後面
Dockerfile常見相關指令: ADD COPY ENV EXPOSE FROM LABEL STOPSIGNAL USER VOLUME WORKDIR
Dockerfile構建(docker build)過程
-
從基礎映象執行一個容器
-
執行一條指令,對容器做出修改
-
執行類似docker commit的操作,提交一個新的中間映象層(可以利用中間層映象建立容器進行除錯和排錯)
-
再基於剛提交的映象執行一個新容器
-
執行Dockerfile中的下一條指令,直至所有指令執行完畢
檢視映象的構建歷史: docker history 映象ID
Docker直接製作Nginx映象的Dockerfile檔案:
[root@ubuntu1804 ~]#mkdir /data/dockerfile/web/nginx/1.18.0 [root@ubuntu1804 ~]#cd /data/dockerfile/web/nginx/1.18.0 [root@ubuntu1804 1.18.0]#vim nginx.conf user nginx; worker_processes 1; #daemon off; [root@ubuntu1804 1.18.0]#wget http://nginx.org/download/nginx-1.18.0.tar.gz [root@ubuntu1804 1.18.0]#pwd /data/dockerfile/web/nginx/1.18.0 [root@ubuntu1804 1.18.0]# ls Dockerfile nginx.conf index.html [root@ubuntu1804 1.18.0]#cat Dockerfile #Nginx Dockerfile FROM centos:centos7.7.1908 MAINTAINER wei <[email protected]> RUN yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel \ && useradd -r -s /sbin/nologin nginx \ && yum clean all ADD nginx-1.18.0.tar.gz /usr/local/src/ RUN cd /usr/local/src/nginx-1.18.0 \ && ./configure --prefix=/apps/nginx \ && make \ && make install \ && rm -rf /usr/local/src/nginx* ADD nginx.conf /apps/nginx/conf/nginx.conf COPY index.html /apps/nginx/html/ RUN ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx EXPOSE 80 443 CMD ["/apps/nginx/sbin/nginx"]