??歡迎來到本文??
??個人簡介:陳童學(xué)哦,目前學(xué)習(xí)C/C++、算法、Python、Java等方向,一個正在慢慢前行的普通人。
??系列專欄:陳童學(xué)的日記
??其他專欄:C++STL,感興趣的小伙伴可以看看。
??希望各位→點贊?? + 收藏?? + 留言?? ?
??萬物從心起,心動則萬物動???♂?
前言:Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個
輕量級、可移植
的容器中,然后發(fā)布到任何流行的Linux系統(tǒng)
機器上,也可以實現(xiàn)虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
1.Docker比虛擬機快的原因
眾所周知,Docker比虛擬機快,那么為什么呢?憑啥Docker比虛擬機快呢?因為它更帥嗎?任何主流的東西都是有它的優(yōu)勢的。
Docker比虛擬機快的主要原因有以下幾點:
-
1.
資源利用率高
:Docker容器共享宿主機的操作系統(tǒng)內(nèi)核,不需要像虛擬機一樣每個實例都運行完整的操作系統(tǒng)。這使得Docker容器在啟動和停止時更加輕量級和快速。 -
2.
快速啟動時間
:Docker容器的啟動時間通常只需要幾秒鐘,而虛擬機需要幾分鐘甚至更長時間。這是因為Docker容器不需要啟動完整的操作系統(tǒng),只需加載應(yīng)用程序所需的文件和依賴項。 -
3.
資源隔離
:虛擬機在運行時需要為每個實例分配一定的CPU、內(nèi)存和磁盤資源,而Docker容器可以共享宿主機的資源。這種資源隔離方式使得Docker容器在性能方面更加高效。 -
4.
輕量級
:Docker容器的鏡像大小相對較小,只包含應(yīng)用程序和其依賴項,而虛擬機鏡像包含完整的操作系統(tǒng)。這使得Docker容器在傳輸和存儲時更加高效。
2.Dockers中關(guān)于ubuntu容器的簡單說明
??Docker是一種容器化平臺,它允許用戶將應(yīng)用程序及其依賴打包為一個獨立的容器,提供了一種輕量級、可移植、可復(fù)制的方式來部署和運行應(yīng)用程序。Ubuntu容器
是指在Docker中基于Ubuntu操作系統(tǒng)鏡像創(chuàng)建的容器。它是一個虛擬化的環(huán)境
,可以運行Ubuntu操作系統(tǒng)及其相關(guān)的應(yīng)用程序。
在Docker中創(chuàng)建一個Ubuntu容器可以通過以下步驟完成:
- 1.首先,確保你已經(jīng)安裝好Docker。如果沒有安裝,請按照Docker官方文檔的指引進行安裝。
- 2.打開終端或命令提示符,運行以下命令來拉取Ubuntu鏡像:
docker pull ubuntu
- 3.等待鏡像下載完成后,可以運行以下命令來創(chuàng)建并啟動一個Ubuntu容器:
docker run -it --name my_ubuntu_container ubuntu
這個命令會創(chuàng)建一個新的Ubuntu容器,并將終端連接到容器的交互式會話中。my_ubuntu_container
是你給容器起的一個名稱。
3.Docker中鏡像的分層概念
??在Docker中,鏡像是構(gòu)建和運行容器的基礎(chǔ)
。鏡像是由一系列只讀層
(layers)組成的。每個層都包含了文件系統(tǒng)中的一部分,這些層會根據(jù)需要進行合并和重用,以創(chuàng)建最終的鏡像。
鏡像分層的概念有以下幾個關(guān)鍵點:
-
1
.分層結(jié)構(gòu)
:Docker鏡像是由多個只讀層組成的,每個層都可以看作是文件系統(tǒng)中的一個快照。每個層都包含了增量的文件和目錄變化,以及相應(yīng)的元數(shù)據(jù)信息。這種分層結(jié)構(gòu)使得鏡像的構(gòu)建和分發(fā)更加高效。 -
2
.基礎(chǔ)鏡像
:鏡像分層的最底層是一個基礎(chǔ)鏡像,它通常包含了操作系統(tǒng)的核心組件和基本工具?;A(chǔ)鏡像可以是官方提供的如Ubuntu、CentOS等,也可以是自定義的。 -
3.
可寫層
:在基礎(chǔ)鏡像之上,可以有任意數(shù)量的可寫層??蓪憣釉试S在容器中進行修改和更新操作。當容器啟動時,可寫層會與只讀層一起形成容器的文件系統(tǒng)視圖。 -
4.
共享和復(fù)用
:由于鏡像分層的機制,多個鏡像可以共享相同的只讀層,從而節(jié)省存儲空間。當多個鏡像使用相同的基礎(chǔ)鏡像時,它們可以共享相同的只讀層,只需要額外存儲各自的可寫層。 -
5.
構(gòu)建和發(fā)布
:在構(gòu)建鏡像時,Docker會根據(jù)Dockerfile中的指令逐層構(gòu)建鏡像。每個指令都會創(chuàng)建一個新的只讀層,并根據(jù)需要將其與之前的層進行合并。在發(fā)布鏡像時,只需傳輸增量的層數(shù)據(jù),而不需要傳輸整個鏡像,這也使得鏡像的分發(fā)更加高效。
3.1Docker中的UnionFS聯(lián)合文件系統(tǒng)
??Docker中的聯(lián)合文件系統(tǒng)是一種分層、輕量級并且高性能
的文件系統(tǒng)技術(shù),它支持對文件系統(tǒng)的修改作為一次提交來一層層的疊加
,允許在容器中使用多個文件系統(tǒng)鏡像,并將它們合并成一個單一的可讀寫的文件系統(tǒng)。這種技術(shù)稱為聯(lián)合文件系統(tǒng),因為它通過在不同的文件系統(tǒng)鏡像之間建立聯(lián)合來實現(xiàn)。
??在Docker中,每個鏡像都有一個基礎(chǔ)鏡像,所有的更改和添加都是在該基礎(chǔ)鏡像上進行的。當創(chuàng)建一個容器時,Docker會在基礎(chǔ)鏡像之上創(chuàng)建一個可寫層。這個可寫層允許在容器中對文件進行更改和添加,而不會影響到基礎(chǔ)鏡像。
??當容器啟動時,Docker會將所有的鏡像層以及可寫層聯(lián)合掛載到一個單一的文件系統(tǒng)中。這樣,容器就可以訪問并操作這個聯(lián)合文件系統(tǒng)中的所有文件。當對文件進行修改或添加時,Docker會在可寫層中創(chuàng)建新的文件或修改已有的文件,而不會改變基礎(chǔ)鏡像中的文件。
??聯(lián)合文件系統(tǒng)的好處是它可以節(jié)省存儲空間。因為每個容器都共享基礎(chǔ)鏡像的只讀部分。
3.2Docker中的鏡像加載原理
??在Docker中,鏡像是用于運行容器的文件系統(tǒng)。鏡像加載是指將鏡像從Docker倉庫或本地緩存加載到本地系統(tǒng),以供后續(xù)創(chuàng)建和運行容器。
鏡像加載的過程大致可以分為以下幾個步驟:
-
1
.鏡像下載
:如果鏡像不在本地緩存中,Docker會從指定的倉庫中下載鏡像文件。默認情況下,Docker會從Docker Hub下載公共鏡像,也可以通過配置使用其他倉庫。 -
2
.鏡像分層
:鏡像文件實際上由多個分層組成,每個分層都包含文件系統(tǒng)的一部分。Docker加載鏡像時,會按照分層的順序逐個加載,并將它們合并成一個單一的文件系統(tǒng)。 -
3.
分層緩存
:Docker會根據(jù)鏡像的分層信息進行緩存,以提高后續(xù)加載相同鏡像時的速度。如果多個鏡像共享相同的分層,只需要下載一次,并在本地緩存中進行復(fù)用。 -
4.
容器創(chuàng)建
:一旦鏡像加載完成,就可以使用該鏡像創(chuàng)建容器。容器是鏡像的一個實例化對象,它包含一個獨立的文件系統(tǒng)和運行時環(huán)境。
4.Docker的私有庫簡介
??私有庫是Docker中用于存儲和管理鏡像的倉庫
,它可以用于存儲自己創(chuàng)建的鏡像,以及從公共倉庫拉取下來的鏡像。在本地搭建私有庫可以提供更高的安全性和更好的性能。搭建私有庫可以使用Docker官方提供的Registry鏡像,也可以使用第三方工具,如Harbor、Nexus等。
下面以Docker官方的Registry為例進行講解。
- 1.下載Registry鏡像:
docker pull registry
- 2.運行Registry容器:
docker run -d -p 5000:5000 --restart=always --name registry registry
這里將容器的5000端口映射到宿主機的5000端口,方便訪問私有庫。
- 3.配置Docker客戶端:
編輯Docker配置文件/etc/docker/daemon.json
,添加以下內(nèi)容:
{
"insecure-registries": ["your-registry-domain:5000"]
}
這里將your-registry-domain
替換為私有庫的域名或IP地址。
- 4.推送鏡像到私有庫:
首先,為鏡像添加標簽,使其與私有庫的地址關(guān)聯(lián):
docker tag your-image your-registry-domain:5000/your-image
然后,推送鏡像到私有庫:
docker push your-registry-domain:5000/your-image
這里將your-image
和your-registry-domain
替換為實際的鏡像名稱和私有庫地址。
- 5.從私有庫拉取鏡像:
docker pull your-registry-domain:5000/your-image
這里將your-image
和your-registry-domain
替換為實際的鏡像名稱和私有庫地址。
以上就是在Docker中搭建私有庫的詳細步驟啦。通過私有庫,你可以方便地管理和分享自己的鏡像,同時也可以控制訪問權(quán)限。
如果本文對大家有所幫助的話,還望各位能給我點贊、收藏并評論一下,感謝各位???。?! 另如果大家有什么疑問或者建議的話,歡迎評論區(qū)留言。文章來源:http://www.zghlxwxcb.cn/news/detail-621885.html
拜拜ヾ(?ω?`)o文章來源地址http://www.zghlxwxcb.cn/news/detail-621885.html
到了這里,關(guān)于【Docker】Docker比虛擬機快的原因、ubuntu容器、鏡像的分層概念和私有庫的詳細講解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!