docker基礎之數據管理

數據管理

容器中的管理數據主要有兩種方式:

  1. 數據卷:容器內數據直接映射到本地主機環境。
  2. 數據卷容器:使用特定容器維護數據卷。

數據卷

數據卷是一個可供容器使用的特殊目錄,它將主機操作系統目錄直接映射進容器,類似於Linux中的mount行爲。

數據卷提供的特性:

  1. 數據卷可以在容器之間共享和重用,容器間傳遞數據將變得高效與方便。
  2. 對數據卷內數據的修改會立馬生效,無論是容器內操作還是本地操作。
  3. 對數據卷的更新不會影響鏡像,解耦開應用和數據。
  4. 數據卷會一直存在,直到沒有容器使用,可以安全地卸載它。

操作數據卷常用命令

docker提供volume子命令來管理數據卷。

  • 創建一個本地數據卷,名字叫test
docker volume create -d local test

可以在本地/var/lib/docker/volumes查看創建的數據卷

  • 查看數據卷詳細信息
docker volume inspect (數據卷名稱/id)
  • 列出已有數據卷
docker volume ls
  • 清理無用數據卷
docker volume prune
  • 刪除數據卷
docker volume rm (數據卷名稱/id)

默認情況下,刪除容器時不會刪除數據卷,如果需要在刪除容器的同時移除數據卷。可以在刪除容器的時候使用 docker rm -v 這個命令。

  • 啓動一個掛載數據卷的容器

使用-v指令可以指定掛載一個本地的已有目錄映射到容器中去作爲數據卷

$ docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py

-v指令語法解析:-v [HOST-DIR]:CONTAINER-DIR[:OPTIONS] 表示將本地HOST-DIR目錄掛載到容器內的CONTAINER-DIR目錄,OPTIONS表示數據卷屬性,默認是可讀寫(rw)。

綁定數據卷

在創建容器時,將主機本地的任意路徑掛載到容器內作爲數據卷,這種形式創建的數據卷稱爲綁定數據卷。

在用docker run命令的時候,可以使用-mount選項來使用數據卷。

-mount選項支持三種類型的數據卷,包括:

  • volume:普通數據卷,映射到主機/var/lib/docker/volumes路徑下;
  • bind:綁定數據卷,映射到主機指定路徑下;
  • tmpfs:臨時數據卷,只存在於內存中。

例子:

使用training/webapp鏡像創建一個web容器,並創建一個數據卷掛載到容器的/opt/weball目錄下:

docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp trainging/webapp python app.py

上述命令等價於使用舊的-v標記可以在容器內創建一個數據卷:

docker run -d -P --name web -v /webapp:/opt/webapp trainging/webapp python app.py

–mount和-v指令的區別是:以前使用 -v 參數時如果本地目錄不存在 Docker 會自動爲你創建一個文件夾,現在使用 --mount 參數時如果本地目錄不存在,Docker 會報錯。

Docker掛載數據卷的默認權限是讀寫(rw),用戶可以通過ro指定爲只讀:

docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp:ro trainging/webapp python app.py

加了:ro後,容器內對所掛載數據卷內的數據就無法修改了。

注意:本地目錄的路徑必須是絕對路徑,容器內路徑可以爲相對路徑。

推薦直接掛載文件所在的目錄到容器內,而不是直接掛載一個文件到容器。

數據卷容器

如果用戶在多個容器之間共享一些持續更新的數據,最簡單的方式是使用數據卷容器。數據卷容器也是一個容器,但是它的目的是專門提供數據卷給其他容器掛載。

首先,創建一個數據卷容器dbdata,並在其中創建一個數據卷掛載到容器內/dbdata:

docker run -it -v /dbdata --name test ubuntu

然後可以在其他容器中使用--volumes-from來掛載test容器中的數據卷.

例如創建db1和db2兩個容器,並從test容器掛載數據卷:

docker run -it --volumes-from test --name db1 ubuntu
docker run -it --volumes-from test --name db2 ubuntu

此時,容器db1和db2都掛載同一個數據捲到相同的/dbdata目錄,三個容器任何一方在該目錄下的寫入,其他容器都可以看到。

注意:

  • 如果刪除了掛載的容器,數據卷並不會被自動刪除。
  • 使用–volumes-from參數所掛載數據卷的容器自身並不需要保持在運行狀態。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章