Docker 容器数据卷
- 前提
Docker容器产生的数据,如果不通过docker commit生成新的镜像,使数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。
为了能保存数据在docker中我们使用卷。目的就是为了让容器内的数据吃持久化.
- 数据卷的介绍
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
特点:
- 数据卷可在容器之间共享或重用数据
- 卷中的更改可以直接生效
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
- 容器内添加数据卷
方法一: 使用 -v 命令
# 双向读写权限 docker run -it -v /宿主机目录:/容器内目录 镜像名称 # 宿主机可读写,容器只读 docker run -it -v /宿主机目录:/容器内目录:ro 镜像名称
效果 :
先在宿主机创建
host_share目录
# 执行命令 docker run -it -v /宿主机目录:/容器内目录 镜像名称 docker run -it -v /host_share:/container_share centos
进入容器内部,发现container_share文件夹成功创建
按Ctrl+P+Q暂时退出容器(容器不关闭)
检查数据卷是否挂载成功
# 查看容器内部信息 docker inspect 容器ID
测试数据是否共享
测试容器停止后,主机修改的数据是否同步
- 方法二: 使用DockerFile添加
出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。
由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。下面介绍使用 DockerFile 添加数据卷
宿主机根目录下新建mydocker并进入,新建一个mydockerfile文件,编辑
FROM centos VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finished,--------success!" CMD /bin/bash
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]通过这种方法可以在容器中添加多个数据卷,对应的宿主机共享地址会默认设置
使用build命令将当前的 mydockerfile 生成镜像
# docker build -f DockerFIle绝对路径 -t 命名空间/镜像名称 . # 注意 . 不要忘了 docker build -f /mydocker/mydockerfile -t moti/centos .
运行容器并进入,发现两个数据卷目录已经成功创建
Ctrl+P+Q暂时退出(不停止容器),使用docker inspect 容器ID查看数据卷的相关信息
红框勾选的就是在宿主机的对应路径
测试数据共享是否实现
- 数据卷容器
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器
容器之间传递数据共享
先创建一个容器c1,在dataVolumeContainer1添加共享数据c1.txt
创建容器c2继承自c1,查看 dataVolumeContainer1 里面的文件,并在 dataVolumeContainer1 中添加c2.txt
创建容器c3继承自c1,查看 dataVolumeContainer1 里面的文件,并在 dataVolumeContainer1 中添加c3.txt
删除c1容器,查看c2和c3中的文件是否有变化(原来有c1.txt c2.txt c3.txt共三个文件)
可以发现,c1删除,对c2,c3是不影响的,那么c2与c3会不会共享文件?
可以看到,尽管c1删除了但是c2和c3仍然是数据共享的,那么删除c2,查看c3的数据有没有什么变化
结论:容器之间配置信息的传递,数据卷的生命周期会一直持续到没有容器使用它为止
- Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)
- Docker数据持久化与容器迁移
- Docker容器学习梳理--Volume数据卷使用
- Docker 在容器中存储数据 - 使用 Device Mapper 存储驱动程序
- docker学习(三)容器数据卷,dockerfile解析
- docker对数据卷容器进行备份
- Docker 数据卷,数据卷容器详细介绍
- Docker官方论坛中回复最多的一个帖子“在数据容器内升级数据”
- Docker 05 - 容器数据卷
- Docker数据持久化与容器迁移
- Docker-数据卷和数据容器卷
- docker创建数据卷以及数据卷容器
- Docker跨主机容器互传数据问题及解决方法
- Docker容器中的数据如何进行管理?
- docker容器的数据卷以及使用方式
- 实例解析Docker数据卷+数据卷容器+flocker数据共享+DockerHub操作
- Docker 数据卷及数据容器详细介绍及示例
- Docker容器、镜像、数据卷
- Docker学习笔记-数据卷、数据卷容器