淺談 Docker 技術

Posted on June 26, 2023 by Allen
Self-learning Container

什麼是 Docker ?


  • 一個開源平台 (Build and Ship any Application Anywhere)
  • 讓開發者在虛擬環境中,開發、部署和管理任何的應用程式
  • 輕量化,提供應用程式獨立的測試環境

為何使用 ?


  • 跨平台可攜性
    • Docker 允許應用程式和其相依性以容器的形式打包,並在不同的環境中運行
  • 快速部署和擴展
    • 部署速度非常快,因為它們只包含應用程式所需的最小元件,不需要像虛擬機一樣啟動整個作業系統
  • 更有效率的虛擬化
    • 不需要額外的虛擬化支援,它是核心層級的虛擬化,因此可以實作更高的效能和效率
  • 更簡單的管理
    • 自動化並且有效率的管理
  • 資源隔離和安全性
    • 供了嚴格的資源隔離,確保容器之間相互隔離,並防止容器對主機系統造成干擾

容器與虛擬機差在哪裡?


虛擬機 (VM)

  • 體積龐大且耗能高的軟體套件
  • VM 會模擬底層的主機資源(CPU、RAM、Storage),將資源分配給上層的應用程式使用
  • 每個 VM 包含作業系統、應用程式、必要的二進製文件和系統函式庫的完整副本
virtual machine architecture

容器 (Container)

  • 開發者將想測試的應用程式與 Dependency(相依性資源)封裝於容器進行測試
  • 容器不會模擬系統底層的基礎架構,因此需耗費的資源也相對較低
  • 每個容器都獨立運行且彼此之間不會互相影響
docker architecture
功能 Virtual Machine Container
虛擬化的目標 作業系統 應用系統
占硬碟容量
啟動
效能 較慢 接近原生
耗費資源
服務內容 大型專案服務 多使用於微服務中

名詞介紹


我們一一來看每一個名詞是什麼意思,再來細說流程

docker 運作流程圖

Image

  • 中文稱為映像檔包含了開發者需要部署的應用程式、作業系統和編譯環境
  • 開發者能透過映像檔建置不同的容器

Container

  • 中文稱為容器容器是映像檔建立出來的實例 (Instance),我們能將它比喻為一個輕量級的沙盒
  • Docker 利用容器運行和隔離應用程式,能夠在容器中將應用程式啟動、開始、停止、刪除

Dockerfile

  • 生成映像檔的工具
  • Dockerfile 是一種簡易的文件檔,裡面包含了建立新映像檔所需的指令

Repository

  • 為一個倉庫是儲存映像檔的地方,使用者可以將自己完成的映像檔上傳至倉庫上儲存
  • 倉庫上也有許多現成的映像檔供用戶存取

Docker 運作流程


  • 整體概念與 Git 指令操作很像
  • 步驟簡單分為以下三個
    1. 撰寫 Dockerfile
    2. 將 Dockerfile 建立成 image
    3. 將 image 運行成容器

為什麼需要 Dockerfile?


假設今天我們要開發的環境需要以下套件,我們來看看 Dockerfile 的威力

  • Ubuntu 18.04
  • Jupyter notebook
  • matplotlib
沒有 Dockerfile 有 Dockerfile
1. Pull ubuntu 18.04 環境:
docker run ubuntu:18.04
1. 直接執行 Dockerfile:
docker run -it -p 8888:8888 <映像檔> -v <本機路徑>:<container目的位置路徑>
-it: 使用者可以與容器的終端機互動
-v: 資料對應 (資料可以同步更新)
2. 安裝套件們
apt-get update
apt-get install python-pip
python -m pip install --upgrade pip
pip install Jupyter
pip install matplotlib
---
3. 啟動 jupyter notebook
jupyter notebook --allow-root --no-browser --ip=0.0.0.0
---

Dockerfile?

  • 文字格式的設定檔(YAML 語法)
  • Dockerfile 建置 image 的腳本
  1. 基礎 image 資訊(FROM):base image
  2. 維護者資訊(MAINTAINER):作者資訊
  3. 工作目錄(WORKDIR)
  4. Image 操作指令(RUN):安裝需要的套件
  5. 綁定容器的PORT(EXPOSE):容器提供服務的通道
  6. 容器啟動後執行的指令(CMD):默認會執行
dockerfile

客製 Image 快速建立步驟


1. 專案所在的資料夾中創建一個 Dockerfile(沒有副檔名喔)

2. 建立 image: docker build -t <image 標籤資訊> .

3. 查看 image 是否建立成功: docker images

docker build

4. 執行腳本將容器啟動: docker run -it -p 8888:8888 -v <本機位置>:<容器位置> <image 名稱>

5. 成功開啟 jupyter notebook 畫面

docker run

6. 更新 image: docker commit -m "註解" <容器 ID> <image 名稱>

docker ps docker commit

Reference


Note

因為進實驗室開始學的一項好用工具,分享給大家,以後就不會有 It works on my machine 的問題了