iT邦幫忙

2026 iThome 鐵人賽

DAY 27
0
IT Operation

從零開始的 Linux 維運與 Bash 自動化實戰 30 天系列 第 27 篇

Day 27:Docker Volume — 容器資料持久化與共享

  • 分享至 

  • xImage
  •  

在前面兩天,我們學會了如何啟動容器與打包自訂 Image。但 Docker 容器有一個特性:「隨用隨扔(Stateless)」。一旦執行 docker rm 刪除容器,容器內部產生的所有資料(例如資料庫檔案、使用者上傳的圖片)都會跟著消失。
為了讓資料即使在容器銷毀後依然能保留下來,我們必須使用 Docker Volume(資料卷)。

Docker Volume 核心觀念

  • 容器層(Container Layer):可寫入但隨容器銷毀而消失(不持久化)。
  • Volume(資料卷):由 Docker 在宿主機(你的 Ubuntu VM)上管理的獨立儲存空間,不隨容器刪除而遺失,還可以同時掛載給多個容器共享。
  • Bind Mount(綁定掛載):直接將 VM 上的特定目錄(例如 ~/app/data)掛載進容器內部,非常適合本地開發時即時修改程式碼。

實作
https://ithelp.ithome.com.tw/upload/images/20260925/20183847yjcsooKpwg.png
建立與檢查資料卷(Volume)

  • 建立儲存空間:執行 docker volume create nginx-data 在宿主機(VM)建立一個獨立的資料卷。
  • 確認清單:執行 docker volume ls 確認名為 nginx-data 的 Volume 已經準備就緒。

啟動第一個容器並寫入資料

  • 掛載 Volume:啟動容器 test-vol-1(對映 Port 8082),並使用 -v nginx-data:/usr/share/nginx/html 將 Volume 掛載進容器的網頁目錄。
  • 寫入自訂網頁:透過 docker exec 在容器內部寫入 Data Persisted in Volume!。
  • 驗證連線:curl http://localhost:8082 成功輸出該網頁內容。

銷毀舊容器(模擬故障或升級)

  • 強制刪除:執行 docker rm -f test-vol-1 將第一個容器徹底刪除。
  • 確認狀態:執行 docker ps -a 檢查,確認列表中的 test-vol-1 已經不存在。

啟動新容器驗證資料依舊存在

  • 掛載同一個 Volume:啟動全新的第二個容器 test-vol-2(對映 Port 8083),並掛載相同的 nginx-data。
  • 資料無損證明:執行 curl http://localhost:8083 依然印出原本寫入的 Data Persisted in Volume!!這證明了即使容器被刪除,資料只要留在 Volume 內就不會遺失。

上一篇
Day 26:Docker 基礎 (二) — 撰寫 Dockerfile 打包第一個自訂 Image
下一篇
Day 28:Docker Network — 容器間的網路通訊與隔離
系列文
從零開始的 Linux 維運與 Bash 自動化實戰 30 天 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言