最佳化 Docker 映像檔

Docker 中級

Mike Metzger

Data Engineering Consultant

Docker 映像檔說明

  • Docker 映像檔是容器的基礎
  • 包含容器執行個體最初可用的所有內容
Docker 中級

Docker 映像檔的顧慮

  • 很想把所有可能需要的元件都塞進映像檔
  • 尺寸變大、難以掌控
  • 依賴關係使得安全與更新更難處理
  • 容器組合更困難,且浪費空間與頻寬
Docker 中級

Docker 映像檔建議做法

  • 將容器切分到所需的最小單元
  • 之後較易組合多個容器,而非建一個巨大的映像檔
  • 類似
    • 用可重複使用的元件組裝
    • 而非每次都從零開始
  • 更新特定軟體時,只影響使用該映像檔的容器,不會波及全部
  • 可針對尺寸最佳化,使使用與發佈容易許多
Docker 中級

Docker 映像檔拆解範例

  • 以一個資料工程專案為例,使用下列軟體:

    • Postgresql 資料庫
    • Python ETL 軟體
    • 網頁伺服器軟體
  • 可以用單一映像檔,但每次 ETL 或網頁伺服器有更新都得重建映像檔。

  • 如果需要再加一個網頁伺服器,會怎麼樣?
FROM ubuntu
RUN apt update
RUN apt install -y postgresql
RUN apt install -y nginx
RUN apt install -y python3.9
...
Docker 中級

最小化容器的範例

  • 使用 Docker 有更好的選項
  • 將各元件分成各自的容器
    • Postgresql 資料庫容器
    • Python ETL 元件
    • 網頁伺服器
  • 可為需求建立最佳化設定,並視需要新增或移除元件
bash> docker run -d postgresql:latest

bash> docker run -d nginx:latest ...
Docker 中級

查看映像檔大小

  • 使用 docker images
  • 顯示各映像檔細節(含大小)
  • 更進一步的用法稍後介紹

bash> docker images

REPOSITORY      TAG              SIZE
postgres        latest           448MB
postgres        15               442MB
apache/airflow  2.7.1-python3.9  1.4GB
alpine          latest           7.73MB
Docker 中級

一起來練習吧!

Docker 中級

Preparing Video For Download...