前言
这篇博文介绍的是Docker容器数据卷,关于这部分内容也许是我们学习和使用docker的核心知识。学习了这部分知识,我们就可以制作自己的将镜像,运行自己定制的容器,可以随自己的需要任意使用docker,实实在在的解决我们的工作痛点,提高我们的工作效率,这就是docker技术存在的意义。
有需要的同学可以了解一下这篇文章,谢谢。
是什么?
Docker的理念
- 将运用与运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求希望是持久化的
- 容器之间希望有可能共享数据
Docker容器产生的数据,如果不通过Docker commit生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了
为了能保存数据在docker中我们使用卷
一句话:有点类似我们redis里面的rdb和aof文件
能干嘛
- 容器的持久化
- 容器间继承+共享数据
卷就是目录或文件,存在于一个或多个容器中,有docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File system 提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂在的数据卷
- 数据卷可在容器之间共享或重用数据,也可以完成容器与主机之间的数据共享。
- 卷中的更改可以直接生效
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
docker cp 从容器内拷贝文件到主机上
数据卷(在容器内添加)
方式
- 直接命令添加
- DockerFile添加
直接命令添加
-
命令: docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
-
查看数据卷是否挂载成功
-
容器和宿主机之间数据共享
-
容器停止退出后,主机修改后数据是否同步
-
命令(带权限)
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
解释
- ro:只读
docker inspect 获取容器/镜像的元数据。
docker inspect是docker客户端的原生命令,用于查看docker对象的底层基础信息。包括容器的id、创建时间、运行状态、启动参数、目录挂载、网路配置等等。另外,该命令也可以用来查看docker镜像的信息。
docker inspect [OPTIONS] NAME|ID [NAME|ID…]
OPTIONS说明:
-f :指定返回值的模板文件。
-s :显示总的文件大小。
–type :为指定类型返回JSON。
# 查看redis:latest镜像信息
docker inspect --type=image redis
# 查看redis容器信息
docker inspect redis
- 1
- 2
- 3
- 4
- 5
DockerFile添加
-
根目录下新建mydocker文件夹并进入
-
可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
-
File构建
# volume test FROM centos VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finised,---------success1" CMD "/bin/bash"
- 1
- 2
- 3
- 4
- 5
翻译一下,大致是以下意思:
docker run -it -v /host1:/dataVolumeContainer1 -v /host2:/dataVolumeContainer2 /bin/bash
- 1
-
build后生成镜像:获得了一个新的镜像【zzyy/centos】
-
run容器
- 通过上述步骤,容器内的卷目录地址已经知道对应的主机目录地址哪??
- 主机对应默认地址
使用docker inspect [IMAGE_ID]
数据卷容器
是什么
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器
总体介绍
- 以上一步新建的镜像zzyy/centos为模板并运行容器dc01/dc02/dc03
- 它们已经具有容器卷:/dataVolumeContainer1和/dataVolumeContainer2
容器间传递共享(–volumes-from)
-
先启动一个父容器dc01:在dataVolumeContainer2新增内容
-
dc02/dc03继承dc01
–volumes-from :继承
命令:dc02/dc03分别在dataVolumeContainer2各自新增内容
-
回到dc01可以看到02/03各自添加的都能共享了
-
删除dc01,在dc02修改后dc03可否访问
可以访问,父容器dc01删除之后,子容器dc02和dc03也可以进行数据共享。 -
删除dc02后dc03可否访问 --可以访问
-
新建dc04继承dc03后再删除dc03 --可以访问
-
结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。
总结
欢迎点赞加关注,谢谢!!!!
文章来源: blog.csdn.net,作者:轻狂书生FS,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/LookForDream_/article/details/111190631