學(xué)習(xí)筆記:Docker (1)理論

docker開發(fā)技術(shù)棧

Go/Swarm/Compose/Machine/mesos/k8s/CI/DI...

Docker是什么?

1.Q:為什么會(huì)有Docker出現(xiàn)?

一款產(chǎn)品從開發(fā)到上線,從操作系統(tǒng),到運(yùn)行環(huán)境,再到應(yīng)用配置。作為開發(fā)+運(yùn)維之間的協(xié)作我們需要關(guān)心很多東西,特別是各種版本的迭代之后,不同版本環(huán)境的兼容,對(duì)運(yùn)維人員都是考驗(yàn)。

Docker對(duì)此給出了一個(gè)標(biāo)準(zhǔn)化的解決方案。

環(huán)境配置如此麻煩,換一臺(tái)機(jī)器,就要重來一次,費(fèi)時(shí)費(fèi)力。很多人想到,能不能從根本上解決問題,軟件可以帶環(huán)境安裝?也就是說,安裝的時(shí)候,把原始環(huán)境一摸一樣的復(fù)制過來。開發(fā)人員利用Docker可以消除協(xié)作編碼時(shí)“在我的機(jī)器上可以正常工作”的問題。

從“僅提交代碼”到“提交代碼和整套環(huán)境”。

2.Docker的理念

Docker是基于Go語言實(shí)現(xiàn)的云開源項(xiàng)目。

Docker的主要目標(biāo)是“Build, Ship and Run Any App, Anywhere”,也就是通過對(duì)應(yīng)用組件的封裝、分發(fā)、部署、運(yùn)行等生命周期的管理,使用戶的App(可以是一個(gè)Web應(yīng)用貨數(shù)據(jù)庫應(yīng)用等等)及其運(yùn)行環(huán)境能夠做到“一次封裝,到處運(yùn)行”。

Linux容器技術(shù)的出現(xiàn)就解決了這樣一個(gè)問題,而Docker就是在它的基礎(chǔ)上發(fā)展過來的。將應(yīng)用運(yùn)行在Docker容器上面,而Docker容器在任何操作系統(tǒng)上都是一致的,這就實(shí)現(xiàn)了跨平臺(tái)、跨服務(wù)器,只需要一次配置好環(huán)境,換到別的機(jī)器上就可以一鍵部署好,大大簡(jiǎn)化了操作。

3.Docker是什么?(A:容器)

解決了運(yùn)行環(huán)境和配置問題的軟件容器,方便做持續(xù)集成并有助于整體發(fā)布的容器虛擬化技術(shù)。

Docker能干什么?

1.虛擬機(jī)

帶環(huán)境(軟件&硬件)安裝的一種解決方案,它可以在一種操作系統(tǒng)里面運(yùn)行另一種操作系統(tǒng)。對(duì)于底層系統(tǒng)來說,虛擬機(jī)就是一個(gè)普通文件,不需要了就刪掉,對(duì)其他部分毫無影響。

2.虛擬機(jī)的缺點(diǎn)

1.資源占用多;2.冗余步驟多;3.啟動(dòng)慢。

3.Linux容器(Linux Containers,縮寫為L(zhǎng)XC)

由于虛擬機(jī)存在一些缺點(diǎn),Linux發(fā)展出的另一種虛擬化技術(shù)。

Linux容器不是模擬一個(gè)完整的操作系統(tǒng),而是對(duì)進(jìn)程(應(yīng)用)進(jìn)行隔離。有了容器,就可以將軟件運(yùn)行所需的所有資源打包到一個(gè)隔離的容器中。容器與虛擬機(jī)不同,不需要捆綁一整套操作系統(tǒng),只需要軟件工作所需的庫資源和設(shè)置。

系統(tǒng)因此而變得高效輕量,并保證部署在任何環(huán)境中的軟件都能始終如一地運(yùn)行。

4.傳統(tǒng)虛擬化方式和Docker的區(qū)別:

1.傳統(tǒng)虛擬機(jī)技術(shù)是虛擬出一套硬件后,在其上運(yùn)行一個(gè)完整操作系統(tǒng),在該系統(tǒng)上再運(yùn)行所需應(yīng)用進(jìn)程。

2.容器內(nèi)的應(yīng)用進(jìn)程直接運(yùn)行于宿主的內(nèi)核,容器內(nèi)沒有自己的內(nèi)核,而且也沒有進(jìn)行硬件虛擬。因此容器要比傳統(tǒng)虛擬機(jī)更為輕便。

3.每個(gè)容器之間互相隔離,每個(gè)容器有自己的文件系統(tǒng),容器之間進(jìn)程不會(huì)互相影響,能區(qū)分計(jì)算資源(耦合低)。虛擬機(jī)為minute級(jí)別,Docker為second級(jí)別。

5.開發(fā)/運(yùn)維(DevOps)

Development Operations,即開發(fā)自己運(yùn)維。一次構(gòu)建,隨處運(yùn)行。

6.企業(yè)級(jí)

新浪、美團(tuán)、蘑菇街......

PS:Docker的實(shí)質(zhì)可以看作一個(gè)精簡(jiǎn)版的Linux系統(tǒng),僅有其內(nèi)核。(eg:CentOS完整鏡像為4GB,基于容器的虛擬化,其基礎(chǔ)鏡像僅170MB左右。)

  • 輕量、秒級(jí)的快速啟動(dòng)速度。
  • 簡(jiǎn)單、易用、活躍的社區(qū)。
  • 標(biāo)準(zhǔn)統(tǒng)一的打包/部署/運(yùn)行方案。
  • 鏡像支持增量分發(fā)、易于部署。
  • 易于構(gòu)建,良好的REST API,也很適合自動(dòng)化測(cè)試和持續(xù)集成。
  • 性能,尤其是內(nèi)存和IO的開銷。

7.下載&文檔

英文官網(wǎng):https://www.docker.com/
中文官網(wǎng):https://www.docker-cn.com/
Docker倉庫(Docker Hub,即Docker的鏡像倉庫,類比Github、Maven倉庫):https://hub.docker.com/

Docker的基本組成

1.Docker的架構(gòu)圖

Client: docker build/docker pull/docker run(類比Git Client)
Docker Host:Containers/Images(鏡像)/Docker daemon
Registry(鏡像倉庫)

D0780E37DCBFD886DF096B62E9984B9A.jpg

2.Docker三要素

1. 鏡像image

就是一個(gè)只讀的模版。鏡像可以用來創(chuàng)建Docker容器,一個(gè)鏡像可以創(chuàng)建很多容器。

2.容器container

Docker是利用容器獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用。容器是用鏡像創(chuàng)建的運(yùn)行實(shí)例。(類比java,容器即對(duì)象,鏡像即類。)

它可以被啟動(dòng)、開始、停止、刪除。每個(gè)容器都是相互隔離的、保證安全的平臺(tái)。可以把容器看作是一個(gè)簡(jiǎn)易版的Linux環(huán)境(包括root用戶權(quán)限、進(jìn)程空間、用戶空間和網(wǎng)絡(luò)空間等)和運(yùn)行在其中的應(yīng)用程序。

容器的定義和鏡像幾乎一摸一樣,也是一堆層的統(tǒng)一視角,唯一的區(qū)別在于容器的最上層是可讀可寫的。

3.倉庫repository

集中存放鏡像文件的場(chǎng)所。

倉庫(Repository)和倉庫注冊(cè)服務(wù)器(Registry)是有區(qū)別的。Registry上往往存放著多個(gè)Repository,每個(gè)Repository中又包含了多個(gè)鏡像,每個(gè)鏡像有不同的標(biāo)簽(Tag,類似版本號(hào))。

倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。最大的公開倉庫是Docker Hub,存放了數(shù)量龐大的鏡像供用戶下載,國內(nèi)的公開倉庫包括阿里云、網(wǎng)易云等。

3.小結(jié)

需要正確的理解倉庫/鏡像/容器這幾個(gè)概念。

  • Docker本身是一個(gè)容器運(yùn)行載體或稱之為管理引擎。我們把應(yīng)用程序和配置依賴打包好形成一個(gè)可交付的運(yùn)行環(huán)境,這個(gè)打包好的運(yùn)行環(huán)境就似乎image鏡像文件。只有通過這個(gè)鏡像文件才能生成Docker容器。image文件可以看作是容器的模板。Docker根據(jù)image文件生成容器的實(shí)例。同一個(gè)image文件,可以生成多個(gè)同時(shí)運(yùn)行的容器實(shí)例。

  • image文件生成的容器實(shí)例,本身也是一個(gè)文件,稱為鏡像文件。

  • 一個(gè)容器運(yùn)行一種服務(wù),當(dāng)我們需要的時(shí)候,就可以通過Docker客戶端創(chuàng)建一個(gè)對(duì)應(yīng)的運(yùn)行實(shí)例,也就是我們的容器。

  • 倉儲(chǔ),就是放了一堆鏡像的地方,我們可以把鏡像發(fā)布到倉儲(chǔ)中,需要的時(shí)候從倉儲(chǔ)中拉下來就可以了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容