1. 程式人生 > >Docker系列之烹飪披薩(二)

Docker系列之烹飪披薩(二)

前言

上一篇我們講解了虛擬機器和容器的區別,本節我們來講講Docker中關於Dockerfile、映象、容器等基本概念。Docker是一個在容器內開發、部署、執行應用程式的平臺,Docker本質上是容器化的代名詞,容器對於提高軟體開發和資料科學的安全性,可重複性和可擴充套件性起到了重要作用,擁抱Docker已是趨勢,讓我們進入Docker課堂。

烹飪材料

接下來我們通過學習如何烹飪披薩,一探究竟Docker平臺各個基本概念,一說到吃,大家應該馬上就提起興趣了。

Docker Container(容器)

啥是容器啊,搞的這麼高深,這麼玄乎的概念,於是乎 ,我終於找到容器是什麼了,如下:

 

哈哈,這就是容器,還是在某寶上截圖來的,不過此容器非彼容器,如上圖是一個真實存在的物理收納箱容器,看到如上真實存在的容器,我們能想到這樣一個容器有什麼特點呢?

1.承載東西-這當然是最基本的啦,既然是收納箱,就是用來裝東西的,有些東西可以放在收納箱內,也可以放在收納箱外(這就好比在容器內可以裝載應用程式及其依賴)

2.方便攜帶-有了收納箱我們可以隨處搬運,就像小孩的玩具一樣,可以從家拿到學校,攜帶方便。(這就好比容器輕巧,可以在任何地方執行)

3.介面訪問-收納箱上方有一個蓋蓋,我們將其開啟,可以放入或取出物品(這就好比容器與外界有連線的機制,比如通過命令列進行資料互動)

4.遠端獲取-製造商通過對應模具模板可以製造出成千上萬個收納箱,然後將收納箱放到某寶或某東上,最終我們在某寶或某東上購買這個收納箱(這就好比模具是映象,通過映象製作容器)

物理形式存在的收納箱容器從被製造出來的那一刻就被賦予了生命,既然被賦予了生命當然也就存在對應的生命週期,我們可將收納箱的生命週期歸納為四個階段:孵化、閒置、使用、廢棄。萬事萬物一旦存在,無論是物理形式還是虛擬形式都有其生命週期,容器也不例外,只不過容器由人為操縱控制其生命週期直至其關閉。

 

通過以上引入生活例項物理收納箱容器的隱喻來對比虛擬化容器,得出虛擬化容器的特點,想必到此應該對容器有了一點點通透的瞭解。

 

Docker Image(映象) 

上述關於關於物理存在的收納箱容器是以某種例項而存在,雖說容器是虛擬的,但是到底是如何虛擬出來的呢?它是以何種生命形式而存在的呢?答案則是:映象孕育了容器,也就是說映象構造出了容器。那麼映象又是什麼呢?從語義層面理解,我們可能認為就是影象,而影象可能是根據手機或者攝像機將拍攝範圍的全部內容對映到物理影象上,但是事實情況真的如此嗎?

顯然不是,映象其實就是一個模具或模板,對於收納箱的模板如下,我們根據模板而刻畫出如上漂亮且精緻的收納箱容器。

如上所述,我們根據映象刻畫出了容器,映象是不可變的主模板,用來抽取出完全相同的容器,而映象包含應用程式所需要執行的Dockerfile、程式碼、庫等,如此這些被完全捆綁在一起。

Dockerfile(映象說明書)

講完了映象,我們又有疑惑了,映象又是怎麼來的呢?通過Dockerfile來建立,Dockerfile是一個檔案,這個檔案中包含了如何構建映象的說明,Dockerfile只是用來構建初始映象層的基本映象,我們可將其看做是映象的說明書。根據Dockerfile中的使用說明,我們可以將附加層堆疊在基礎映象層的頂部。最後根據Dockerfile程式碼,在其他層的頂部堆疊薄的可寫層,每一層是如此的薄,堆疊可寫的過程就好似洋蔥的成長過程,多麼形象而生動,如果你願意一層一層,一層的剝開我的心,你會發現 你會訝異....哈哈。

Container Registry (映象倉儲)

如果我們希望其他人能夠利用我們的映象來建立容器,我們可以將映象傳送到容器登錄檔中,Docker Hub是最大的預設登錄檔位置。

烹飪披薩

關於披薩所需要的材料我們都已配齊,接下來我們試試來自制披薩,好不好吃不要緊,重要的是享受制作的過程。

第一步:我們需要知道製作披薩的配方,這個配方好比Dockerfile,裡面包含如何製作出披薩的說明。

第二步:披薩有幾層,比如包含麵包層、乳酪層、醬汁層等等,因為配方說明我們知道要做什麼,這是不可更改的計劃,這就好比我們從底層首先構建出基本的映象如ubuntu,然後新增乳酪層等,這一層相當於我們安裝外部庫,比如python,最後再刷上一層泰國甜辣醬,簡直是人間美味,這就相當於我們已編寫好的應用程式程式碼,最終就有了披薩的原型,也就形成了Docker Image(映象),

第三步:我們做好了披薩,這個時候我們需要將其放入烤箱中,烤箱就好比Docker平臺,當我們將買回來的烤箱放在家裡,這個時候就好比將Docker安裝在計算機上一樣,當我們扭動烤箱按鈕的那一刻,我們就開始烹飪披薩,這就像我們開始建立並啟動容器啦。

第四步:等待一小會,當披薩熟了,熟透了的披薩就好比Docker容器。

第五步:最終大功告成,我們開始吃披薩,吃披薩就好比我們在容器中使用應用程式一樣。

烹飪總結

本節我們通過烹飪披薩講述了Docker平臺上基本概念,以及各個基本概念之間的關係,它們是如何關聯起來的,希望通過本文的講解,對於閱讀本文的童鞋能對概念有更深入的理解,應該不會通過我的講解,越講越懵逼吧,哈哈。有了對基本概念的理解,後續陸續引入例子就一目瞭然啦,感謝閱讀,我們下節再會。&n