在今天有關 Docker 的一系列材料的翻譯部分中,我們將討論如何處理數據。 特別是關於 Docker 卷。 在這些材料中,我們不斷地將 Docker 編程機制與各種可食用的類比進行比較。 我們不會在這裡背離這一傳統。 讓 Docker 中的數據成為調味品。 世界上有很多香料,Docker 有很多處理數據的方法。
→
→
→
→
→
→
請注意,本材料是使用 Docker 引擎版本 18.09.1 和 API 版本準備的
Docker 中的數據可以臨時存儲,也可以永久存儲。 讓我們從臨時數據開始。
臨時數據存儲
有兩種方法可以管理 Docker 容器中的臨時數據。
默認情況下,容器中運行的應用程序創建的文件存儲在可寫容器層中。 為了使該機制發揮作用,無需進行任何特殊配置。 事實證明,它既便宜又令人愉快。 應用程序只需要保存數據並繼續做自己的事情。 然而,當容器不復存在後,用這種簡單方式保存的數據也會消失。
Docker 中的臨時文件存儲是另一種解決方案,適用於與使用標準臨時數據存儲機制可實現的性能相比需要更高級別性能的情況。 如果您不需要將數據存儲的時間長於容器存在的時間,則可以連接到容器 tmpfs - 一種使用主機 RAM 的臨時信息存儲。 這將加快數據寫入和讀取操作的執行速度。
經常發生這樣的情況:即使容器不復存在,數據也需要存儲。 為此,我們需要持久的數據存儲機制。
持久數據存儲
有兩種方法可以使數據生命週期長於容器生命週期。 一種方法是使用綁定安裝技術。 例如,通過這種方法,您可以將現實文件夾掛載到容器中。 Docker 外部的進程也能夠使用存儲在此類文件夾中的數據。 這就是如何
掛載 tmpfs 並綁定掛載
使用綁定掛載技術的缺點是它的使用使數據備份、數據遷移、多個容器之間的數據共享變得複雜。 使用 Docker 捲進行持久數據存儲要好得多。
卷 Docker
卷是位於容器外部的主機上的文件系統。 卷由 Docker 創建和管理。 以下是 Docker 卷的主要屬性:
- 它們是永久存儲信息的一種手段。
- 它們是獨立的並且與容器分開。
- 它們可以在不同的容器之間共享。
- 它們允許您組織有效的數據讀取和寫入。
- 卷可以放置在遠程雲提供商的資源上。
- 它們可以被加密。
- 他們可以被命名。
- 容器可以安排用數據預先填充卷。
- 它們便於測試。
如您所見,Docker 卷具有驚人的屬性。 讓我們談談如何創建它們。
創建卷
可以使用 Docker 或 API 請求創建卷。
這是 Dockerfile 中的一條指令,允許您在啟動容器時創建卷。
VOLUME /my_volume
當使用類似的指令時,Docker在創建容器後,將創建一個卷,其中包含指定位置中已存在的數據。 請注意,如果您使用 Dockerfile 創建卷,這並不能免除您指定卷的安裝點的需要。
您還可以使用 JSON 格式在 Dockerfile 中創建卷。
此外,可以在容器運行時使用命令行工具創建卷。
從命令行使用卷
▍體積創建
您可以使用以下命令創建獨立卷:
docker volume create —-name my_volume
▍了解卷的信息
要查看 Docker 卷的列表,請使用以下命令:
docker volume ls
您可以像這樣探索特定卷:
docker volume inspect my_volume
▍刪除卷
您可以像這樣刪除卷:
docker volume rm my_volume
為了刪除容器未使用的所有捲,您可以使用以下命令:
docker volume prune
在刪除卷之前,Docker 會要求您確認此操作。
如果卷與容器關聯,則在刪除相應容器之前無法刪除該卷。 同時,即使容器被移除,Docker也並不總是理解這一點。 如果發生這種情況,您可以使用以下命令:
docker system prune
它旨在清理 Docker 資源。 執行此命令後,您應該能夠刪除之前狀態不正確的捲。
--mount 和 --volume 標誌
要使用卷,當您調用命令時 docker
,您經常需要使用標誌。 例如,要在容器創建期間創建卷,您可以使用以下構造:
docker container run --mount source=my_volume, target=/container/path/for/volume my_image
在古代(直到2017年),國旗很流行 --volume
。 最初,這個標誌(也可以縮寫形式使用,那麼它看起來像 -v
) 用於獨立容器,並且標誌 --mount
- 在 Docker Swarm 環境中。 然而,從 Docker 17.06 開始,該標誌 --mount
可以在任何場景下使用。
使用標誌時需要注意的是 --mount
必須在命令中指定的附加數據量會增加,但是,出於多種原因,最好使用此特定標誌,而不是 --volume
。 旗幟 --mount
是允許您使用服務或指定卷驅動程序選項的唯一機制。 此外,該標誌更易於使用。
在現有的Docker數據操作命令示例中,可以看到很多使用flag的例子 -v
。 當嘗試為自己調整這些命令時,請記住這些標誌 --mount
и --volume
使用不同的參數格式。 也就是說,你不能簡單地替換 -v
上 --mount
並組建一個工作團隊。
之間的主要區別 --mount
и --volume
就是當使用標誌時 --volume
所有參數都收集在一個字段中,並且在使用時 --mount
參數是分開的。
當與 --mount
參數表示為鍵值對,即,它看起來像 key=value
。 這些對以逗號分隔。 以下是常用的選項 --mount
:
type
— 安裝類型。 對應鍵的值可以是綁定 ,體積 或臨時文件系統 。 我們這裡談論的是數量,也就是說,我們感興趣的是價值volume
.source
- 安裝源。 對於命名卷,這是卷的名稱。 對於未命名卷,未指定此鍵。 它可以縮短為src
.destination
- 文件或文件夾在容器中安裝的路徑。 該鍵可以縮短為dst
或target
.readonly
- 安裝所需的捲僅用於閱讀 。 該鍵的使用是可選的,並且沒有為其分配任何值。
這是一個用法示例 --mount
有很多選擇:
docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_image
結果
以下是使用 Docker 卷時可以使用的一些有用命令:
docker volume create
docker volume ls
docker volume inspect
docker volume rm
docker volume prune
以下是常用選項的列表 --mount
,適用於以下形式的命令 docker run --mount my_options my_image
:
type=volume
source=volume_name
destination=/path/in/container
readonly
現在我們已經完成了這個 Docker 系列,是時候談談 Docker 學習者下一步可以去哪裡了。
親愛的讀者! 您會推薦哪些 Docker 材料供初學者學習?
來源: www.habr.com