首頁>技術>

一、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/

  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • uniapp開發注意事項(建議)