Docker数据卷
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 |