Docker

🐳 基本概念

  • Image(映像):唯讀模板,用於建立容器。

  • Container(容器):映像的執行個體,具有可寫層。

  • Volume:持久化儲存或主機與容器間共享檔案。

  • Network:容器彼此或對外的連線方式。

  • Dockerfile:定義映像的建置步驟。


🔧 安裝與版本檢查

# 檢查版本
docker version

# 系統資訊
docker info

# Compose 版本
docker compose version

📦 映像管理


🚀 容器管理

docker run vs docker exec

指令
功能
使用時機
範例

docker run

建立並啟動一個新的容器

第一次從映像啟動服務,或想要一個新的環境

docker run -it ubuntu bash

docker exec

已存在且正在執行的容器內執行命令

需要進入背景服務容器檢查或除錯

docker exec -it myweb bash

📌 小提醒:

  • 若容器背景模式啟動(-d),要進去查看時就用 docker exec

  • 有些精簡映像(如 alpine)沒有 bash,需改用 sh

常用旗標

旗標
說明
範例

-it

互動模式

-it bash

--rm

自動刪除

--rm

-d

背景執行

-d

-p

埠口對映

-p 8080:80

-v

掛載

-v $PWD/data:/data

-e

環境變數

-e MODE=prod


📂 Volume 與資料持久化

以上範例展示了 兩種資料掛載方式

  • 使用 docker volume create 建立的 Volume 由 Docker 自行管理,適合資料庫或需要持久化的資料。即使容器被刪除,Volume 仍會保留。

  • 使用 -v ./path:/container/path 建立的 Bind Mount 會直接把主機目錄掛載到容器內,常用於開發環境同步程式碼或靜態檔案。

簡單來說:開發時方便修改 → 用 Bind Mount;生產環境需要穩定與可攜性 → 用 Volume


🌐 網路

以上範例示範了如何建立自訂的 bridge 網路 並讓容器加入。好處是容器之間可以透過 容器名稱 互相通訊,而不用記 IP。這樣在專案或服務中會更方便管理。


📝 Dockerfile 建置


🧹 清理與診斷


🔒 最佳實務

  • 使用最小化映像(-slimalpine)。

  • 盡量避免 root,Dockerfile 可建立專用使用者。

  • 機密資訊用 .env 或 secrets,避免硬寫入映像。

  • 合理使用 volume 持久化資料。

  • 在 CI/CD 中加上建置快取與自動測試。


📚 參考資源


✅ 結語

本指南整合了基礎指令與進階實務,能快速上手並支援專案開發。可依需求擴充至 CI/CD、自動化測試或 GPU/生物資訊等情境。

Last updated