iT邦幫忙

2026 iThome 鐵人賽

DAY 16
0
IT Operation

Docker 新手村:從容器到 PostgreSQL 的實戰之路系列 第 16 篇

Day 16 - Docker Volume 實戰:讓 PostgreSQL 資料保存下來

  • 分享至 

  • xImage
  •  

學習目標

  • 將 Docker Volume 實際應用在 PostgreSQL
  • 了解 PostgreSQL 資料存放的位置
  • 學會建立並掛載 Volume
  • 了解 Container 與資料持久化的關係

為什麼 PostgreSQL 需要 Volume?

Day 8 已經介紹過 Docker Volume,今天要正式把它用在 PostgreSQL 上。

如果資料只存在 Container 的可寫層中,當 Container 被刪除時,裡面的資料也會跟著消失。

但資料庫通常會保存帳號、員工、訂單等重要資料,因此不能因為重新建立 Container 就全部不見。

這時就可以利用 Volume 將資料獨立保存。

PostgreSQL Container
        │
        ↓
   Docker Volume
        │
        ↓
    資料持續保存

建立 PostgreSQL Volume

首先建立一個新的 Volume:

docker volume create postgres-data

接著查看目前的 Volume:

docker volume ls

如果看到:

postgres-data

就代表建立成功。


將 Volume 掛載到 PostgreSQL

接著建立 PostgreSQL Container,並加入 Volume:

docker run --name my-postgres -e POSTGRES_PASSWORD=123456 -p 5432:5432 -v postgres-data:/var/lib/postgresql/data -d postgres

其中最重要的是:

-v postgres-data:/var/lib/postgresql/data

可以拆成:

postgres-data
      ↓
Docker Volume

/var/lib/postgresql/data
      ↓
PostgreSQL Container 的資料目錄

PostgreSQL 產生的資料就會保存到 Volume 中。


確認 Volume 是否掛載

可以使用:

docker inspect my-postgres

查看 Container 的詳細資訊。

在 Mounts 中可以找到類似:

Source:postgres-data
Destination:/var/lib/postgresql/data

代表 Volume 已經成功掛載到 PostgreSQL。


刪除 Container,資料還在嗎?

這也是今天最重要的實驗。

先停止並刪除 Container:

docker stop my-postgres
docker rm my-postgres

再查看 Volume:

docker volume ls

會發現:

postgres-data

依然存在。

這代表:

刪除 Container
      ≠
刪除 Volume

之後只要建立新的 PostgreSQL Container,並重新掛載同一個 Volume,就可以繼續使用原本保存的資料。


Container 與 Volume 的關係

可以把今天的概念整理成:

Container
   │
   │ 可以刪除
   ↓
PostgreSQL
   │
   ↓
Volume
   │
   │ 獨立保存
   ↓
資料仍然存在

這也是為什麼在使用 Docker 執行資料庫時,Volume 是非常重要的一部分。


常見錯誤與修正

  • ❌ PostgreSQL 沒有掛載 Volume → ✅ 使用 -v 保存資料
  • ❌ 把 Volume 路徑設定錯誤 → ✅ 確認 PostgreSQL Image 對應版本的資料目錄
  • ❌ 刪除 Container 後以為 Volume 也被刪除 → ✅ Volume 可以獨立存在
  • ❌ 隨意刪除 PostgreSQL Volume → ✅ 刪除前確認是否還有需要的資料

今日小挑戰(可交付)

  • [ ] 建立 postgres-data Volume
  • [ ] 使用 docker volume ls 查看 Volume
  • [ ] 將 Volume 掛載到 PostgreSQL
  • [ ] 使用 docker inspect 查看掛載資訊
  • [ ] 了解刪除 Container 與刪除 Volume 的差別

DAY16 心得

今天把之前學過的 Volume 真正應用到 PostgreSQL 上,也更能理解為什麼資料庫需要做資料持久化。

如果只是練習 Container,刪掉重新建立可能沒有太大影響,但資料庫裡通常會保存重要資料,如果資料跟著 Container 一起消失就會很麻煩。

透過 Volume,可以讓 PostgreSQL 的資料和 Container 分開保存。即使之後重新建立 Container,只要掛載原本的 Volume,就可以繼續使用資料。學到這裡,Docker 的 Container、Port、Volume 和 PostgreSQL 也開始真正串在一起了。


上一篇
Day 15 - PostgreSQL 環境變數:設定帳號、密碼與資料庫
系列文
Docker 新手村:從容器到 PostgreSQL 的實戰之路 共 16 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言