任務二:安裝 Docker 並執行第一個容器¶
開始之前¶
任務目標
在這個任務中,你將學習:
- 在自己的作業系統上安裝 Docker
- 理解 Docker CLI 的基本命令結構
- 學會映像檔的基本操作(pull、images、inspect、tag、rmi)
- 掌握容器的生命週期管理(run、start、stop、restart、rm)
- 使用常用的容器執行參數(-d、-it、--name、--rm)
- 透過實作練習執行第一個容器
安裝 Docker¶
在開始使用 Docker 之前,我們需要先在自己的電腦上安裝 Docker。Docker 支援 Linux、Windows 和 macOS 三種主流作業系統,但安裝方式略有不同。請根據你的作業系統選擇對應的安裝步驟。
使用 Docker Desktop¶
Windows 使用者建議安裝 Docker Desktop for Windows,這是 Docker 官方提供的圖形化工具。
系統需求:
- Windows 10/11 64-bit(Pro、Enterprise 或 Education 版本)
- 必須啟用 WSL 2(Windows Subsystem for Linux 2)
- 至少 4GB RAM
安裝步驟:
- 前往 Docker Desktop 下載頁面
- 下載 Windows 版本的安裝檔
- 執行安裝檔,按照指示完成安裝
- 安裝過程中會要求啟用 WSL 2,請按照提示操作
- 安裝完成後重新啟動電腦
啟動 Docker Desktop 後,你會在系統匣看到 Docker 圖示,表示 Docker 已經在背景執行。
使用 Docker Desktop for Mac¶
macOS 使用者建議安裝 Docker Desktop for Mac。
系統需求:
- macOS 11(Big Sur)或更新版本
- Apple Silicon(M1/M2)或 Intel 晶片的 Mac
- 至少 4GB RAM
安裝步驟:
- 前往 Docker Desktop 下載頁面
- 根據你的晶片類型選擇對應版本:
- Apple Silicon(M1/M2):下載 Apple Silicon 版本
- Intel:下載 Intel 版本
- 下載
.dmg檔案後,將 Docker 圖示拖曳到「應用程式」資料夾 - 開啟「應用程式」資料夾,雙擊 Docker 圖示啟動
- 第一次啟動時會要求授予權限,請按照提示操作
啟動成功後,你會在選單列看到 Docker 圖示。
使用套件管理器安裝¶
以 Ubuntu/Debian 為例,最快的安裝方式是使用官方提供的便利腳本:
安裝完成後,將你的使用者加入 docker 群組,這樣就不需要每次都使用 sudo:
登出後重新登入,讓群組設定生效。
其他發行版:
- CentOS/RHEL:使用
yum或dnf安裝 - Arch Linux:使用
pacman -S docker - Fedora:使用
dnf install docker-ce
詳細步驟請參考 Docker 官方文件 - Linux 安裝指南。
驗證安裝¶
無論使用哪種作業系統,安裝完成後都應該驗證 Docker 是否正常運作。開啟終端機(Linux/macOS)或命令提示字元(Windows),執行以下指令:
如果安裝成功,你會看到類似以下的輸出,顯示 Docker 的客戶端和伺服器版本資訊:
Client: Docker Engine - Community
Version: 24.0.7
API version: 1.43
...
Server: Docker Engine - Community
Engine:
Version: 24.0.7
API version: 1.43 (minimum version 1.12)
...
你也可以使用 docker info 來查看更詳細的系統資訊:
這個指令會顯示 Docker 的執行狀態、儲存驅動程式、已安裝的映像檔和容器數量等資訊。
Docker CLI 基礎¶
Docker 的所有操作都是透過命令列介面(CLI)完成的。理解 Docker CLI 的命令結構,能幫助你更快上手各種操作。
命令結構¶
Docker CLI 的基本結構非常一致:
說明:
docker:Docker CLI 的執行檔名稱<command>:要執行的指令,例如pull、run、stop等[options]:可選的參數,通常以-或--開頭[arguments]:指令需要的參數,例如映像檔名稱、容器 ID 等
範例:
# 拉取 nginx 映像檔
docker pull nginx
# 以背景模式執行 nginx 容器,並命名為 web-server
docker run -d --name web-server nginx
# 停止名為 web-server 的容器
docker stop web-server
使用幫助指令¶
Docker 提供了完善的說明文件,你隨時可以透過 --help 參數查詢指令用法。
查看所有可用指令:
這會列出所有 Docker 指令的簡短說明,例如:
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Commands:
pull Pull an image or a repository from a registry
run Run a command in a new container
ps List containers
images List images
...
查看特定指令的詳細說明:
如果你想了解某個指令的詳細用法,可以在指令後加上 --help:
這會顯示 docker run 的所有可用參數和使用範例。養成使用 --help 的習慣,能讓你快速找到需要的資訊,而不需要每次都查閱線上文件。
映像檔操作¶
在任務一中我們學到,映像檔(Image)是容器的模板。在啟動容器之前,我們需要先取得映像檔。Docker 提供了一系列指令來管理本地的映像檔。
拉取映像檔:docker pull¶
docker pull 用於從 Docker Hub 或其他映像檔倉庫下載映像檔到本地。
基本用法:
範例:
# 拉取最新版本的 nginx 映像檔(預設 tag 為 latest)
docker pull nginx
# 拉取特定版本的 nginx 映像檔
docker pull nginx:1.25
# 拉取特定平台的映像檔
docker pull --platform linux/amd64 nginx
當你執行 docker pull 時,Docker 會顯示下載進度。映像檔通常由多個層(layer)組成,Docker 會平行下載這些層以加快速度。
列出映像檔:docker images¶
docker images 列出本地已下載的所有映像檔。
基本用法:
範例:
輸出欄位說明:
- REPOSITORY:映像檔名稱
- TAG:映像檔標籤,通常用於標記版本
- IMAGE ID:映像檔的唯一識別碼
- CREATED:映像檔建立時間
- SIZE:映像檔大小
檢視映像檔詳情:docker inspect¶
docker inspect 顯示映像檔的詳細資訊,包含設定、環境變數、建立時間等,輸出為 JSON 格式。
基本用法:
範例:
# 檢視 nginx 映像檔的詳細資訊
docker inspect nginx
# 使用 --format 提取特定欄位(例如:建立時間)
docker inspect --format='{{.Created}}' nginx
這個指令在除錯或了解映像檔內部設定時非常有用。
標籤映像檔:docker tag¶
docker tag 為映像檔建立一個新的標籤(別名)。這在為映像檔標記版本或準備推送到不同的映像檔倉庫時很有用。
基本用法:
範例:
# 為 nginx 映像檔建立一個標籤
docker tag nginx nginx:my-version
# 為推送到私有倉庫準備標籤
docker tag nginx my-registry.com/nginx:1.0
標籤不會複製映像檔,只是建立一個新的引用(reference)指向同一個映像檔,因此不會佔用額外的硬碟空間。
刪除映像檔:docker rmi¶
docker rmi 刪除本地的映像檔。
基本用法:
範例:
# 刪除單一映像檔(使用名稱或 ID)
docker rmi nginx
# 刪除多個映像檔
docker rmi nginx redis
# 強制刪除(即使有容器正在使用)
docker rmi -f nginx
注意: 如果有容器正在使用該映像檔,Docker 會拒絕刪除。你需要先停止並刪除使用該映像檔的容器,或使用 -f 參數強制刪除(不建議)。
容器生命週期¶
容器從建立到刪除會經歷不同的狀態。理解容器的生命週期,能幫助你更有效地管理容器。
執行容器:docker run¶
docker run 是最常用的指令,它會根據指定的映像檔建立並啟動一個新容器。
基本用法:
範例:
# 執行一個 nginx 容器
docker run nginx
# 以背景模式執行,並映射連接埠
docker run -d -p 8080:80 nginx
# 執行後進入容器的 shell
docker run -it ubuntu bash
docker run 實際上結合了 docker create 和 docker start 兩個步驟。如果本地沒有指定的映像檔,Docker 會自動先執行 docker pull 下載。
啟動已停止的容器:docker start¶
docker start 啟動一個已經存在但處於停止狀態的容器。
基本用法:
範例:
# 啟動名為 web-server 的容器
docker start web-server
# 啟動容器並附加到其輸出(類似 docker run 的互動模式)
docker start -a web-server
與 docker run 的差別:
docker run每次都會建立新的容器docker start重新啟動已存在的容器,保留之前的狀態和資料
停止容器:docker stop¶
docker stop 優雅地停止一個執行中的容器。Docker 會先發送 SIGTERM 訊號,等待容器自行關閉;如果容器在一定時間內(預設 10 秒)沒有停止,Docker 會發送 SIGKILL 強制終止。
基本用法:
範例:
# 停止名為 web-server 的容器
docker stop web-server
# 停止多個容器
docker stop web-server db-server
# 設定等待時間為 30 秒
docker stop -t 30 web-server
重啟容器:docker restart¶
docker restart 重新啟動一個容器,相當於先執行 docker stop 再執行 docker start。
基本用法:
範例:
這個指令在容器出現問題需要重啟,或是更新設定後需要重新載入時很有用。
刪除容器:docker rm¶
docker rm 刪除一個或多個已停止的容器。
基本用法:
範例:
# 刪除名為 web-server 的容器
docker rm web-server
# 刪除多個容器
docker rm web-server db-server
# 強制刪除執行中的容器
docker rm -f web-server
注意: 預設情況下,Docker 不允許刪除執行中的容器。你需要先停止容器,或使用 -f 參數強制刪除。
清理停止的容器:
如果你想一次刪除所有已停止的容器,可以使用:
這個指令會要求確認後刪除所有停止狀態的容器。
常用執行參數¶
docker run 提供了許多參數來控制容器的行為。以下是幾個最常用的參數。
背景執行模式:-d¶
-d(detach)讓容器在背景執行,而不是佔用目前的終端機視窗。
範例:
使用 -d 後,Docker 會回傳容器的 ID,容器會繼續在背景執行。你可以使用 docker ps 查看執行中的容器。
何時使用:
- 執行長時間運作的服務(如 Web 伺服器、資料庫)
- 不需要與容器互動時
- 想讓容器在背景持續執行
互動模式:-it¶
-it 是兩個參數的組合:
-i(interactive):保持標準輸入(stdin)開啟-t(tty):分配一個偽終端機
這兩個參數通常一起使用,讓你可以與容器內的程式互動。
範例:
# 啟動 Ubuntu 容器並進入 bash shell
docker run -it ubuntu bash
# 啟動 Python 容器並進入 Python 互動環境
docker run -it python:3.11
# 進入已執行的容器(使用 docker exec)
docker exec -it my-container bash
何時使用:
- 需要在容器內執行命令或除錯
- 執行互動式程式(如 shell、REPL)
- 測試或開發時需要手動操作
退出互動模式:
- 輸入
exit或按 Ctrl+D:退出並停止容器 - 按 Ctrl+P 然後 Ctrl+Q:退出但保持容器執行(僅限
docker run -it時)
容器命名:--name¶
--name 為容器指定一個易於識別的名稱。如果不指定,Docker 會自動產生一個隨機名稱。
範例:
# 為容器命名為 web-server
docker run -d --name web-server nginx
# 之後可以直接使用名稱操作容器
docker stop web-server
docker start web-server
docker rm web-server
優點:
- 比使用容器 ID 更容易記憶和操作
- 讓容器的用途一目了然
- 避免名稱衝突(同名容器無法同時存在)
自動移除:--rm¶
--rm 讓容器停止後自動刪除,不會留下停止狀態的容器。
範例:
# 執行一次性任務,完成後自動清理
docker run --rm ubuntu echo "Hello, Docker!"
# 執行測試,測試完成後自動刪除容器
docker run --rm -it python:3.11 python -c "print('Test')"
何時使用:
- 執行一次性指令或測試
- 不需要保留容器的執行紀錄
- 避免累積大量停止的容器
注意: --rm 和 -d 可以一起使用,但要確保容器會自行停止,否則容器會一直執行直到手動停止。
實作練習¶
現在讓我們透過實作練習來鞏固學到的指令。我們會執行兩個不同類型的容器,體驗背景服務和互動式操作。
練習一:執行 nginx Web 伺服器¶
nginx 是一個輕量級的 Web 伺服器,非常適合作為第一個容器練習。
步驟:
-
拉取 nginx 映像檔
-
以背景模式執行 nginx 容器,並映射連接埠
參數說明:
-d:背景執行-p 8080:80:將容器的 80 連接埠映射到主機的 8080 連接埠--name my-nginx:將容器命名為 my-nginx
-
驗證容器是否正在執行
你應該會看到 my-nginx 容器出現在列表中。
-
透過瀏覽器驗證
開啟瀏覽器,前往
http://localhost:8080,你應該會看到 nginx 的歡迎頁面: -
查看容器日誌
這會顯示 nginx 的存取記錄。
-
停止並刪除容器
練習二:使用 busybox 互動式操作¶
busybox 是一個輕量級的 Linux 工具集,非常適合練習互動模式。
步驟:
-
執行 busybox 容器並進入 shell
參數說明:
-it:互動模式--name my-busybox:將容器命名為 my-busyboxsh:在容器內執行 shell
你應該會看到容器內的 shell 提示符:
-
在容器內執行一些指令
-
退出容器
輸入
exit後,容器會停止執行。 -
重新啟動容器並檢查檔案是否還在
參數說明:
-a:附加到容器的輸出-i:互動模式
進入容器後,執行:
你應該會看到之前建立的檔案還在!這證明了容器的資料在停止後會保留。
-
清理容器
退出容器後,刪除它:
嘗試使用 --rm 參數:
現在試試使用 --rm 參數,容器停止後會自動刪除:
在容器內建立檔案,然後 exit 退出。再次執行 docker ps -a 檢查,你會發現容器已經不存在了。
任務結束¶
完成!
恭喜你完成了這個任務!現在你已經學會:
- 在自己的作業系統上安裝 Docker
- 理解 Docker CLI 的基本命令結構
- 學會映像檔的基本操作(pull、images、inspect、tag、rmi)
- 掌握容器的生命週期管理(run、start、stop、restart、rm)
- 使用常用的容器執行參數(-d、-it、--name、--rm)
- 透過實作練習執行第一個容器
你現在已經具備了 Docker 的基礎操作能力!在下一個任務中,我們將學習如何建立自己的映像檔,讓容器執行你自己的應用程式。