【Docker】【基礎(chǔ)】入門知識
一、docker介紹

docker是一個快速交付、開發(fā)和運行應(yīng)用程序的平臺。
docker提供一個獨立的運行應(yīng)用程序環(huán)境,應(yīng)用程序不依賴其環(huán)境就可以部署運行應(yīng)用程序,可以將業(yè)務(wù)程序和基礎(chǔ)架構(gòu)進(jìn)行隔離,具有隔離性。隔離原理是底層利用linux內(nèi)核命名空間namespaces和cgroups功能來達(dá)到容器工作空間的隔離性。
docker通過快速交付、測試和部署代碼的方法,可以減少編寫代碼和生產(chǎn)環(huán)境運行程序的時延。
docker具有隔離性和安全性,并且docker是輕量級的,因此可以運行多個docker容器,并且還可以設(shè)置共享容器與其他容器進(jìn)行交互(后面有專門的kubernetes解決應(yīng)用容器之間相互發(fā)現(xiàn)和訪問的問題)。
docker提供了工具和平臺來管理容器的生命周期:
使用容器來開發(fā)應(yīng)用程序和組件
使用容器分發(fā)和測試應(yīng)用程序
上面都準(zhǔn)備好了之后,就可以將應(yīng)用程序部署到生產(chǎn)環(huán)境中。
二、docker作用優(yōu)點
1. 快速、一致性的交付應(yīng)用程序
場景:
本地開發(fā)代碼,并使用docker容器與其他同事共享工作
本地開發(fā)完之后,使用docker將應(yīng)用程序打包成鏡像推送到測試環(huán)境中,并執(zhí)行自動和手動測試。
當(dāng)開發(fā)發(fā)現(xiàn)bug的時候,先在開發(fā)環(huán)境中修復(fù),然后使用docker重新部署到測試環(huán)境進(jìn)行測試和驗證。
測試完成之后,使用docker將修改好的鏡像推送到生產(chǎn)環(huán)境。
2. 響應(yīng)式部署和拓展
docker具有可移植性和輕量級特性,可以實時根據(jù)業(yè)務(wù)需求拓展和拆除應(yīng)用程序和服務(wù)
3. 同一臺機(jī)器上運行多個docker容器
docker具有輕量級和快速特性,可以使用很少的資源完成更多的工作
三、docker架構(gòu)
docker使用client-server的架構(gòu)模式,也就是docker客戶端(簡稱docker)與docker守護(hù)進(jìn)程(簡稱dockerd)之間進(jìn)行通信的一個架構(gòu)。
守護(hù)進(jìn)程dockerd完成docker容器的創(chuàng)建、分發(fā)和運行docker容器的繁重工作。
客戶端docker和守護(hù)進(jìn)程dockerd可以在同一系統(tǒng)或同一臺機(jī)器運行,也可以在不同系統(tǒng)或不同機(jī)器上運行(docker遠(yuǎn)程連接到dockerd),它們是怎么進(jìn)行通信的呢?docker與dockerd是通過使用RESTAPI、UnixSocket或網(wǎng)絡(luò)接口進(jìn)行通信的。
基本架構(gòu)圖:
基本流程說明:
當(dāng)docker用戶在docker客戶端運行docker pull命令時,該命令發(fā)送到守護(hù)進(jìn)程dockerd中,dockerd會從Registry倉庫中拉取指定鏡像到本地images中。
當(dāng)docker用戶在docker客戶端運行docker build命令時,該命令發(fā)送到守護(hù)進(jìn)程dockerd中,dockerd將本地images中指定的鏡像編譯好,以供使用。
當(dāng)docker用戶在docker客戶端運行docker run命令時,該命令發(fā)送到守護(hù)進(jìn)程dockerd中,dockerd會在本地images將指定編譯好的鏡像在指定的容器中運行起來。
基本概念解釋:
docker守護(hù)進(jìn)程(dockerd)
守護(hù)進(jìn)程dockerd其實就是docker服務(wù),主要是監(jiān)聽客戶端Docker的API請求,管理docker鏡像、docker容器、networks網(wǎng)絡(luò)、volumes存儲卷等;docker守護(hù)進(jìn)程還可以與其他守護(hù)進(jìn)程進(jìn)行通信一起管理docker服務(wù),組成一個dockerd集群,為客戶端docker提供服務(wù)。
docker客戶端(docker)
客戶端docker是docker用戶與docker的交互主要方式,如當(dāng)docker用戶執(zhí)行docker run命令時,docker將這些命令發(fā)送到dockerd,在dockerd上執(zhí)行該命令。
docker命令使用Docker API,docker客戶端可以與多個守護(hù)進(jìn)程dockerd通信。
docker注冊中心(Registry)
docker注冊中心registry,可以包含多個倉庫(Repository),每個倉庫可以包含多個標(biāo)簽(Tag),每個標(biāo)簽對應(yīng)一個鏡像,簡單來說就是專門存放Docker鏡像的地方,docker有個公共倉庫叫Docker Hub,提供每個人使用,dockerd默認(rèn)配置了Docker Hub為默認(rèn)查找鏡像的倉庫,當(dāng)然也可以配置自己的私人倉庫。
當(dāng)docker用戶在docker客戶端運行docker pull 或 docker run命令時,請求的鏡像將從你配置的registry倉庫拉取。
當(dāng)docker用戶在docker客戶端運行docker push命令時,會將鏡像推送至你配置的registry倉庫中。
docker對象
docker中包含很多對象:鏡像images,容器containers,網(wǎng)絡(luò)networks,存儲卷volumes,插件plugins,還有其他的一些對象等等。
1. docker鏡像(images)
鏡像images只是一個描述怎么創(chuàng)建Docker容器的只讀模板;通常一個鏡像是基于另一個鏡像并進(jìn)行額外的自定義配置;例如,你可以構(gòu)建基于ubuntu的鏡像,并且可以在鏡像中安裝Apache web服務(wù)器和應(yīng)用程序,以及使應(yīng)用程序運行所需的詳細(xì)配置信息等等,每個dockerd都有一個本地images,存放自己制作的鏡像或者從別的倉庫拉取過來的鏡像。
可以創(chuàng)建自己的鏡像,也可以直接使用倉庫里面別人發(fā)布的鏡像。
想要創(chuàng)建自己的鏡像,需要的步驟為:
創(chuàng)建一個dockerfile文件。
使用簡單的語法定義創(chuàng)建、運行鏡像所需的指令步驟。
dockerfile文件中的每條指令都會在images中創(chuàng)建一個layer,當(dāng)改變dockerfile文件并重新編譯鏡像時,只是改變并重建images中的layer,這就是制作鏡像如此輕、小、快速的原因之一。
2. docker容器
容器是鏡像的可運行實例,簡單來說就是計算機(jī)上的另一個進(jìn)程,與宿主機(jī)上的其他進(jìn)程隔離。
可以使用Docker API或CLI創(chuàng)建、啟動、停止、移動或刪除容器,可以將容器連接到一個或多個網(wǎng)絡(luò)并附加存儲卷給它,甚至還可以根據(jù)當(dāng)前容器的狀態(tài)創(chuàng)建一個新鏡像。
默認(rèn)情況下,容器與容器之間以及容器與宿主機(jī)之間是存在比較好的隔離環(huán)境的,你可以控制容器的網(wǎng)絡(luò)、存儲卷與其他容器或宿主機(jī)的隔離程度。
容器的定義是由鏡像決定的,當(dāng)創(chuàng)建或者運行一個容器時,需要在鏡像文件中提供好所有的配置信息;刪除容器的時候,沒有保存容器狀態(tài)的更改都會消失。
例如,運行一個docker容器命令docker run ?-i -t ubuntu /bin/bash .,運行一個ubuntu容器并運行/bin/bash .會執(zhí)行以下步驟:
守護(hù)進(jìn)程檢查本地有沒有ubuntu鏡像,如果沒有,docker會從配置的倉庫中提取它,就像手動運行docker pull ubuntu一樣。
docker會創(chuàng)建一個新容器,就像手動執(zhí)行命令docker container create。
docker分配一個讀寫文件系統(tǒng)給容器,允許正在運行的容器在該文件系統(tǒng)創(chuàng)建和修改文件或目錄。
docker創(chuàng)建一個網(wǎng)絡(luò)接口將容器連接到默認(rèn)網(wǎng)絡(luò),如果沒有指定任何的網(wǎng)絡(luò)配置,docker會為容器自動分配IP地址,并且默認(rèn)可以使用宿主機(jī)的網(wǎng)絡(luò)連接連接到外部網(wǎng)絡(luò)。
上面完成之后,docker啟動容器并執(zhí)行/bin/bash .,并以交互方式運行且連接到本地終端(-i和-t參數(shù)),可以從鍵盤輸入,同時輸出記錄到終端
當(dāng)輸入exit命令時,將終止/bin/bash命令,容器將停止,但不會被刪除,可以再次啟動或刪除它
3.?docker倉庫(Repository)
上面也說了一個docker Registry注冊中心可以包含多個倉庫Repository,一個Repository包含多個標(biāo)簽Tag,一個標(biāo)簽Tag對應(yīng)一個鏡像,同一個Repository下的多個Tag就是指的是同一個軟件不同版本的鏡像,通過<倉庫名>:<標(biāo)簽>的格式來指定具體軟件版本,如果不給出標(biāo)簽,就以latest作為默認(rèn)標(biāo)簽。在docker注冊中心多用戶環(huán)境下倉庫名經(jīng)常以兩段式路徑出現(xiàn):用戶名/軟件名。
問題:鏡像與容器的區(qū)別
鏡像就是運行容器實例的一個模板,鏡像包含運行容器實例的環(huán)境配置信息和應(yīng)用程序。
容器就是鏡像的一個運行實例,可以基于鏡像創(chuàng)建多個實例,每個實例都是獨立運行的。
Docker 容器
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。