1. 程式人生 > 其它 >第5章 Docker容器資料卷

第5章 Docker容器資料卷

1.1 是什麼

先來看看Docker的理念:
*  將運用與執行的環境打包形成容器執行 ,執行可以伴隨著容器,但是我們對資料的要求希望是持久化的
*  容器之間希望有可能共享資料
 
 
Docker容器產生的資料,如果不通過docker commit生成新的映象,使得資料做為映象的一部分儲存下來,
那麼當容器刪除後,資料自然也就沒有了。


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

一句話:有點類似我們Redis裡面的rdb和aof檔案

 

1.2 能幹嘛 

 
卷就是目錄或檔案,存在於一個或多個容器中,由docker掛載到容器,但不屬於聯合檔案系統,因此能夠繞過Union File System提供一些用於持續儲存或共享資料的特性:
 
 卷的設計目的就是資料的持久化,完全獨立於容器的生存週期,因此Docker不會在容器刪除時刪除其掛載的資料卷


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

● 容器的持久化

● 容器間繼承+共享資料

 

 

1.3 資料卷:容器內新增

1.3.1 直接命令新增

1.3.1.1 命令

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

1.3.1.2 檢視資料卷是否掛載成功

docker inspect 容器ID

1.3.1.3 容器和宿主機之間資料共享

1.3.1.4 容器停止退出後,主機修改後資料是否同步

1.3.1.5 命令(帶許可權)

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

 

1.3.2 DockerFile新增

1.3.2.1 根目錄下新建mydocker資料夾並進入

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

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

1.3.2.3 File構建

# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash

1.3.2.4 build後生成映象

獲得一個新映象zzyy/centos

1.3.2.5 run容器

1.3.2.6 通過上述步驟,容器內的卷目錄地址已經知道對應的主機目錄地址哪??

1.3.2.7 主機對應預設地址

 

1.3.3 備註

Docker掛載主機目錄Docker訪問出現cannot open directory .: Permission denied
解決辦法:在掛載目錄後多加一個--privileged=true引數即可

 

 

1.4 資料卷容器

1.4.1 是什麼

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

1.4.2 總體介紹

以上一步新建的映象zzyy/centos為模板並執行容器dc01/dc02/dc03

它們已經具有容器卷

● /dataVolumeContainer1

● /dataVolumeContainer2

1.4.3 容器間傳遞共享(--volumes-from)

1.4.3.1 先啟動一個父容器dc01:在dataVolumeContainer2新增內容

1.4.3.2 dc02/dc03繼承自dc01

--volumes-from

命令:docker run -it --name dc02 --volumes-from dc01 zzyy/centos

dc02/dc03分別在dataVolumeContainer2各自新增內容

1.4.3.3 回到dc01可以看到02/03各自新增的都能共享了

1.4.3.4 刪除dc01,dc02修改後dc03可否訪問

1.4.3.5 刪除dc02後dc03可否訪問,再進一步

1.4.3.6 新建dc04繼承dc03後再刪除dc03

1.4.3.7 結論:容器之間配置資訊的傳遞,資料卷的生命週期一直持續到沒有容器使用它為止