1. 程式人生 > 程式設計 >[譯] Docker 的學習和應用

[譯] Docker 的學習和應用

Docker 的學習和應用

第一部分:基本概念

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

Docker 就是一個在容器中研發、部署以及執行程式的平臺。實際上,Docker 就是集裝箱的同義詞。如果你是或是立志想要成為一名軟體開發工程師或者資料科學家,Docker 就是你必須要學習的內容。

不用擔心你的進度比別人落後了 —— 本文將會幫助你瞭解 Docker 的基本概念 —— 然後你就可以在此基礎上應用它了。

在這個系列的後五篇文章中,我將會專注講解 Docker 術語、Dockerfile、Docker 映象,Docker 命令以及資料儲存。第二部分現在已經上線:

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

關於 Docker 的比喻

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

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

Google 對比喻的定義正是我們需要了解的:

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

比喻能幫助我們瞭解新事物。比如說,將其比喻為一個容器實體可以幫助我們快速的瞭解虛擬容器的本質。

一個容器實體

容器(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前端後端區塊鏈產品設計人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄