跳轉至

建立 2025-08-18 更新 2026-09-28

Docker 基本操作

Docker 的日常操作可以分成四類:管理容器(啟動、查看、停止、刪除)、管理 Image(下載、查看、刪除)、保存資料(Volume),以及讓容器互相連線(Network)。本頁用 Nginx 網站當例子,帶你把這四類操作各做一次,每個指令都附上說明。

容器的一生

一個容器從建立到刪除,會經過這幾個階段:

flowchart LR
  A[docker run<br>建立並啟動] --> B[執行中]
  B -->|docker stop| C[已停止]
  C -->|docker start| B
  C -->|docker rm| D[刪除]

容器「停止」後並沒有消失,還可以再啟動;要用 docker rm 才會真正刪除。

管理容器

啟動容器

docker run -d --name web -p 8080:80 nginx
參數 意思
-d 在背景執行
--name web 幫容器取名字,不取的話 Docker 會隨機命名
-p 8080:80 連接埠對應:你的電腦:容器。瀏覽器連 localhost:8080,就會連到容器的 80 埠
nginx 要使用的 Image 名稱

查看容器

docker ps        # 只列出執行中的容器
docker ps -a     # 連已停止的也列出來

STATUS 欄位會顯示狀態,例如 Up 5 minutes(執行中)或 Exited (0)(已停止,括號裡是結束代碼,0 代表正常結束)。

看日誌、進入容器

docker logs web          # 看容器印出的訊息
docker logs -f web       # 持續追蹤,按 Ctrl+C 離開
docker exec -it web sh   # 進入容器的終端機,輸入 exit 離開

程式出問題時,第一步永遠是先看 docker logs。

停止、重新啟動、刪除

docker stop web      # 停止
docker start web     # 再次啟動
docker restart web   # 重新啟動
docker stop web      # 刪除前要先停止
docker rm web        # 刪除

想一步完成「停止+刪除」,可以用 docker rm -f web。

什麼時候用 --rm?

只跑一次的容器(例如測試、執行工具),加上 --rm 讓它結束後自動刪除,就不會留下一堆停止的容器。要長期執行的服務則不要加 --rm,改用 --restart unless-stopped 讓它在當機或電腦重開後自動啟動。這兩個選項不能同時使用。

管理 Image

docker pull nginx:1.28-alpine   # 下載 Image
docker images                   # 列出電腦上的 Image
docker rmi nginx:1.28-alpine    # 刪除 Image

Image 名稱冒號後面是標籤(tag),通常代表版本。nginx:1.28-alpine 是「Nginx 1.28 版、以 Alpine Linux 為基礎」。沒寫標籤時預設是 latest(最新版),但最新版會隨時間改變,正式使用時建議寫清楚版本。

保存資料:Volume 與 Bind mount

容器刪除後,裡面的檔案也會一起消失。要保存資料,有兩種常用的方法。

Volume:交給 Docker 保管

適合資料庫這類「不需要直接看檔案,但一定要保存」的資料:

docker volume create mydata
docker run --rm -v mydata:/data alpine sh -c "echo 你好 > /data/note.txt"
docker run --rm -v mydata:/data alpine cat /data/note.txt

第一個容器寫入檔案後就被刪除了,但第二個容器還是讀得到 你好,因為檔案存在 Volume 裡。-v mydata:/data 的意思是「把名叫 mydata 的 Volume 接到容器裡的 /data 資料夾」。

Bind mount:直接使用電腦上的資料夾

適合開發時「改檔案要馬上看到效果」的情況:

mkdir mysite && cd mysite
echo "<h1>我的網頁</h1>" > index.html
docker run -d --name web -p 8080:80 -v "$(pwd)":/usr/share/nginx/html:ro nginx

打開 http://localhost:8080 會看到「我的網頁」。修改 index.html 後重新整理,就會看到新內容,不需要重啟容器。結尾的 :ro 代表唯讀,容器只能讀、不能改你的檔案。

試完後先刪掉這個容器,下一節會再用到 web 這個名字:

docker rm -f web
Volume Bind mount
寫法 -v 名稱:/容器路徑 -v /電腦路徑:/容器路徑
檔案放在哪 Docker 管理的位置 你指定的資料夾
適合 資料庫、要長期保存的資料 開發時的程式碼、設定檔

讓容器互相連線:Network

網站容器常需要連到資料庫容器。最簡單的做法是建立一個自己的網路,把兩個容器都接上去,它們就能用容器名稱互相找到對方:

docker network create mynet
docker run -d --name web --network mynet nginx
docker run --rm --network mynet alpine wget -qO- http://web

第三行的 Alpine 容器用 http://web 就連到了 Nginx,因為同一個網路裡,容器名稱可以直接當成網址使用。

為什麼要自己建立網路?

如果沒有指定 --network,容器會接到 Docker 預設的網路。預設網路不能用名稱互相連線,只能用 IP 位址,而 IP 每次啟動都可能改變。所以多個容器要互連時,記得建立自己的網路。後面介紹的 Docker Compose 會自動幫你做這件事。

清理

練習完可以把剛才建立的東西刪掉:

docker rm -f web          # 刪除 Network 一節的 web 容器
docker network rm mynet
docker volume rm mydata

想知道 Docker 佔用了多少空間,可以用 docker system df。更多清理方式請看 疑難排解。

下一步:學習如何用 Dockerfile 打包自己的程式,請看 Dockerfile 入門。

參考資料

推薦影音

Publishing and exposing ports

簡述:Docker 官方短片,說明 -p 連接埠對應的意思,對應本頁「啟動容器」。(Docker 官方)

Persisting container data

簡述:Docker 官方短片,說明容器刪除後資料為什麼會消失,以及怎麼用 Volume 保存資料,對應本頁「Volume:交給 Docker 保管」。(Docker 官方)

Sharing local files with containers

簡述:Docker 官方短片,比較 Volume 和 Bind mount,示範把電腦上的資料夾分享給容器,對應本頁「Bind mount」。(Docker 官方)

Docker networking is CRAZY!! (you NEED to learn it)

簡述:實際示範 Docker 的各種網路類型,看懂容器之間怎麼連線,適合讀完本頁「Network」後想深入了解的人。(NetworkChuck)

更多影片請見 影音教學。