保存容器資料

說明

當容器啟動時,它會使用映像檔提供的檔案和設定。每個容器都能夠建立、修改和刪除檔案,而且不會影響其他容器。刪除容器時,這些檔案變更也會被刪除。

雖然容器的這種暫時性很好,但當您想要保存資料時,這就構成了一個挑戰。例如,如果您重新啟動資料庫容器,您可能不想從空的資料庫開始。那麼,您如何保存檔案呢?

容器磁碟區

磁碟區是一種儲存機制,它能夠將資料保存到個別容器的生命週期之外。可以將其想像成提供從容器內部到容器外部的捷徑或符號連結。

例如,假設您建立了一個名為 `log-data` 的磁碟區。

$ docker volume create log-data

使用以下命令啟動容器時,磁碟區將會掛載(或附加)到容器中的 `/logs`

$ docker run -d -p 80:80 -v log-data:/logs docker/welcome-to-docker

如果 `log-data` 磁碟區不存在,Docker 會自動為您建立它。

當容器運行時,它寫入 `/logs` 資料夾的所有檔案都會儲存在這個磁碟區中,位於容器外部。如果您刪除容器並使用相同的磁碟區啟動新的容器,檔案仍然會存在。

使用磁碟區共用檔案

您可以將同一個磁碟區附加到多個容器,以便在容器之間共用檔案。這在日誌聚合、資料管道或其他事件驅動的應用程式等情況下可能很有用。

管理磁碟區

磁碟區具有超出容器的生命週期,並且可以根據您使用的資料和應用程式的類型而變得相當大。以下命令將有助於管理磁碟區

  • `docker volume ls` - 列出所有磁碟區
  • `docker volume rm <磁碟區名稱或 ID>` - 移除磁碟區(僅在磁碟區未附加到任何容器時才有效)
  • `docker volume prune` - 移除所有未使用的(未附加的)磁碟區

試用看看

在本指南中,您將練習建立和使用磁碟區來保存 Postgres 容器建立的資料。當資料庫運行時,它會將檔案儲存在 `/var/lib/postgresql/data` 目錄中。透過將磁碟區附加到這裡,您將能夠在保留資料的同時多次重新啟動容器。

使用磁碟區

  1. 下載並安裝 Docker Desktop。

  2. 使用 Postgres 映像檔

這將會在背景啟動資料庫,使用密碼進行設定,並將磁碟區附加到 PostgreSQL 將保存資料庫檔案的目錄。

  • 使用以下命令連線到資料庫

  • 在 PostgreSQL 命令列中,執行以下命令來建立資料庫表格並插入兩筆記錄

  • 透過在 PostgreSQL 命令列中執行以下命令來驗證資料是否在資料庫中

    您應該會看到如下所示的輸出

  • 執行以下命令以結束 PostgreSQL 殼層

  • 停止並移除資料庫容器。請記住,即使容器已刪除,資料仍會保存在 `postgres_data` 磁碟區中。

  • 透過執行以下命令來啟動新的容器,並附加具有保存資料的相同磁碟區

    您可能已經注意到 `POSTGRES_PASSWORD` 環境變數已被省略。這是因為該變數僅在初始化新的資料庫時使用。

  • 透過執行以下命令來驗證資料庫是否仍然具有記錄

  • 檢視磁碟區內容

    Docker Desktop 儀表板提供了檢視任何磁碟區內容的功能,以及匯出、匯入和複製磁碟區的功能。

    1. 開啟 Docker Desktop 儀表板並瀏覽至「磁碟區」視圖。在此視圖中,您應該會看到 **postgres_data** 磁碟區。

    2. 選擇 **postgres_data** 磁碟區的名稱。

    3. 「資料」索引標籤會顯示磁碟區的內容,並提供瀏覽檔案的功能。雙擊檔案即可檢視內容並進行變更。

    4. 在任何檔案上按一下滑鼠右鍵即可儲存或刪除它。

    移除磁碟區

    在移除磁碟區之前,它不得附加到任何容器。如果您尚未移除先前的容器,請使用以下命令執行此操作(`-f` 將先停止容器,然後再移除它)

    $ docker rm -f new-db
    

    有幾種方法可以移除磁碟區,包括以下方法

    其他資源

    以下資源將協助您瞭解更多關於磁碟區的資訊

    後續步驟

    現在您已經瞭解了如何保存容器資料,接下來該瞭解如何與容器共用本機檔案。