Docker使用過(guò)程中的一些注意事項(xiàng)
前言
Docker并不是一個(gè)新的技術(shù),容器化也不是,早在2006年就陸續(xù)出現(xiàn)了LXC, OpenVZ,Jail等容器虛擬化技術(shù),但是為什么Docker卻能異軍突起呢?Docker的核心是基于 Linux的CGroup、Namespace和LayeredFS技術(shù),通過(guò)資源的控制、隔離和對(duì)鏡像的分層處理,是Docker容器能夠?qū)?yīng)用程序和運(yùn)行環(huán)境打包到一起,這樣就可以Build, Ship And Run anywhere。與其說(shuō)是Docker火,不如說(shuō)是其天生的輕量級(jí)屬性,正好迎合了云計(jì)算大行其道的今天。因此,筆者認(rèn)為Docker改變整個(gè)云計(jì)算和互聯(lián)網(wǎng)的格局是遲早的事,但是Docker在使用中,需要注意哪些事項(xiàng)呢?
一、掛載 volumes
docker run
的時(shí)候,如果需要掛載宿主機(jī)的某個(gè)目錄,可以這樣
docker run -it -v <host-path>:<container-path> <image>
這里要注意以下幾個(gè)地方:
1、 <host-path>
和 <container-path>
都必須是目錄
2、 <container-path>
必須是容器中的絕對(duì)路徑
3、 <host-path>
路徑如果不存在,執(zhí)行完成之后,docker 會(huì)給宿主機(jī)創(chuàng)建該目錄; <host-path>
可以使用相對(duì)路徑,但是相對(duì)的并不是當(dāng)前的工作目錄,而是 /var/lib/docker/volumes/
4、如果只有一個(gè)路徑,比如 docker run -it -v <path> <image>
,這種情況叫做匿名掛載, <image>
表示的是 container 中的位置,宿主機(jī)會(huì)在 /var/lib/docker/volumes/ 下隨機(jī)創(chuàng)建一個(gè)目錄與 container 中的 <path>
對(duì)應(yīng)
5、不管以何種方式 mount
,容器銷(xiāo)毀之后,由 -v
在宿主機(jī)上創(chuàng)建的目錄不會(huì)銷(xiāo)毀
6、在 container 中可以修改掛載目錄下文件的屬性,并且在宿主機(jī)上查看時(shí)一樣會(huì)生效。但是需要注意一點(diǎn),如果在 container 中修改了文件的 owner 為 John,在宿主機(jī)上產(chǎn)看的時(shí)候,該文件的 owner 不一定還是 John。但該文件的 uid 是一樣的,至于顯示的名稱(chēng)不一樣,是因?yàn)?container 和 host 的 /etc/passwd 文件內(nèi)容不同
以上結(jié)果都可以通過(guò) docker inspect <container>
結(jié)果中的 Mounts
查看。
二、dockerfile 中的 ENTRYPOINT 和 CMD
看似一樣,都是實(shí)現(xiàn) container 啟動(dòng)命令,但是需要注意:
1、都有兩種方式,數(shù)組方式,以及 shell 方式
["sh", "-c", "echo hello"] sh -c 'echo hello'
2、ENTRYPOINT 除了指定 container 入口之外,更重要的作用是: 通過(guò)它可以讓一個(gè) container 像一個(gè) executable 一樣。比如
ENTRYPOINT ["/bin/sh"]
之后 build 出來(lái)的鏡像就像一個(gè) sh 程序文件一樣,運(yùn)行該 image,就像運(yùn)行 sh 程序。
3、如果 ENTRYPOINT 指定了,并且采用了數(shù)組方式,即 ["exectable", "para1", "para2"]
,那么 CMD 指定的內(nèi)容會(huì)被視為 ENTRYPOINT 數(shù)組中最后的一個(gè)參數(shù)
4、如果 ENTRYPOINT 使用 shell 方式,那么它會(huì)覆蓋所有的 CMD 以及 docker run
后面指定的 command
5、docker run
后面指定的 command 會(huì)取代 CMD 的內(nèi)容
總結(jié)
以上就是為大家總結(jié)的一些個(gè)人在使用Docker時(shí)曾掉過(guò)的坑,希望分享出來(lái)讓大家在使用Docker的時(shí)候能避免這些問(wèn)題,以上就是這篇文章的全部?jī)?nèi)容,希望對(duì)大家能有所幫助。
相關(guān)文章
使用docker極簡(jiǎn)打包java.jar鏡像并啟動(dòng)的操作步驟
這篇文章主要介紹了用docker極簡(jiǎn)打包java.jar鏡像并啟動(dòng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08Docker容器日志占用空間過(guò)大問(wèn)題及解決
這篇文章主要介紹了Docker容器日志占用空間過(guò)大問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05CentOS7使用docker部署Apollo配置中心的實(shí)現(xiàn)
這篇文章主要介紹了CentOS7使用docker部署Apollo配置中心的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10.NET?6?從0到1使用Docker部署至Linux環(huán)境超詳細(xì)教程
這篇文章主要介紹了.NET?6?從0到1使用Docker部署至Linux環(huán)境,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05在Docker中安裝Elasticsearch7.6.2的教程
這篇文章主要介紹了在Docker中安裝Elasticsearch7.6.2的教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11Docker教程之dockerfile構(gòu)建centos鏡像
這篇文章主要介紹了Docker教程之dockerfile構(gòu)建centos鏡像的相關(guān)資料,需要的朋友可以參考下2022-11-11Docker自定義網(wǎng)絡(luò)詳細(xì)介紹
大家好,本篇文章主要講的是Docker自定義網(wǎng)絡(luò)詳細(xì)介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12