一、docker容器的制作方式 第一種為從容器構(gòu)建鏡像,,即容器鏡像,,通過(guò)docker commit 的方式進(jìn)行構(gòu)建,該方法本菜鳥(niǎo)并不推薦,,原因有如下幾點(diǎn):1)鏡像為分層結(jié)構(gòu),,容器則為鏡像頂層加了一個(gè)可寫(xiě)層,這一方式構(gòu)建的鏡像極容易鏡像過(guò)大,。2)容器鏡像無(wú)法確定這一層可寫(xiě)層內(nèi)的內(nèi)容,,對(duì)于安全性上,存在問(wèn)題,,而且也不易維護(hù),。 第二種鏡像構(gòu)建的方法則為dockerfile,通過(guò)dockerfile來(lái)控制鏡像的構(gòu)建,。這個(gè)也是官方推薦的方案,,同時(shí)本人也推崇此方案。 二,、dockerfile介紹 dockerfile為一個(gè)純文本文件,,通過(guò)指令來(lái)控制構(gòu)建,常用指令如下: 1.FROM 此指令后面跟隨的為基礎(chǔ)鏡像,。例如:FROM centos:7 引用基礎(chǔ)鏡像centos:7 2.MAINTAINER 此指令用于維護(hù)構(gòu)建者信息,。例如:MAINTAINER XuPangzi Pangzi@example 3.LABEL 用于添加標(biāo)簽,。例如:LABEL BASE FOR SPRING-CLOUD 4.COPY 用于拷貝文件,不解壓,。例如:COPY tomcat.tar /opt/ 5.ADD 用戶(hù)拷貝文件,,可解壓。例如:ADD tomcat.tar /opt/ 6 用于執(zhí)行shell命令,。例如:RUN mkdir -p /app/{log,data,conf,lib} 7DIR 用于設(shè)置工作目錄,,即進(jìn)入容器后的默認(rèn)目錄。例如:WORKDIR /app 8.USER 為運(yùn)行shell命令的用戶(hù),。例如:USER app USER app:app USER 500 USER 500:500 USER app:500 USER 500:app 9.EXPOSE 聲明端口,。例如:EXPOSE 8881 10.ENV 環(huán)境變量。例如:ENV MYSQL_PORT 8306 11.ENTRYPOINT 容器啟動(dòng)時(shí)執(zhí)行的命令,,不會(huì)被docker run 覆蓋,。例如:ENTRYPOINT [“/bin/bash”,”-C”,” /opt/apache-tomcat/start.sh”] exec 風(fēng)格 ENTRYPOINT /bin/bash -C /opt/apache-tomcat/start.sh shell風(fēng)格 12.CMD 容器啟動(dòng)時(shí)執(zhí)行的shell命令
三、如何構(gòu)建docker鏡像 談完dockerfile,,該談一下構(gòu)建鏡像了,。通常都是采用 docker build -t example:v1 . 在dockerfile所在目錄執(zhí)行即可,同時(shí)ADD和COPY的文件也需要在dockerfile同級(jí),,不過(guò)為了匹配流水線(xiàn)作業(yè),,通常會(huì)采用另外一種方式進(jìn)行構(gòu)建: 1.用戶(hù)自備dockerfile 同時(shí)dockerfile以應(yīng)用來(lái)命名,例如APP1_dockerfile,,在構(gòu)建鏡像時(shí),,執(zhí)行命令 docker build –no-cache=true -t app_A:v1 -f APP1_dockerfile . 2.將dockerfile植入到構(gòu)建腳本中,通過(guò)構(gòu)建是引入的減肥參數(shù)來(lái)生成dockerfile 同時(shí)構(gòu)建鏡像,,此方式下仍建議采用命令docker build –no-cache=true -t app_A:v1 -f APP1_dockerfile . 實(shí)踐: 1.鏡像最好是自己構(gòu)建,,從dockerhub或其他平臺(tái)pull的私人鏡像,無(wú)法保證是否里面埋有不安全插件,,為了保障安全,,推薦自己構(gòu)建鏡像 2.選擇恰當(dāng)?shù)幕A(chǔ)鏡像,核心應(yīng)用,,選擇較大且穩(wěn)定的鏡像,,比如centos,ubuntu,,但該鏡像的缺點(diǎn)是容易使生成的業(yè)務(wù)鏡像較大,,比如centos7+java8+tomcat+應(yīng)用,輕松過(guò)G,,若是前端等,則可以使用小巧的基礎(chǔ)鏡像,,比如alpine,,busybox,,debian等,但該鏡像也有不足,,鏡像追求輕量級(jí),,很多基礎(chǔ)工具都沒(méi)有,需要用戶(hù)自行安裝,。 3.構(gòu)建鏡像時(shí)要保證層數(shù)盡可能的少,,此處有一技巧,RUN 后面可跟隨多條shell命令,,以&鏈接,,同時(shí)執(zhí)行完后一定要記得刪除無(wú)用文件,以保障鏡像最小化,。 所以基于以上幾點(diǎn),,可根據(jù)公司需求,構(gòu)建幾版基礎(chǔ)鏡像,,比如1,、alpine+nginx+lua+curl+telnet等網(wǎng)絡(luò)調(diào)試工具的前端基礎(chǔ)鏡像。2,、alpine+java+tomcat+curl+telnet等調(diào)試工具的java基礎(chǔ)鏡像,。3、基于centos和Ubuntu的核心服務(wù)鏡像,。等等等等,,將基礎(chǔ)鏡像構(gòu)建好后,就可以根據(jù)基礎(chǔ)鏡像設(shè)計(jì)持續(xù)集成流水線(xiàn)來(lái)自動(dòng)化構(gòu)建業(yè)務(wù)鏡像了,。 四,、基礎(chǔ)鏡像 1、busybox 此鏡像集成了上百個(gè)linux常用命令,,且鏡像極小,,大約2M,通過(guò)docker pull busybox:latest 即可,,這個(gè)通常用來(lái)進(jìn)行測(cè)試,,比如寫(xiě)個(gè)yaml啥的 2、alpine 此鏡像為一個(gè)輕量級(jí)安全向鏡像,,大小僅5M,,關(guān)注安全,性能,,資源效能,,通過(guò)docker pull alpine可拉取鏡像。鑒于我很多鏡像都基于此鏡像,這里多叨叨幾句,。此鏡像采用apk安裝應(yīng)用,,可在dockerfile 中添加源 中科大源:echo “ mirrors.ustc/alpine/" > /etc/apk/repositories 阿里源:echo “ mirrors.aliyun/alpine/" > /etc/apk/repositories 清華源:echo “ mirror.tuna.tsinghua/alpine/" > /etc/apk/repositories apk –update add –no-cache 即可安裝,不過(guò)記得在安裝后刪除緩存,,使鏡像保持最小 3,、ubuntu/centos 這兩個(gè)屬于重量級(jí)的鏡像,就放在一起說(shuō)吧,,比較穩(wěn)定,,不過(guò)就是容易搞的鏡像超大,輕松過(guò)G,,恐怖如斯,,如果有需要jdk和tomcat來(lái)運(yùn)行的java應(yīng)用,請(qǐng)做好思想準(zhǔn)備 五,、參考資料 1.你必須知道的Dockerfile cnblogs/edisonchou/p/dockerfile_inside_introduction.html cnblogs/edisonchou/ 2. Dockerfile命令詳解 cnblogs/yanh0606/p/11360936.html 3.Dockerfile 中的 COPY 與 ADD 命令 cnblogs/sparkdev/p/9573248.html cnblogs/sparkdev/ 4.容器技術(shù)之Dockerfile (一) cnblogs/qiuhom-1874/p/13019411.html cnblogs/qiuhom-1874/
|
|
來(lái)自: 新用戶(hù)26922hFh > 《待分類(lèi)》