数据卷:数据卷就是在宿主中可以在容器之间进行共享和重用的一系列和文件和文件夹,通过docker run -v命令可以将数据卷挂载到对应的容器目录空间,进行文件读取,容器卷特性如下
- 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效方便
- 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作
- 对数据卷的更新不会影响镜像,解耦了应用和数据
- 卷会一直存在,直到没有容器使用,可以安全地卸载它
数据卷容器:接数据卷,已经存在一个挂载了数据卷的容器;由于数据卷在容器之前是可以共享的,所以此时如果存在其他容器通过docker run --volumes-from [容器别名]命令挂载到该容器上,则该容器可以被称之为数据卷容器,其主要功能是提供数据卷供其他容器挂载。当数据卷容器宕机后,并不会造成数据卷的回收卸载,数据卷会继续挂载在其他容器中。当全部挂载该数据卷的容器全部宕机后,该数据卷才会卸载
添加数据卷
添加数据卷 docker run -it -v /宿主机据对路径/容器内目录 镜像名
docker run -it -v /mydataVolume:/dockerVolume centos
在宿主机上访问mydataVolume文件夹添加文件直接会同步到容器的dockerVolume文件夹中,反之一样的效果,当docker运行退出关闭,再向宿主 mydataVolume添加文件,当docker 重新启动,数据会同步
添加数据卷带权限(只读read only )docker run -it -v /宿主机据对路径/容器内目录 ro 镜像名
docker run -it -v /mydataVolume:/dockerVolume:ro centos
宿主机添加文件能同步到docker内,但是docker内不能编辑文件,只允许单项操作
新建镜像添加数据卷
新建镜像参数
#volume test
FROM centos
VOLUME ["/dataVolumeContainer1",”/dataVolumeContainer2"]
CMD echo "finished,--------------------success1"
CMD /bin/bash
新建镜像命令docker build -f(指定要使用的Dockerfile路径)dockerfile -t(--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。)
docker build -f /root/dockerfile/Dockerfile -t stonehu/centos:1.2 .
查看数据卷
在docker数据卷内添加文件,查看本地宿主机,文件是否存在
或者可以用以下命令查询
docker inspect -f {{.ContainerConfig.Volumes}} stonehu/centos:1.2
容器间数据共享—volumes-from
运行容器起名为dc01,在数据卷中添加文件,用ctrl+p+q退出dc01,运行第二容器采用—volumes-from dc01 链接第二个容器,使容器中的数据卷互通
docker run -it --name dc01 stonehu/centos:1.2
docker run -it --name dc02 --volumes-from dc01 stonehu/centos:1.2
验证数据共享
docker attach dc02
删除其中一个docker其他docker的数据卷依然存在依然可以操作建立
删除dc01,查看其它dc02 dc03数据卷是否存在,经过验证都在,其实数据卷内数据是存在宿主记得本地的
来源:oschina
链接:https://my.oschina.net/u/4315672/blog/4658970