Docker系列之烹飪披薩(二)
- 2019 年 10 月 3 日
- 筆記
前言
上一篇我們講解了虛擬機和容器的區別,本節我們來講講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平台上基本概念,以及各個基本概念之間的關係,它們是如何關聯起來的,希望通過本文的講解,對於閱讀本文的童鞋能對概念有更深入的理解,應該不會通過我的講解,越講越懵逼吧,哈哈。有了對基本概念的理解,後續陸續引入例子就一目了然啦,感謝閱讀,我們下節再會。