1.容器資料卷簡介
一句話:有點類似我們Redis裡面的rdb和aof檔案
2.容器資料卷作用
容器的持久化
容器間繼承+共享資料
3.資料卷使用
[1].使用命令方式新增
(1).容器新增
語法:docker run -it -v /宿主機絕對路徑目錄:/容器內目錄 映象名
[root@pluto /]# docker run -it -v /myDataVolume:/dataVolumeContainer centos:6.8 |
(2).檢視資料卷是否掛載成功
語法:docker inspect 容器ID
[root@pluto /]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 04bd9add86e3 centos:6.8 "/bin/bash" 4 minutes ago Up 4 minutes angry_payne [root@pluto /]# docker inspect 04bd9add86e3 |
(3).容器和宿主機之間資料共享
(4).容器停止退出後,主機修改後資料是否同步
(5).僅讀
語法:docker run -it -v /宿主機絕對路徑目錄:/容器內目錄:ro 映象名
[2].DockerFile新增
(1).在主機建立目錄
根目錄下新建mydocker資料夾並進入
[root@pluto /]# mkdir /mydocker [root@pluto /]# cd mydocker/ |
(2).File構建
語法:VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
說明:
出於可移植和分享的考慮,用-v 主機目錄:容器目錄這種方法不能夠直接在Dockerfile中實現。
由於宿主機目錄是依賴於特定宿主機的,並不能夠保證在所有的宿主機上都存在這樣的特定目錄。
可在Dockerfile中使用VOLUME指令來給映象新增一個或多個資料卷
[root@pluto mydocker]# pwd /mydocker [root@pluto mydocker]# vim Dockerfile
# volume test FROM centos:centos6.8 VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finished,--------success1" CMD /bin/bash |
因為本機系統是centos6.8,所以如果不指定可能會出現"FATAL: kernel too old"的情況
(3).build
build後生成映象,獲得一個新映象pluto/centos
[root@pluto mydocker]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos 6.8 efa3cf7ee1f9 17 months ago 194.5 MB [root@pluto mydocker]# docker build -f /mydocker/Dockerfile -t pluto/centos . |
(4).run容器
[root@pluto mydocker]# docker run -it pluto/centos |
(5).容器卷目錄
找到容器內的卷目錄地址對應的主機目錄地址
[root@pluto /]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a7e8f6f016b4 pluto/centos "/bin/sh -c /bin/bas 46 minutes ago Up 46 minutes modest_morse [root@pluto /]# docker inspect pluto/centos |
如果出現"cannot open directory"的錯誤
Docker掛載主機目錄Docker訪問出現cannot open directory .: Permission denied 解決辦法:在掛載目錄後多加一個--privileged=true引數即可 |
4.資料卷容器
命名的容器掛載資料卷,其它容器通過掛載這個(父容器)實現資料共享,掛載資料卷的容器,稱之為資料卷容器
Docker run -it --name mydocker1 pluto/cetos |