淺談 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 包含作業系統、應用程式、必要的二進製文件和系統函式庫的完整副本
容器 (Container)
- 開發者將想測試的應用程式與 Dependency(相依性資源)封裝於容器進行測試
- 容器不會模擬系統底層的基礎架構,因此需耗費的資源也相對較低
- 每個容器都獨立運行且彼此之間不會互相影響
功能 | Virtual Machine | Container |
---|---|---|
虛擬化的目標 | 作業系統 | 應用系統 |
占硬碟容量 | 高 | 低 |
啟動 | 慢 | 快 |
效能 | 較慢 | 接近原生 |
耗費資源 | 高 | 低 |
服務內容 | 大型專案服務 | 多使用於微服務中 |
名詞介紹
我們一一來看每一個名詞是什麼意思,再來細說流程
Image
- 中文稱為映像檔包含了開發者需要部署的應用程式、作業系統和編譯環境
- 開發者能透過映像檔建置不同的容器
Container
- 中文稱為容器容器是映像檔建立出來的實例 (Instance),我們能將它比喻為一個輕量級的沙盒
- Docker 利用容器運行和隔離應用程式,能夠在容器中將應用程式啟動、開始、停止、刪除
Dockerfile
- 生成映像檔的工具
- Dockerfile 是一種簡易的文件檔,裡面包含了建立新映像檔所需的指令
Repository
- 為一個倉庫是儲存映像檔的地方,使用者可以將自己完成的映像檔上傳至倉庫上儲存
- 倉庫上也有許多現成的映像檔供用戶存取
Docker 運作流程
- 整體概念與 Git 指令操作很像
- 步驟簡單分為以下三個
- 撰寫 Dockerfile
- 將 Dockerfile 建立成 image
- 將 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 的腳本
- 基礎 image 資訊(FROM):base image
- 維護者資訊(MAINTAINER):作者資訊
- 工作目錄(WORKDIR)
- Image 操作指令(RUN):安裝需要的套件
- 綁定容器的PORT(EXPOSE):容器提供服務的通道
- 容器啟動後執行的指令(CMD):默認會執行
客製 Image 快速建立步驟
1. 專案所在的資料夾中創建一個 Dockerfile(沒有副檔名喔)
2. 建立 image: docker build -t <image 標籤資訊> .
3. 查看 image 是否建立成功: docker images