測驗:安裝 Docker 與第一個容器
共 5 題,點選答案後會立即顯示結果
1. 執行 docker run hello-world 時,如果本機沒有 hello-world 映像檔,Docker 會怎麼做?
2. 以下指令中,-p 8080:80 的作用是什麼?
3. 執行 docker ps 指令會顯示什麼?
4. docker run 指令中的 -d 參數代表什麼意思?
5. 如果容器還在執行中,想要刪除它,應該怎麼做?
一句話說明
這篇教你在自己的電腦上安裝 Docker,然後用一行指令跑起第一個容器。
本篇學習目標
讀完這篇,你會知道:
- 怎麼在自己的電腦上安裝 Docker Desktop
- 怎麼用
docker run啟動容器 - 怎麼用基本指令查看和管理容器
安裝 Docker Desktop
Docker Desktop 是官方提供的桌面應用程式,把 Docker 引擎、圖形介面、常用工具都包在一起。
Windows 安裝步驟
- 下載安裝檔
- 前往 Docker Desktop 官網
- 點擊「Download for Windows」
- 執行安裝程式
- 雙擊下載的
Docker Desktop Installer.exe - 勾選「Use WSL 2 instead of Hyper-V」(建議)
- 點擊「Ok」開始安裝
- 雙擊下載的
- 重新啟動電腦
- 安裝完成後需要重新啟動
- 啟動 Docker Desktop
- 從開始選單找到 Docker Desktop 並啟動
- 第一次啟動會需要幾分鐘初始化
macOS 安裝步驟
- 下載安裝檔
- 前往 Docker Desktop 官網
- 根據你的晶片選擇:
- Intel 晶片:Download for Mac – Intel Chip
- Apple Silicon(M1/M2/M3/M4):Download for Mac – Apple Silicon
- 安裝應用程式
- 開啟下載的
.dmg檔案 - 把 Docker 圖示拖到 Applications 資料夾
- 開啟下載的
- 啟動 Docker Desktop
- 從應用程式資料夾開啟 Docker
- 第一次啟動會要求系統權限,點擊「OK」允許
Linux 安裝步驟
Linux 有兩種安裝方式:
方式一:安裝 Docker Desktop(有圖形介面)
適合 Ubuntu、Debian、Fedora:
# Ubuntu/Debian 範例
sudo apt-get update
sudo apt-get install ./docker-desktop-<version>-<arch>.deb
Code language: HTML, XML (xml)方式二:只安裝 Docker Engine(命令列)
# Ubuntu 範例
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
Code language: CSS (css)驗證安裝成功
安裝完成後,打開終端機(Windows 用 PowerShell,macOS/Linux 用 Terminal),執行這兩個指令:
指令一:docker version
docker version
你會看到類似這樣的輸出:
Client:
Version: 24.0.7
API version: 1.43
Go version: go1.20.10
...
Server: Docker Desktop
Engine:
Version: 24.0.7
API version: 1.43
...
Code language: CSS (css)這在幹嘛? 顯示 Docker 的版本資訊。看到 Client 和 Server 都有資訊,表示 Docker 正常運作。
指令二:docker info
docker info
你會看到更詳細的資訊:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 24.0.7
...
Code language: CSS (css)這在幹嘛? 顯示 Docker 系統的詳細狀態,包括有幾個容器、幾個映像檔等。
第一個容器:hello-world
現在來跑你的第一個容器!
執行指令
docker run hello-world
你會看到的輸出
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:...
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Code language: JavaScript (javascript)逐行翻譯
| 輸出訊息 | 翻譯 |
|---|---|
Unable to find image 'hello-world:latest' locally | 本機沒有這個映像檔 |
Pulling from library/hello-world | 從 Docker Hub 下載中 |
Pull complete | 下載完成 |
Hello from Docker! | 容器跑起來了,印出歡迎訊息 |
docker run 在幹嘛?
docker run hello-world
↑
映像檔名稱
這個指令做了三件事:
- 檢查本機有沒有
hello-world映像檔 - 沒有的話,從 Docker Hub 下載
- 用這個映像檔啟動一個容器
實用範例:跑一個 nginx 網頁伺服器
hello-world 太簡單了,來跑一個真正有用的東西。
啟動 nginx 容器
docker run -d -p 8080:80 nginx
Code language: CSS (css)逐段翻譯
docker run -d -p 8080:80 nginx
↑ ↑ ↑
│ │ └─ 映像檔名稱:nginx 網頁伺服器
│ └─ 連接埠對應:本機 8080 → 容器 80
└─ 背景執行(detached)
Code language: CSS (css)| 參數 | 意思 |
|---|---|
-d | 背景執行,不會佔住終端機 |
-p 8080:80 | 把本機的 8080 埠對應到容器的 80 埠 |
nginx | 使用 nginx 這個映像檔 |
測試結果
打開瀏覽器,輸入 http://localhost:8080
你會看到 nginx 的歡迎頁面,表示網頁伺服器已經在容器裡跑起來了!
基本容器管理指令
查看執行中的容器
docker ps
輸出範例:
CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES
a1b2c3d4e5f6 nginx "/docker-entrypoint.…" Up 2 minutes 0.0.0.0:8080->80/tcp happy_darwin
Code language: JavaScript (javascript)這在幹嘛? 列出目前正在執行的容器。每一列是一個容器。
| 欄位 | 意思 |
|---|---|
| CONTAINER ID | 容器的唯一識別碼(可以只用前幾個字元) |
| IMAGE | 用哪個映像檔建立的 |
| STATUS | 目前狀態(Up = 執行中) |
| PORTS | 連接埠對應 |
| NAMES | Docker 自動給的名稱 |
查看所有容器(包含已停止的)
docker ps -a
這在幹嘛? -a 是 all 的意思,會列出所有容器,包括已經停止的。
停止容器
docker stop a1b2c3d4e5f6
或者用容器名稱:
docker stop happy_darwin
這在幹嘛? 停止指定的容器。可以用容器 ID 或名稱。
刪除容器
docker rm a1b2c3d4e5f6
這在幹嘛? 刪除已停止的容器。如果容器還在執行中,需要先 stop 才能 rm。
強制刪除(執行中也能刪)
docker rm -f a1b2c3d4e5f6
這在幹嘛? -f 是 force 的意思,會先停止再刪除。
常用指令整理
| 指令 | 用途 |
|---|---|
docker version | 查看 Docker 版本 |
docker info | 查看 Docker 系統資訊 |
docker run 映像檔 | 啟動容器 |
docker run -d | 背景執行 |
docker run -p 主機:容器 | 對應連接埠 |
docker ps | 列出執行中的容器 |
docker ps -a | 列出所有容器 |
docker stop 容器 | 停止容器 |
docker rm 容器 | 刪除容器 |
Vibe Coder 檢查點
當你在專案中看到 docker run 指令時:
- 看映像檔名稱 – 知道要跑什麼
- 看 -p 參數 – 知道要用哪個連接埠連線
- 看 -d 參數 – 有的話表示背景執行,終端機不會被佔住
# 範例:看到這行
docker run -d -p 3000:3000 my-app
# 你要知道:
# - 跑的是 my-app 這個映像檔
# - 用 localhost:3000 可以連到這個服務
# - 是背景執行,不會佔住終端機
Code language: PHP (php)常見問題排解
docker 指令找不到
症狀:
docker: command not found
Code language: HTTP (http)解法:
- 確認 Docker Desktop 有啟動(看系統列有沒有 Docker 圖示)
- Windows:重新開啟 PowerShell
- macOS/Linux:執行
source ~/.bashrc或重開終端機
權限不足(Linux)
症狀:
permission denied while trying to connect to the Docker daemon socket
Code language: JavaScript (javascript)解法:
# 把你的使用者加入 docker 群組
sudo usermod -aG docker $USER
# 重新登入或執行
newgrp docker
Code language: PHP (php)連接埠已被使用
症狀:
Bind for 0.0.0.0:8080 failed: port is already allocated
Code language: CSS (css)解法: 換一個連接埠,例如改用 8081:
docker run -d -p 8081:80 nginx
Code language: CSS (css)本篇重點回顧
- 安裝 Docker Desktop – 官網下載,一鍵安裝
- 驗證安裝 –
docker version和docker info - 第一個容器 –
docker run hello-world - 實用範例 –
docker run -d -p 8080:80 nginx - 管理容器 –
docker ps、docker stop、docker rm
下一篇預告
下一篇我們會學習 Docker 映像檔(Image)的管理,包括如何搜尋、下載、查看和刪除映像檔。
進階測驗:安裝 Docker 與第一個容器
共 5 題,包含情境題與錯誤診斷題。
1. 啟動測試伺服器 情境題
你想用 nginx 容器,讓瀏覽器能透過
http://localhost:3000 連到這個伺服器。而且你希望終端機不要被佔住,可以繼續執行其他指令。
應該執行哪個指令?
2. 清理舊容器 情境題
docker run hello-world 測試,現在想清理這些已經停止的容器。你用
docker ps 查看,卻發現什麼都沒有顯示。
為什麼 docker ps 看不到那些容器?下一步應該怎麼做?
3. 連接埠衝突 錯誤診斷
小明執行以下指令想啟動 nginx 容器,但出現錯誤:
最可能的原因是什麼?
4. 驗證 Docker 安裝 情境題
他問你應該用什麼方式快速驗證。
以下哪個建議最適合?
5. 無法刪除容器 錯誤診斷
小華想刪除一個容器,但遇到錯誤:
正確的解決方式是?