Docker 新手指南:從鏡像到容器,完整概念與操作教學
更新日期: 2025 年 3 月 13 日
本文為 Docker 基本介紹系列文,第 3 篇:
- AMD64 與 ARM64 的全面解析:新手必讀指南
- 新手必看!如何在筆電安裝 Docker?完整架構選擇指南
- Docker 新手指南:從鏡像到容器,完整概念與操作教學 👈進度
- Docker 進階實戰:Volume、Port Mapping 與 Docker Compose 完整指南
- 使用 Docker 運行 Python:互動模式與腳本執行完整指南
在開發應用程式時,我們經常遇到環境不一致的問題,例如:「在我的電腦可以運行,為什麼你的電腦卻報錯?」
這是因為不同裝置的作業系統、Python 版本、安裝的套件可能不同,導致應用程式行為不一致。
Docker 可以幫助我們解決這個問題!
透過 Docker,你可以打包應用程式及其所有相依性,讓它在任何環境下都能穩定運行,無論是 Windows、Mac 還是 Linux。
本篇文章將從最基礎的Docker Image(鏡像)、Docker Container(容器) 到 Dockerfile 的概念與操作,幫助新手快速上手 Docker。
什麼是 Docker Image(鏡像)?
概念
Docker Image(鏡像)是一個應用程式的唯讀模板,它包含了應用程式所需的所有環境,例如作業系統、程式語言、函式庫等。
你可以把 Docker 鏡像想像成一個「安裝包」,當你安裝這個安裝包後,就可以使用裡面的應用程式。
例如 python:3.11
鏡像就是一個包含 Python 3.11 環境的鏡像,讓你可以直接在容器中運行 Python,而不需要在本機安裝 Python。
類比
Docker 鏡像就像是作業系統的快照,例如:
- Windows 安裝包(Windows 10 ISO) → 安裝後變成 Windows 作業系統
- Python Docker 鏡像(python:3.11) → 啟動後變成 Python 環境的容器
常用指令
指令 | 功能 |
---|---|
docker pull python:3.11 | 下載 Python 3.11 鏡像 |
docker images | 列出本機的所有鏡像 |
🔹 示範:下載 Python 3.11 鏡像
docker pull python:3.11
🔹 示範:查看本機已有的鏡像
docker images
如果你看到 Python 鏡像出現在列表中,代表下載成功!
什麼是 Docker Container(容器)?
概念
Docker Container(容器)是從 Docker 鏡像啟動後,實際運行的應用環境。
你可以把容器想像成一台「獨立的虛擬機」,但它不像傳統虛擬機那麼笨重,而是一個輕量級的隔離環境。
類比
- Docker Image(鏡像) = 軟體安裝包
- Docker Container(容器) = 已經安裝並正在執行的應用
換句話說,鏡像只是靜態的模板,而容器則是正在運行的應用程式。
常用指令
指令 | 功能 |
---|---|
docker run -it python:3.11 | 啟動一個 Python 3.11 容器 |
docker ps | 查看正在運行的容器 |
docker stop <container_id> | 停止某個容器 |
🔹 示範:啟動一個 Python 容器並進入互動模式
docker run -it python:3.11
執行後,你會進入 Python 互動環境,顯示 >>>
提示符號,可以輸入 Python 指令,例如:
>>> print("Hello from Docker!")
>>> exit() # 退出容器
🔹 示範:查看正在運行的容器
docker ps
🔹 示範:停止運行中的容器
docker stop <container_id>
(<container_id>
可以從 docker ps
指令中查到)
什麼是 Dockerfile?如何自動化建立環境?
概念
Dockerfile 是一個描述如何建構 Docker 鏡像的腳本。它就像是一本「食譜」,定義了如何從一個基礎鏡像開始,安裝所需的套件、設定環境變數,最後產生一個可用的應用程式環境。
類比
- Dockerfile = 食譜
- Docker Image = 根據食譜做出的蛋糕
- Docker Container = 已經切好、可以食用的蛋糕
透過 Dockerfile,你可以快速自動化建置環境,避免每次都要手動輸入指令。
範例 Dockerfile
假設你有一個 Flask 網頁應用程式(Python 框架),你的專案結構如下:
my-python-app/
│── app.py
│── requirements.txt
│── Dockerfile
app.py(應用程式)
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Hello from Docker!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
🔹 requirements.txt(安裝的 Python 套件)
flask>=2.0.0
🔹 Dockerfile(建構 Python 環境的腳本)
# 1. 使用 Python 3.11 的精簡版鏡像
FROM python:3.11-slim
# 2. 設定容器內的工作目錄
WORKDIR /app
# 3. 複製需求文件並安裝 Python 套件
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 4. 複製專案程式碼
COPY . .
# 5. 暴露 5000 端口,讓外部可以訪問
EXPOSE 5000
# 6. 容器啟動時執行 Flask 應用程式
CMD ["python", "app.py"]
建立並運行 Docker 容器
指令 | 功能 |
---|---|
docker build -t my-python-app . | 根據 Dockerfile 建立鏡像 |
docker run -p 5000:5000 my-python-app | 運行容器並開放 5000 端口 |
🔹 步驟 1:建立 Docker 鏡像
docker build -t my-python-app .
🔹 步驟 2:運行 Flask 應用程式容器
docker run -p 5000:5000 my-python-app
然後在瀏覽器打開 http://localhost:5000
,就會看到 “Hello from Docker!” 🎉
結論:新手學 Docker,應該掌握哪些重點?
✅ Docker Image(鏡像):應用程式的安裝包
✅ Docker Container(容器):實際運行的環境
✅ Dockerfile:定義如何自動建構環境
透過這篇文章,相信你已經掌握 Docker 的基礎概念,現在就動手試試吧!🚀