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(例如:ubuntunodepython

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