作為一名開發者,你一定有過程式換個環境跑就出現 Error 的經驗吧!尤其是在 Mac OS 和 Windows 之間轉換,不同的作業系統、硬體設備,常常出現相容性、版本錯誤等等問題。
Docker 來拯救被開發環境困擾的你了!
Docker 如何解決在不同執行環境下的相容性問題?
創造一個虛擬化環境。
不論程式搬到哪一台電腦,都在這個虛擬環境中執行程式,讓開發者可以專注於開發,不用浪費時間在處理安裝錯誤、環境不相容的問題,有點類似虛擬機器( Virtual Machine ),文末再說明兩者之間的差異。
Docker 的基本概念
先舉一個日常例子比較好理解
這學期 A 同學修了一門「程式設計」,今天要繳交一份程式碼作業,眼看離繳交期限只剩一個小時,A趕緊向 B 同學求救,B 怕作業被抄襲會被老師處罰,於是 B 只畫了一個程式的流程圖給 A,後來 A 來不及寫完功課,錯過了繳交期限,而 B 的作業寫得很好被選為作業範本程式供大家參考,老師總共挑了 10 位同學的當成作業範本放在好寶寶資料夾中保存。
期末老師給了一個補交作業的機會,A 就到好寶寶資料夾中找到 B 的作業範本,複製並修改一些參數名稱當作自己的補交作業了。
( 以上比喻僅供參考,還是鼓勵大家自己寫功課哦 )
- 程式邏輯流程圖 => 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:
完成後註冊 or 登入
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 組成
虛擬化的兩種方式:
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 ,輕量、耗費較少資源、啟動速度快