1.容器數據卷簡介 docker
一句話:有點相似咱們Redis裏面的rdb和aof文件vim
2.容器數據卷做用centos
容器的持久化bash
容器間繼承+共享數據ui
3.數據卷使用spa
[1].使用命令方式添加3d
(1).容器添加blog
語法:docker run -it -v /宿主機絕對路徑目錄:/容器內目錄 鏡像名繼承
[root@pluto /]# docker run -it -v /myDataVolume:/dataVolumeContainer centos:6.8ci |
(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 |