一? 回顧docker一些命令
①? run create start 的辨析
docker 'run' '等價(jià)' docker 'create' && docker 'start'
容器(動(dòng)態(tài)) = 鏡像(靜態(tài)) '+' 讀寫層
1) create 命令為'指定的鏡像(image)'添加了一個(gè)'可讀寫層',構(gòu)成了一個(gè)'新'的容器
注意:這個(gè)容器并'沒(méi)有'運(yùn)行
2) start命令為'容器文件系統(tǒng)'創(chuàng)建了一個(gè)'進(jìn)程'隔離空間
注意:每一個(gè)容器'只能夠有一個(gè)'進(jìn)程隔離空間
3) run 命令'先是'利用鏡像創(chuàng)建了一個(gè)容器,然后'運(yùn)行'這個(gè)容器
注意:這個(gè)命令'隱藏了'兩個(gè)'create、start'命令的細(xì)節(jié)
②? 獲取容器在宿主機(jī)的PID
docker inspect -f '{{ .State.Pid }}' container_name
備注: 在容器內(nèi)表現(xiàn)為'pid=1'
tail /proc/${Pid}/cmdline;echo --> 查看'進(jìn)程信息'
docker inspect --format詳解?
③? 容器資源使用
1)直接 --> 使用docker stats命令來(lái)'顯示'容器使用的'系統(tǒng)資源'
--no-stream :展示'當(dāng)前狀態(tài)'就直接退出了,不再實(shí)時(shí)更新
--no-trunc :'不截?cái)?輸出,會(huì)'動(dòng)態(tài)'刷新
現(xiàn)象: 默認(rèn)情況下,stats 命令會(huì)'每隔 1 秒鐘'刷新一次輸出的內(nèi)容直到你按下 'ctrl + c'
常用: docker stats --no-trunc container_id --> 可以查看'指定'container
2)間接 --> 核心是獲取'容器'所對(duì)應(yīng)所在宿主機(jī)'PID',就可以使用'top、pmap、ps'等命令
④? 查看容器的完整命令
docker ps --no-trunc --> 顯示容器內(nèi)'服務(wù)啟動(dòng)''完整'的命令
docker ps -q --> '靜默'模式,只顯示'容器編號(hào)'
docker ps -s --> 查看容器所占的'磁盤'大小
docker rm ${docker ps -q -a} --> 刪除全部'非運(yùn)行態(tài)'的容器
?
?
懸浮鏡像dangling image 產(chǎn)生的原因和處理方法
+++++++++++++++ "懸空鏡像的特征" +++++++++++++++
1)* 沒(méi)有被其他鏡像'引用'
2) * 在'docker images'的輸出中,列'TAG'為'<none>'值
3) * 在'docker images'的輸出中,列''REPOSITORY''為可能有值
?
④? save 和 load
docker save -o (--output) *.tar 鏡像名 --> 一般將'鏡像'打成'tar'包
備注: 也可以通過(guò) '>' 重定向保存
docker load -i (--input) images.tar --> 將'tar'加載成鏡像
備注: 也可以通過(guò) '<' 讀取tar文件
⑤⑥⑦⑧⑨⑩?
二? ?Dockerfile指令的回顧
官網(wǎng)Dockerfile參考
①??Dockerfile指令之RUN
?
+++++++++++++++++ "重點(diǎn)" +++++++++++++++++
1)RUN 執(zhí)行的命令不是'宿主機(jī)的',而是'基鏡像'帶的
2)Dockerfile中可以有許'多個(gè)RUN命令',避免鏡像'過(guò)多'分層,一般使用一個(gè)RUN通過(guò)'&&'連接
說(shuō)明: 每執(zhí)行一次'RUN',鏡像就'增加'一層
3)場(chǎng)景: 一般做一些'初始化'或'安裝'軟件的動(dòng)作
4)兩種'執(zhí)行'模式
RUN <command> --> 'shell 模式(常用)'
RUN ["executable", "param1", "param2"] --> 'exec' 模式 -->"json數(shù)組"、"雙引號(hào)"
?
②? Dockerfile指令之CMD
備注: 容器'啟動(dòng)'后執(zhí)行的'默認(rèn)'命令
1)以"exec"模式運(yùn)行一個(gè)'可執(zhí)行'的文件并提供參數(shù)
2)作為'ENTRYPOINT'指定參數(shù)
3)以"shell form",也即以"/bin/sh -c"的方法執(zhí)行命令
?
+++++++++++++ "如何改變?nèi)萜鲉?dòng)命令的默認(rèn)行為" +++++++++++++
1)通過(guò) docker run 傳遞 '命令或參數(shù)'
③? Dockerfile指令之ENTRYPOINT
+++++++++++++++ 'ENTRYPOINT和CMD'的'異同'點(diǎn) +++++++++++++++
1)ENTRYPOINT 指令與 CMD 指令幾乎一樣,都是在容器啟動(dòng)時(shí)自動(dòng)執(zhí)行的指令,且只有'最后'一個(gè)有效
2)而 ENTRYPINT 與 CMD 的'不同', 主要體現(xiàn)在'兩'方面:
[1]、一是'ENTRYPOINT執(zhí)行的命令'不易被覆蓋,但是可以通過(guò)'--entrypoint覆蓋'
[2]、 二是用于'用戶傳參'
(1) docker run 中有[COMMAND],會(huì)'覆蓋'CMD指令,追加作為'ENTRYPOINT 指令'的參數(shù)
場(chǎng)景: 需要'用戶傳參'進(jìn)行初始化
(2) docker run 中'沒(méi)有'[COMAMND],此時(shí) CMD 指令的內(nèi)容便會(huì)成為ENTRYPOINT的'默認(rèn)'參數(shù)
docker run 官方參考
④? 三者辨析
CMD and ENTRYPOINT的辨析
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-460326.html
⑤? k8s的command和args文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-460326.html
重點(diǎn): 理解為'docker run'傳遞的參數(shù)即可,但是有'細(xì)小'的差異
1)當(dāng)用戶'同時(shí)寫了command和args'的時(shí)候可以'覆蓋'Dockerfile的命令行和參數(shù)
說(shuō)明: 同時(shí)覆蓋'CMD和ENTRYPOINT',推薦這種'dynamic'方式
2)如果command和args'均沒(méi)有寫',那么用Dockerfile'默認(rèn)'的配置
3)如果command寫了,但'args沒(méi)有寫',僅執(zhí)行.yml文件'不帶任何參數(shù)的'的command
說(shuō)明: 同時(shí)覆蓋Dockerfile中的'CMD和ENTRYPOINT'
4)如果'command沒(méi)寫',但'args寫了',Docker'默認(rèn)'配置的ENTRYPOINT的命令行會(huì)'被執(zhí)行'
說(shuō)明: 'args'追加為'ENTRYPOINT'的參數(shù)
重點(diǎn): 要了解'Dockerfile'的內(nèi)容,才能用k8s的'comamnd和args'更好的編排
到了這里,關(guān)于Docker之RUN、COMMAND、ENTRYPOINT辨析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!