Docker容器数据卷

什么是Volume?

使用容器数据卷,数据可以存储到宿主主机磁盘上;实现数据持久化、数据共享!

特点

  • 数据卷可在容器之间共享或重用数据
  • 卷中的更改可以直接生效
  • 数据卷中的更改不会包含在镜像的更新中
  • 数据卷的生命周期一直持续到没有容器使用它为止

如何使用数据卷

一、命令行挂载

1、路径挂载

docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口
# -it 交互式进入
# -v volume卷技术
# -p 主机端口

这个命令会在宿主机和容器内分别建立两个目录,两个目录是对接的,里面的数据可以共享。如果我们不知道数据卷是否挂载成功时,我们可以通过以下方式来检查数据卷的挂载结果。

docker inspect  容器id

上面的命令可以查看容器的详细情况,命令返回的是JSON格式的字符串,运行命令之后我们在返回的JSON字符串中找到Volumes属性,假如挂载成功的话,Volumes里面显示的绑定结果应该是你在挂载时输入的命令参数 (/宿主机绝对路径目录:  /容器内目录 ),如果与你们之前输入的一致的话,证明挂载成功。

Volumes里面显示的绑定结果可能有多个,但是只要找到目标结果就可以。挂载之后,当容器停止运行的时候,宿主机上对数据卷做的内容修改是会同步到容器内的。

2、匿名挂载

docker run -d -P --name tomcat01 -v /usr/local/tomcat/webapps tomcat02:1.0
# 通过 -v 容器内路径

上面就是匿名挂载,只写了 -v 就只关联容器内的路径,没有写容器外的路径!

3、具名挂载

docker run -d -P --name tomcat02 -v juming-tomcat:/usr/local/tomcat/webapps tomcat02:1.0
# 通过 -v 卷名:容器内路径

小结

如何确定是具名挂载还是匿名挂载,还是指定路径挂载?

-v 容器内路径                   # 匿名挂载
-v 卷名:容器内路径              # 具名挂载
-v /宿主主机路径:/容器内路径    # 路径挂载

如何查看已挂载的卷列表:

docker volume ls

拓展

通过 -v 容器路径: ro rw 可以改变读写权限

命令诠释描述
roreadonly只读,只能通过宿主主机来改变数据,容器内部是无法改变数据的
rwreadwrite可读可写,容器有权限操作读写

至于只写的话我们一般不会用到,要么就是读写,要么就是只读,而且我们可以通过docker inspect 来查看容器的volumesRW来查看容器内数据卷的读写权限。

二、DockerFile添加

DockerFile就是用来构建 docker 镜像的构建文件!

通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!

CMD echo "----start----"

FORM centos

VOLUME ["volume01","volume02"]

CMD echo "----end----"

CMD /bin/bash

生成镜像文件docker命令

docker build -f /home/docker/docker-file/docker-file-01 -t joila/centos:1.0 .

启动前面打包的的镜像

上述的两个卷,和外部一定有关联的同步目录!

查看卷挂载的路径

测试在容器关联的映射卷(volume01)内添加文件,宿主主机是否有映射到关联的文件:

宿主主机:

这种方式在未来,使用的会越来越多,因为我们通常会构建自己的镜像!

假设构建镜像时候没有挂载卷,那就要手动镜像挂载 -v 卷名:容器内路径!

更多DockerFile操作,请参考:点我跳转

多容器如何共用数据卷?

一、关键选项命令

--volumes-from

二、示例

启动基础的容器

docker run -it --name docker01 joila/centos:1.0

启动第二个容器,关联第一个基础容器的数据卷

docker run -it --name docker02 --volumes-from docker01 joila/centos:1.0

此时,我们在docker01容器或者docker02容器中任意添加文件,都会同时操作同一个容器数据卷;其核心操作命令就是 –volumes-from 实现两边数据卷数据同步!

注意:若是此时删除了docker01容器docker02容器还是继续操作数据卷的!

总结:

容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。

Dockerdocker volumedockerfilevolume
暂无评论

发送评论 编辑评论


				
上一篇
下一篇