Docker 學習
透過 coursera 課程進行學習 https://www.coursera.org/learn/docker-for-the-absolute-beginner
Docker Image
Image(映像檔)是不可變的「應用程式模板」。
你可以把它想像成:
📀 一個安裝光碟(包含程式、系統、設定)
是「靜態」的,不能直接執行
裡面通常包含 OS、程式碼、環境、設定等
Docker Container
Container(容器)是根據 Image 啟動的「執行實體」。
你可以把它想像成:
🖥️ 從映像檔開出來的「虛擬機器」
可以執行、修改、停止、刪除
是「動態」的、可互動
Docker File
簡單來說,Dockerfile 是一個「指令清單」,當你執行 docker build 時,Docker 會按照 Dockerfile 的指令一步步去做,最後產生出一個可以執行的映像檔(image)。
📌 常見的 Dockerfile 指令:
FROM
指定 base image(例如:ubuntu、node、python)
WORKDIR
設定容器內的工作目錄
COPY
複製檔案到映像檔中
RUN
執行一個指令(例如:安裝套件)
CMD
設定容器啟動時預設執行的指令
EXPOSE
指定容器會開放的 port(只是告知用途,沒實際開 port)
🧱 範例 Dockerfile:
# 使用 Python 3.10 作為基底
FROM python:3.10
# 設定容器內的工作目錄
WORKDIR /app
# 複製 requirements.txt 進去
COPY requirements.txt .
# 安裝 Python 套件
RUN pip install -r requirements.txt
# 複製所有檔案到容器
COPY . .
# 容器啟動時執行的指令
CMD ["python", "app.py"]
Docker build
Docker build 是 Docker CLI 中的一個指令,用來根據 Dockerfile 建立一個映像檔(image)。
範例:
假設你有這個資料夾結構:
my-app/
├── app.py
├── requirements.txt
└── Dockerfile
執行:
docker build -t my-app-image .這個指令的意思是:
-t my-app-image:給這個 image 命名為my-app-image.:指定 build context 是目前資料夾(也就是Dockerfile所在的地方)
Docker run
docker run 是 Docker 中用來「啟動容器」的指令。它會根據你指定的 映像檔(image) 開出一個新的 容器(container),並執行其中的程式。
你可以把 docker run 想成是:
💿「用映像檔開機 → 執行應用程式」
🧠 指令格式
docker run [選項] 映像檔名稱 [命令]📦 最常用的選項說明
-it
互動模式(terminal 可操作)
-d
背景執行(detached)
--name my-container
自訂容器名稱
-p 本機port:容器port
映射 port,常用於 web 服務
-v 本機資料夾:容器路徑
掛載 volume(用於 hot reload)
--rm
容器停止後自動刪除
--env 或 -e
設定環境變數
Docker Volumn
Docker volumes 的作用是:
✅ 在容器與主機(或不同容器)之間共享或持久保存資料。
📦 為什麼需要 Volume?
當你使用 Docker 容器時,容器的檔案系統是 臨時的(ephemeral),只要容器刪除,裡面的資料就會跟著不見。
舉例:
你跑了一個 PostgreSQL 容器,裡面有資料
如果你執行
docker rm,那些資料就會永久消失!
為了讓資料「持久化」,Docker 提供 Volume 來解決這個問題。
📁 Volume 的幾個用途:
✅ 持久化資料
例如 PostgreSQL 的資料夾 /var/lib/postgresql/data 掛在 Volume 上,容器刪了資料還在
✅ 熱更新程式碼(開發)
把主機的程式碼(如 Next.js 專案)掛到容器裡,修改會即時同步
✅ 多容器共用資料
不同的容器可以存取同一個 Volume
✅ 備份 / 移植
Volume 可以獨立於容器管理與備份
Last updated