Docker 基礎概念+實作

Jasmine
6 min readSep 26, 2020

--

作為一名開發者,你一定有過程式換個環境跑就出現 Error 的經驗吧!尤其是在 Mac OS 和 Windows 之間轉換,不同的作業系統、硬體設備,常常出現相容性、版本錯誤等等問題。

Docker 來拯救被開發環境困擾的你了!

Docker 如何解決在不同執行環境下的相容性問題?

創造一個虛擬化環境。

不論程式搬到哪一台電腦,都在這個虛擬環境中執行程式,讓開發者可以專注於開發,不用浪費時間在處理安裝錯誤、環境不相容的問題,有點類似虛擬機器( Virtual Machine ),文末再說明兩者之間的差異。

Docker 的基本概念

先舉一個日常例子比較好理解

這學期 A 同學修了一門「程式設計」,今天要繳交一份程式碼作業,眼看離繳交期限只剩一個小時,A趕緊向 B 同學求救,B 怕作業被抄襲會被老師處罰,於是 B 只畫了一個程式的流程圖給 A,後來 A 來不及寫完功課,錯過了繳交期限,而 B 的作業寫得很好被選為作業範本程式供大家參考,老師總共挑了 10 位同學的當成作業範本放在好寶寶資料夾中保存。

期末老師給了一個補交作業的機會,A 就到好寶寶資料夾中找到 B 的作業範本,複製並修改一些參數名稱當作自己的補交作業了。

( 以上比喻僅供參考,還是鼓勵大家自己寫功課哦 )

程式邏輯流程圖(DockerFile)
範本程式(Image)
  • 程式邏輯流程圖 => DockerFile
  • 作業範本程式 => Image(映像檔)
  • 程式邏輯流程圖描述程式的邏輯 => DockerFile 描述如何一步步建立 Image
  • A 補交的作業( 複製了一份 B 的作業範本 )=> Container(容器)❗Container 是依照 Image 建立的實體,要不要修改都可以
  • 好寶寶資料夾存放作業範本 => Repository(倉庫)存放 Images

Image 、Container、Repository 就是 Docker 中最重要的三個概念

1. Image(映像檔)

Image 是一個模板,用來建立 Container ,可以直接從 Docker Hub 下載 Image 使用。❗ Image 是 read-only

( Docker File 是建立 Image 流程圖 )

2. Container(容器)

由 Image 建立 Container,程式在 Container 中執行

3. Repository(倉庫)

存放 Images 的地方,分為 public 和 private

最大的 Public Repository:Docker Hub

裡面有非常多 Image 可以直接下載使用

實作

最近在看 Google 機器學習的課程,都是用 Docker 執行 TensorFlow( 機器學習框架 ),就用這個作為範例了。

Step1:

下載 Docker Desktop

完成後註冊 or 登入

Docker Desktop

Step2:

Docker Hub 下載 tensorflow Image( 映像檔 )

也可以從 Docker Hub 挑一個自己平常用得到的 Image 試試看

docker pull tensorflow/tensorflow:latest-gpu-jupyter # latest release w/ GPU support and Jupyter

可能會需要一點時間, 下載蠻多東西的

Step3:

建立一個容器( Container )並執行

docker run -it -p 8888:8888 tensorflow/tensorflow:latest-jupyter

Step4:

執行成功

我習慣使用最後一個 http://127.0.0.1:8888/?token=xxx

To access the notebook, open this file in a browser:file:///root/.local/share/jupyterruntime/nbserver-1-open.htmlOr copy and paste one of these URLs:http://eb95ae9a30bc:8888/?token=xxxor http://127.0.0.1:8888/?token=xxx

補充

虛擬化技術

一種資源管理技術,將電腦中的實體資源切割成不同層,使得每一層可以替換且任意組合。

EX:下圖中,Virtual Machine( 虛擬機器 ),Guest OS 可由 MacOS、Windows、Linux 組成

VM 與 Docker Container 結構

虛擬化的兩種方式:

Docker vs Virtual Machine

1. 虛擬機器 ( Virtual Machine )

硬體 (系統) 層級虛擬化,Hypervisor( 虛擬機器監視器 )提供執行不同虛擬機器的平台,在 Host OS 上再安裝 Guest OS,彼此之間不會打架出現相容性問題。

⇒ 模擬整個 CPU、OS…

⇒ 安裝 Guest OS 耗費較多資源、啟動速度慢( 需等待 Guest OS 開機 )

2. Docker 容器 ( Docker Container )

作業系統層級虛擬化,Docker 是一種 Container Manager,直接分配 Host OS 資源給不同的 Container。

Docker daemon(守護行程,在後台持續執行)負責處理各種 Docker 的操作請求。

⇒ 模擬程式執行環境

⇒ 不需要 Guest OS ,輕量、耗費較少資源、啟動速度快

--

--

Jasmine
Jasmine

Written by Jasmine

Data Science | Data Analytics | Data Engineering — About me: https://www.linkedin.com/in/jia-min-li-jasmine/

No responses yet