1. 程式人生 > 實用技巧 >(五)、Docker 容器資料卷

(五)、Docker 容器資料卷

1、什麼是資料卷
  • 將運用與執行的環境打包形成容器執行 ,執行可以伴隨著容器,但是我們對資料的要求希望是持久化的
  • 容器之間希望有可能共享資料

Docker容器產生的資料,如果不通過docker commit生成新的映象,使得資料做為映象的一部分儲存下來,
那麼當容器刪除後,資料自然也就沒有了。

為了能儲存資料在docker中我們使用卷。

卷就是目錄或檔案,存在於一個或多個容器中,由docker掛載到容器,但不屬於聯合檔案系統,因此能夠繞過Union File System提供一些用於持續儲存或共享資料的特性:

卷的設計目的就是資料的持久化,完全獨立於容器的生存週期,因此Docker不會在容器刪除時刪除其掛載的資料卷

特點:
1:資料卷可在容器之間共享或重用資料
2:卷中的更改可以直接生效
3:資料卷中的更改不會包含在映象的更新中
4:資料卷的生命週期一直持續到沒有容器使用它為止

2、容器新增資料卷
  1. 命令方式

docker run -it -v /宿主機絕對路徑目錄:/容器內目錄 映象名

#代表將宿主機/usr/local/src中資料掛載到容器中home目錄
docker run -it -v /usr/local/src/:/home cento
#home後:ro代表只讀
docker run -it -v /usr/local/src/:/home:ro cento

可以通過命令檢視資料卷是否掛載成功:docker inspect 容器ID

  1. Dockerfile方式

可在Dockerfile中使用VOLUME指令來給映象新增一個或多個數據卷

FROM centos
VOLUME ["/test1","/test2"]
CMD echo "hello world"
CMD /bin/bash

說明:

出於可移植和分享的考慮,用-v 主機目錄:容器目錄這種方法不能夠直接在Dockerfile中實現。
由於宿主機目錄是依賴於特定宿主機的,並不能夠保證在所有的宿主機上都存在這樣的特定目錄。

構建Dockerfile檔案

# -f 指定Dockerfile路徑 -t 新映象名稱
docker build -f /usr/local/src/Dockerfile -t centos-redis-01 .

構建成功後可以通過docker images檢視映象。

可以通過命令檢視資料卷是否掛載成功並且可以檢視具體對應test1,test2的宿主機目錄:docker inspect 容器ID

3、資料卷容器

命名的容器掛載資料卷,其它容器通過掛載這個(父容器)實現資料共享,掛載資料卷的容器,稱之為資料卷容器。

docker run -it --name centos-redis-02-vm --volumes-from centos-redis-01-vm  centos-redis-01
#代表centos-redis-02-vm共享centos-redis-01-vm 資料卷