【Docker 入門系列】#02 安裝 Docker 與第一個容器

測驗:安裝 Docker 與第一個容器

共 5 題,點選答案後會立即顯示結果

1. 執行 docker run hello-world 時,如果本機沒有 hello-world 映像檔,Docker 會怎麼做?

  • A. 顯示錯誤訊息並停止執行
  • B. 自動從 Docker Hub 下載映像檔,然後啟動容器
  • C. 要求使用者手動執行 docker pull 指令
  • D. 建立一個空白的映像檔

2. 以下指令中,-p 8080:80 的作用是什麼?

docker run -d -p 8080:80 nginx
  • A. 設定容器的記憶體上限為 8080MB
  • B. 讓容器在 8080 秒後自動停止
  • C. 把本機的 8080 埠對應到容器的 80 埠
  • D. 指定容器使用 80 號和 8080 號兩個連接埠

3. 執行 docker ps 指令會顯示什麼?

  • A. 所有容器,包含已停止的
  • B. 目前正在執行中的容器
  • C. 所有已下載的映像檔
  • D. Docker 系統的版本資訊

4. docker run 指令中的 -d 參數代表什麼意思?

  • A. 背景執行(detached),不會佔住終端機
  • B. 刪除(delete)模式,執行完自動刪除容器
  • C. 除錯(debug)模式,顯示詳細日誌
  • D. 下載(download)模式,只下載不執行

5. 如果容器還在執行中,想要刪除它,應該怎麼做?

  • A. 直接執行 docker rm 容器ID
  • B. 執行 docker delete 容器ID
  • C. 先 docker stopdocker rm,或直接用 docker rm -f
  • D. 執行 docker ps --remove 容器ID

一句話說明

這篇教你在自己的電腦上安裝 Docker,然後用一行指令跑起第一個容器。

本篇學習目標

讀完這篇,你會知道:

  • 怎麼在自己的電腦上安裝 Docker Desktop
  • 怎麼用 docker run 啟動容器
  • 怎麼用基本指令查看和管理容器

安裝 Docker Desktop

Docker Desktop 是官方提供的桌面應用程式,把 Docker 引擎、圖形介面、常用工具都包在一起。

Windows 安裝步驟

  1. 下載安裝檔
  2. 執行安裝程式
    • 雙擊下載的 Docker Desktop Installer.exe
    • 勾選「Use WSL 2 instead of Hyper-V」(建議)
    • 點擊「Ok」開始安裝
  3. 重新啟動電腦
    • 安裝完成後需要重新啟動
  4. 啟動 Docker Desktop
    • 從開始選單找到 Docker Desktop 並啟動
    • 第一次啟動會需要幾分鐘初始化

macOS 安裝步驟

  1. 下載安裝檔
    • 前往 Docker Desktop 官網
    • 根據你的晶片選擇:
      • Intel 晶片:Download for Mac – Intel Chip
      • Apple Silicon(M1/M2/M3/M4):Download for Mac – Apple Silicon
  2. 安裝應用程式
    • 開啟下載的 .dmg 檔案
    • 把 Docker 圖示拖到 Applications 資料夾
  3. 啟動 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
           ↑
           映像檔名稱

這個指令做了三件事:

  1. 檢查本機有沒有 hello-world 映像檔
  2. 沒有的話,從 Docker Hub 下載
  3. 用這個映像檔啟動一個容器

實用範例:跑一個 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
           └─ 背景執行(detachedCode 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連接埠對應
NAMESDocker 自動給的名稱

查看所有容器(包含已停止的)

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 指令時:

  1. 看映像檔名稱 – 知道要跑什麼
  2. 看 -p 參數 – 知道要用哪個連接埠連線
  3. 看 -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)

本篇重點回顧

  1. 安裝 Docker Desktop – 官網下載,一鍵安裝
  2. 驗證安裝docker versiondocker info
  3. 第一個容器docker run hello-world
  4. 實用範例docker run -d -p 8080:80 nginx
  5. 管理容器docker psdocker stopdocker rm

下一篇預告

下一篇我們會學習 Docker 映像檔(Image)的管理,包括如何搜尋、下載、查看和刪除映像檔。

進階測驗:安裝 Docker 與第一個容器

測驗目標:驗證你是否能在實際情境中應用所學。
共 5 題,包含情境題與錯誤診斷題。

1. 啟動測試伺服器 情境題

你正在開發一個前端專案,需要快速啟動一個網頁伺服器來測試。
你想用 nginx 容器,讓瀏覽器能透過 http://localhost:3000 連到這個伺服器。
而且你希望終端機不要被佔住,可以繼續執行其他指令。

應該執行哪個指令?

  • A. docker run -p 3000:80 nginx
  • B. docker run -d -p 3000:80 nginx
  • C. docker run -d -p 80:3000 nginx
  • D. docker run nginx -p 3000:80

2. 清理舊容器 情境題

你執行了好幾次 docker run hello-world 測試,現在想清理這些已經停止的容器。
你用 docker ps 查看,卻發現什麼都沒有顯示。

為什麼 docker ps 看不到那些容器?下一步應該怎麼做?

  • A. 容器已經被自動刪除了,不需要做任何事
  • B. Docker 服務可能有問題,需要重新啟動 Docker Desktop
  • C. docker ps 只顯示執行中的容器,用 docker ps -a 可以看到已停止的容器
  • D. hello-world 是特殊映像檔,不會建立容器

3. 連接埠衝突 錯誤診斷

小明執行以下指令想啟動 nginx 容器,但出現錯誤:

$ docker run -d -p 8080:80 nginx Error response from daemon: driver failed programming external connectivity Bind for 0.0.0.0:8080 failed: port is already allocated

最可能的原因是什麼?

  • A. nginx 映像檔損壞,需要重新下載
  • B. 本機的 8080 連接埠已經被其他程式或容器使用
  • C. Docker Desktop 沒有啟動
  • D. 需要先執行 docker pull nginx

4. 驗證 Docker 安裝 情境題

你的同事剛裝好 Docker Desktop,想確認是否安裝成功。
他問你應該用什麼方式快速驗證。

以下哪個建議最適合?

  • A. 直接啟動一個複雜的應用程式容器來測試
  • B. 只要 Docker Desktop 圖示有出現就代表安裝成功
  • C. 重新安裝一次確保沒問題
  • D. 在終端機執行 docker version 確認有顯示 Client 和 Server 資訊

5. 無法刪除容器 錯誤診斷

小華想刪除一個容器,但遇到錯誤:

$ docker rm a1b2c3d4e5f6 Error response from daemon: You cannot remove a running container a1b2c3d4e5f6… Stop the container before attempting removal or force remove

正確的解決方式是?

  • A. 執行 docker delete a1b2c3d4e5f6
  • B. 重新啟動 Docker Desktop 後再試一次
  • C. 先執行 docker stop a1b2c3d4e5f6,或直接用 docker rm -f a1b2c3d4e5f6
  • D. 等容器自己停止後就能刪除了

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *