一、docker容器的製作方式
第一種為從容器構建映象,即容器映象,通過docker commit 的方式進行構建,該方法本菜鳥並不推薦,原因有如下幾點:1)映象為分層結構,容器則為映象頂層加了一個可寫層,這一方式構建的映象極容易映象過大。2)容器映象無法確定這一層可寫層內的內容,對於安全性上,存在問題,而且也不易維護。
第二種映象構建的方法則為dockerfile,通過dockerfile來控制映象的構建。這個也是官方推薦的方案,同時本人也推崇此方案。
二、dockerfile介紹dockerfile為一個純文字檔案,通過指令來控制構建,常用指令如下:
1.FROM 此指令後面跟隨的為基礎映象。例如:FROM centos:7 引用基礎映象centos:7
2.MAINTAINER 此指令用於維護構建者資訊。例如:MAINTAINER XuPangzi [email protected]
3.LABEL 用於新增標籤。例如:LABEL BASE FOR SPRING-CLOUD
4.COPY 用於拷貝檔案,不解壓。例如:COPY tomcat.tar /opt/
5.ADD 使用者拷貝檔案,可解壓。例如:ADD tomcat.tar /opt/
6.RUN 用於執行shell命令。例如:RUN mkdir -p /app/{log,data,conf,lib}
7.WORKDIR 用於設定工作目錄,即進入容器後的預設目錄。例如:WORKDIR /app
8.USER 為執行shell命令的使用者。例如:USER app
USER app:app
USER 500
USER 500:500
USER app:500
USER 500:app
9.EXPOSE 宣告埠。例如:EXPOSE 8881
10.ENV 環境變數。例如:ENV MYSQL_PORT 8306
11.ENTRYPOINT 容器啟動時執行的命令,不會被docker run 覆蓋。例如:ENTRYPOINT [“/bin/bash”,”-C”,”/opt/apache-tomcat/start.sh”] exec 風格 ENTRYPOINT /bin/bash -C /opt/apache-tomcat/start.sh shell風格
12.CMD 容器啟動時執行的shell命令
三、如何構建docker映象談完dockerfile,該談一下構建映象了。通常都是採用 docker build -t example:v1 . 在dockerfile所在目錄執行即可,同時ADD和COPY的檔案也需要在dockerfile同級,不過為了匹配流水線作業,通常會採用另外一種方式進行構建:
1.使用者自備dockerfile 同時dockerfile以應用來命名,例如APP1_dockerfile,在構建映象時,執行命令 docker build –no-cache=true -t app_A:v1 -f APP1_dockerfile .
2.將dockerfile植入到構建指令碼中,通過構建是引入的引數來生成dockerfile 同時構建映象,此方式下仍建議採用命令docker build –no-cache=true -t app_A:v1 -f APP1_dockerfile .
實踐:
1.映象最好是自己構建,從dockerhub或其他平臺pull的私人映象,無法保證是否裡面埋有不安全外掛,為了保障安全,推薦自己構建映象
2.選擇恰當的基礎映象,核心應用,選擇較大且穩定的映象,比如centos,ubuntu,但該映象的缺點是容易使生成的業務映象較大,比如centos7+java8+tomcat+應用,輕鬆過G,若是前端等,則可以使用小巧的基礎映象,比如alpine,busybox,debian等,但該映象也有不足,映象追求輕量級,很多基礎工具都沒有,需要使用者自行安裝。
3.構建映象時要保證層數儘可能的少,此處有一技巧,RUN 後面可跟隨多條shell命令,以&連結,同時執行完後一定要記得刪除無用檔案,以保障映象最小化。
所以基於以上幾點,可根據公司需求,構建幾版基礎映象,比如1、alpine+nginx+lua+curl+telnet等網路除錯工具的前端基礎映象。2、alpine+java+tomcat+curl+telnet等除錯工具的java基礎映象。3、基於centos和Ubuntu的核心服務映象。等等等等,將基礎映象構建好後,就可以根據基礎映象設計持續整合流水線來自動化構建業務映象了。
四、基礎映象1、busybox
此映象集成了上百個linux常用命令,且映象極小,大約2M,通過docker pull busybox:latest 即可,這個通常用來進行測試,比如寫個yaml啥的
2、alpine
此映象為一個輕量級安全向映象,大小僅5M,關注安全,效能,資源效能,通過docker pull alpine可拉取映象。鑑於我很多映象都基於此映象,這裡多叨叨幾句。此映象採用apk安裝應用,可在dockerfile
中新增源
中科大源:echo “http://mirrors.ustc.edu.cn/alpine/" > /etc/apk/repositories
阿里源:echo “http://mirrors.aliyun.com/alpine/" > /etc/apk/repositories
清華源:echo “https://mirror.tuna.tsinghua.edu.cn/alpine/" > /etc/apk/repositories
apk –update add –no-cache
3、ubuntu/centos
這兩個屬於重量級的映象,就放在一起說吧,比較穩定,不過就是容易搞的映象超大,輕鬆過G,恐怖如斯,如果有需要jdk和tomcat來執行的java應用,請做好思想準備
五、參考資料1.你必須知道的Dockerfile /file/2020/07/12/20200712005204_1848.jpg.html https://www.cnblogs.com/edisonchou/
2. Dockerfile命令詳解 /file/2020/07/12/20200712005204_1849.jpg.html 中的 COPY 與 ADD 命令 /file/2020/07/12/20200712005204_1850.jpg.html http://www.cnblogs.com/sparkdev/
4.容器技術之Dockerfile (一) /file/2020/07/12/20200712005205_1851.jpg.html https://www.cnblogs.com/qiuhom-1874/