您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)Docker基本概念和底層原理的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
Docker架構(gòu)圖:
我們依照Docker架構(gòu)圖進行Docker基礎(chǔ)概念的說明。
Docker是一個Client-Server
結(jié)構(gòu)的系統(tǒng),Docker守護進程運行在主機上,然后通過Socket
連接從客戶端訪問,守護進程從客戶端接受命令并管理運行在主機上的容器。容器是一個運行時環(huán)境,就好比是我們前面說到的集裝箱。
例如架構(gòu)圖中的客戶端(Client
)和服務(wù)端(DOCKER_HOST
):
發(fā)送命令docker run hello-world
Docker客戶端轉(zhuǎn)發(fā)命令給宿主機上的Docker守護進程(Docker daemon
),
Docker守護進程接收執(zhí)行命令,返回命令執(zhí)行結(jié)果,
Docker服務(wù)端(守護進程)負責(zé)管理宿主機上的各個容器。
如下圖所示:
Docker客戶端和守護進程通過Socket
連接,可以遠程或本地連接。
Socket
說明:
網(wǎng)絡(luò)上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,這個連接的一端稱為一個Socket
。建立網(wǎng)絡(luò)通信連接至少要一對端口號(Socket
)。Socket
是應(yīng)用層與TCP/IP
協(xié)議族通信的中間軟件抽象層,它是用來組織數(shù)據(jù)的一組接口。
鏡像(image
):Docker鏡像類似于虛擬機的鏡像,就好比是一個模板,一個面向Docker引擎的只讀模板,包含了文件系統(tǒng),可以通過這個模板來創(chuàng)建容器服務(wù)。
例如:一個鏡像可以完全包含了Ubuntu
操作系統(tǒng)環(huán)境,可以把它稱作一個Ubuntu
鏡像。鏡像也可以安裝了Apache
應(yīng)用程序(或其他軟件),可以把它稱為一個Apache
鏡像。通過這個鏡像可以創(chuàng)建多個容器(最終服務(wù)的運行或者項目的運行就是在容器中)。
鏡像是創(chuàng)建Docker容器的基礎(chǔ),通過版本管理和增量的文件系統(tǒng),Docker提供了一套十分簡單的機制來創(chuàng)建和更新現(xiàn)有的鏡像。用戶可以從網(wǎng)上下載一個已經(jīng)做好的應(yīng)用鏡像,并通過命令直接使用??傊?,應(yīng)用運行是需要環(huán)境的,而鏡像就是來提供這種環(huán)境。
(不同的類可以創(chuàng)建不同的對象,同一個類也可以創(chuàng)建多個相同類型的對象)
(不同的鏡像可以創(chuàng)建不同的容器,同一個鏡像也可以創(chuàng)建多個相同類型的容器)
容器(Container
):Docker利用容器技術(shù),獨立運行一個或者一組應(yīng)用,通過鏡像來創(chuàng)建的。
Docker容器類似于一個輕量級的沙箱子(因為Docker是基于Linux內(nèi)核的虛擬技術(shù),所以消耗資源十分少),Docker利用容器來運行和隔離應(yīng)用。
容器是從鏡像創(chuàng)建運行實例,可以將其啟動、開始、停止、刪除,而這些容器都是相互隔離、互不可見的。
鏡像自身是只讀的,容器從鏡像啟動的時候,Docker會在鏡像的最上層創(chuàng)建一個可寫層,鏡像本身將保持不變。
(目前就可以把這容器解為就是一個簡易的Linuх系統(tǒng))
倉庫(Repository
):倉庫就是存放鏡像的地方。
Docker倉庫類似與代碼倉庫,就是Docker集中存放鏡像文件的場所。
根據(jù)存儲的鏡像公開與否,Docker倉庫分為公開倉庫(Public
)和私有倉庫(Private
)兩種形式。
目前最大的公開倉庫是Docker Hub
(Docker官方鏡像倉庫),存放了數(shù)量龐大的鏡像供用戶下載。國內(nèi)的公開倉庫包括阿里云,網(wǎng)易云等鏡像倉庫,可以提供穩(wěn)定的國內(nèi)訪問(鏡像加速)。
Docker也支持用戶在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個只能自己訪問的私有倉庫。
當用戶創(chuàng)建了自己的鏡像之后,就可以使用push
命令,將它上傳到指定的公有或則私有倉庫。這樣用戶下次在另一臺機器上使用該鏡像時,只需將該鏡像從倉庫pull
(拉取)下來就可以了。
鏡像和容器的關(guān)系:
我們以之前運行hello-world
鏡像為例進行說明。
執(zhí)行docker run hello-world
命令,運行結(jié)果如下:
$ sudo docker run hello-world # 出現(xiàn)下面顯示,證明運行鏡像成功 Unable to find image 'hello-world:latest' locally #(本地沒有找到hello-world鏡像) latest: Pulling(拉?。?nbsp;from library/hello-world #(去遠程拉取library/hello-world鏡像) 1b930d010525: Pull complete #(拉取完成) Digest: sha256:d1668a9a1f5b42ed3f46b70b9cb7c88fd8bdc8a2d73509bb0041cf436018fbf5 Status: Downloaded newer image for hello-world:latest #(上面三行是拉取鏡像的簽名信息) # 總結(jié):由于本地沒有hello-world這個鏡像,所以會從遠程倉庫下載一個hello-world的鏡像到本地,并創(chuàng)建容器運行。 Hello from Docker!#(鏡像運行起來了) This message shows that your installation appears to be working correctly. #(此消息表明您的安裝似乎可以正常工作。為了生成此消息,Docker采取了以下步驟:) To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
提示:輸出這段提示以后,hello-world
鏡像就會停止運行,容器自動終止。
run
命令的執(zhí)行的流程圖:
(1)Docker有著比虛擬機更少的抽象層。
由于Docker不需要Hypervisor實現(xiàn)硬件資源虛擬化(就相當于使用VMware創(chuàng)建一個虛擬機的操作),運行在Docker容器上的程序,直接使用的都是實際物理機的硬件資源。因此在CPU、內(nèi)存利用率上,Docker將會在效率上有明顯優(yōu)勢。
(2)Docker利用的是宿主機的內(nèi)核,而不需要Guest OS。
因此當新建一個容器時,Docker不需要和虛擬機一樣重新加載一個操作系統(tǒng)內(nèi)核。從而避免引尋、加載操作系統(tǒng)內(nèi)核等,這些比較費時費資源的操作過程。
當新建一個虛擬機時,虛擬機軟件需要加載Guest OS,這個新建過程是分鐘級別的。而Docker由于直接利用宿主機的操作系統(tǒng),則省略了這個過程,因此新建一個Docker容器只需要幾秒鐘。
如下圖所示:
Docker與VM對比表:
關(guān)于“Docker基本概念和底層原理的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。