[譯] Docker 的學習和應用

Docker 的學習和應用

第一部分:基本概念

容器(Container)對於提升軟件研發和數據存儲的安全性、再生性,以及可擴展性都大有用途。它們的興起是當今科技潮流中最重要的部分之一。前端

Docker 就是一個在容器中研發、部署以及運行程序的平臺。實際上,Docker 就是集裝箱的同義詞。若是你是或是立志想要成爲一名軟件開發工程師或者數據科學家,Docker 就是你必需要學習的內容。python

不用擔憂你的進度比別人落後了 —— 本文將會幫助你瞭解 Docker 的基本概念 —— 而後你就能夠在此基礎上應用它了。android

在這個系列的後五篇文章中,我將會專一講解 Docker 術語、Dockerfile、Docker 鏡像,Docker 命令以及數據存儲。第二部分如今已經上線:ios

在這個系列的最後(還會有一些練習內容),你應該能基本學會 Docker 並能夠加以應用了 😃!git

關於 Docker 的比喻

首先,咱們從一個對 Docker 的比喻開始講起。github

[They’re everywhere! Just check out this book.](https://www.goodreads.com/book/show/34459.Metaphors_We_Live_By)

Google 對比喻的定義正是咱們須要瞭解的:chrome

表明或者象徵另一些事物,特別是很抽象的事物。docker

比喻能幫助咱們瞭解新事物。好比說,將其比喻爲一個容器實體能夠幫助咱們快速的瞭解虛擬容器的本質。ubuntu

一個容器實體

容器(Container)

正如一個塑料盒子實體,一個 Docker 容器的特性包括:後端

  1. 容納事物 —— 畢竟事物不是在容器內就是在容器外。

  2. 便攜式 —— 它能夠用於本地設備、共享設備,或者雲服務(例如 AWS)上。有點像你小時候搬家的時候用來裝小玩意兒們的盒子。

  3. 提供清晰的接口 —— 實體盒子會有一個開口,讓咱們能打開它並放入或者取出東西。相似的,Docker 容器也有和外界溝通的機制。它有能夠開放的端口,經過瀏覽器便可與外界交互。你能夠經過命令行對它進行數據交互的相關配置。

  4. 支持遠程獲取 —— 當你有須要的時候,你能夠從亞馬遜上買到另外一個空的塑料盒子。亞馬遜從製造商那裏獲取塑料盒子,而製造商從一個模具中能夠製造出成千上萬這樣的盒子。而對於 Docker 容器,異地登錄會保留一張鏡像,它就像是一個盒子模具。若是你須要另外一個容器,你能夠從這個鏡像中製做出一份。。

和虛擬的 Docker 容器不一樣,你必須付費才能從亞馬遜買新的塑料盒子,並且也不能獲得放進去的貨物的備份。抱歉嘍 💸。

活的實例

第二種你能夠用來思考 Docker 容器的方法是將它看做一個活物的實例。實例是指以某種形態存在的事物。它不只僅是代碼。它讓事物有了生命。就像其餘的活物同樣,這個實例最終會消亡 —— 意味着容器會被關閉。

An instance of a monster

Docker 容器就是 Docker 鏡像的活體形態。

軟件

除了盒子的比喻和活的實例的比喻,你還能夠將 Docker 容器看做是一個軟件程序。畢竟,它在本質上仍是一個軟件。從根本上來講,容器是一系列能計算比特的指令。

Containers are code

當 Docker 容器在運行的時候,一般狀況下會有程序在它內部運行。程序在容器內執行操做,因此應用程序才能完成某些功能。

例如,你如今正在閱讀的網頁也許就是 Docker 容器內的代碼發送給你的。或者它也許讀取了你的聲音指令併發送給 Amazon Alexa,你的聲音被解碼爲其餘指令,而後其餘容器中的程序將會使用它。

使用 Docker,你就能夠在一臺主機上同時運行多個容器。和其餘軟件程序同樣,Docker 容器能夠被運行、檢測、中止和刪除。

概念

虛擬機

虛擬機是 Docker 容器的前身。虛擬機也會分離應用和它的依賴。可是,Docker 容器須要的資源更少,更輕也更快,所以它要比虛擬機更加先進。你能夠閱讀這篇文章來了解更多它們之間的類似點與不一樣點。

Docker 鏡像

我在前文中提到了鏡像。那麼什麼是鏡像呢?我很高興你積極的提問了!在 Docker 的語境中,鏡像這個術語的含義和真正的照片的含義徹底不一樣。

Images

Docker 鏡像更像是一個藍圖,餅乾模具,或者說是模子。鏡像是不會變化的主模版,它用於產生徹底同樣的多個容器。

Cookie cutters

鏡像包含 Dockerfile,庫,以及須要運行的應用代碼,全部這些綁定在一塊兒組成鏡像。

Dockerfile

Dockerfile 是一個包含了 Docker 如何構建鏡像的指令的文件。

Dockerfile 會指向一個可用於構建初始鏡像層的基礎鏡像。使用普遍的官方基礎鏡像包括 pythonubuntualpine

其餘附加層將會根據 Dockerfile 中的指令,添加在基礎鏡像層的上面。例如,機器學習應用的 Dockerfile 將會通知 Docker 在中間層中添加 NumPy、Pandas 和 Scikit-learn。

最後,一個很薄而且可寫的層將會根據 Dockerfile 的代碼添加在全部層的上方。(薄的意思其實就是指這一層的體積很小,這一點你明白了對吧 😃?由於你已經很直觀的理解了這個比喻)

我將會在這一系列的其餘文章中更加深刻的探討 Dockerfile。

Docker Container

Docker 鏡像加上命令 docker run image_name 將會從這個鏡像中建立一個容器,並啓動它。

Container 註冊處

若是你想讓其餘人也可使用你的鏡像生成容器,你須要將鏡像發送給容器註冊處。Docker Hub 是最大的、也是人們默認的註冊處。

唉!太多零碎的內容了。咱們把這些都集中在一塊兒,進行一次實踐,這就好像作一款披薩同樣哦。

Docker 實踐

Landscape Metaphor

  • 配方就是 Dockerfile。它告訴咱們如何操做才能作好這款披薩。

  • 材料就是 Docker 的。如今你已經有了披薩的面坯,醬料以及芝士了。

將配方和原料的組合想象爲一個一體化的披薩製做工具包。這就是 Docker 鏡像

配方(Dockerfile)告訴了咱們操做步驟。以下:

  • 披薩面坯是不能改的,就比如是基礎的 ubuntu 父級鏡像。它是底層,而且會最早被構建。

  • 而後還須要添加一些芝士。披薩的第二層就比如安裝外部庫 —— 例如 NumPy。

  • 而後你還能夠撒上一些羅勒。羅勒就比如你寫在文件裏的代碼,用來運行你的應用。。

好了,如今咱們開始烹飪吧。

Oven

  • 用來烤披薩的烤箱就比如是 Docker 平臺。你將烤箱搬到你的家裏,這樣就能夠用它來烹飪了。類似的,你把 Docker 安裝到你的電腦裏,這樣就能夠操做容器。

  • 你經過旋轉旋鈕來讓烤箱開始工做。docker run image_name 指令就像是你的旋鈕 —— 它能夠建立並讓容器開始工做。

  • 作好的披薩就比如是一個 Docker 容器。

  • 享用披薩就比如是使用你的應用。

正如作披薩同樣,在 Docker 裏建立應用也要你付出勞動,可是最終你能獲得很棒的成果。享用它吧!

尾聲

本文的主要內容是概念框架。在這個系列的第二部分,我將會解釋一些在 Docker 生態圈中你可能會見到的術語。記得關注我,這樣你就不會錯過了。

但願這篇概述能幫助你更好的理解 Docker。我也但願它可以讓你知道,比喻這種方式在理解新技術的時候的價值。

若是以爲本文對你有幫助,請轉發到你喜歡的社交媒體上,這樣其餘人也就能夠閱讀學習了。👏

我也寫關於 Python、Docker、數據科學等等不少方面的文章。若是你感興趣,能夠在這裏閱讀更多內容,也能夠在 Medium 上關注我。😄

感謝你花時間閱讀本文!

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索