Docker的容器数据卷
Posted @Kerry~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker的容器数据卷相关的知识,希望对你有一定的参考价值。
什么是数据卷?
容器运行过程中会产生相关数据,为了避免在 停止/删除 容器时造成数据丢失,需要实现数据持久化存储,需要把宿主机目录挂载到容器里面,实现数据共享并且存储。
简单来说:把宿主机中的某几个目录挂载到容器中,目的是:实现数据持久化存储以及数据备份,实现数据共享。
类似于Redis中的rdb和aof文件
主要特点哪些?(能干什么)
数据卷的设计目的就在于:数据持久化,完全独立于容器的生存周期,因此Docker 不会在容器删除时删除其挂载的数据卷,这样就实现了数据持久化。
数据卷作用:
- 数据持久化
- 数据共享、容器继承
主要特点:
- 数据卷可在容器之间共享或者共用数据
- 数据卷中的更改可以直接生效
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
- 数据卷中的数据不会因为容器的删除而丢失
创建数据卷的方式
方式一:直接命令添加
docker run -it -v /宿主机绝对路径目录:/容器中目录 (必须为绝对路径)镜像ID / 镜像名称
先在宿主机创建一个名为:myDatavolumn目录
mkdir myDatavolumn
运行命令:
docker run -it -v /myDatavolumn:/myContainerVolumn --name="mycentos03" centos
这个时候容器会创建一个目录为myContainerVolumn
docker inspect 容器ID 可以查看挂载相关信息
"HostConfig": { "Binds": [ "/Users/xiemingbao/myDatavolumn:/myContainerVolumn" ] } "Mounts": [ { "Type": "bind", "Source": "/Users/xiemingbao/myDatavolumn", "Destination": "/myContainerVolumn", "Mode": "", "RW": true, "Propagation": "rprivate" } ]
HostConfing 的Binds 代表绑定成功了!
RW:true 表示容器有度写的宿主机权限,如果为false表示只有读权限,不能写入任何宿主机权限。
如果需要变false 运行时 宿主机:容器目录:or 在后面添加 :or 参数即可
方式二:DockerFile形式添加
- 在宿主机目录下面创建mydocker并且进入
- 创建一个Dockerfile 文件 并且写入一个VOLUME指令来给镜像添加一个或多个数据卷
- Dockerfile的构建
- 使用build生成镜像
- 运行容器
- 使用命令docker inspect 容器ID 查看挂载目录
- 测试数据共享以及存储
1、创建目录 mkdir /mydocker 2、进入目录 cd ./mydocker 3、构建Dockerfile文件并且写入VOLUME命令 vim Dockerfile #volume test FROM centos VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finished,------success1" CMD /bin/bash 命令解释 FROM centos 来源于centos镜像 VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] 表示在镜像根目录下面创建两个挂载目录 CMD echo "finished,------success1" 输出成功标识 CMD /bin/bash 执行命令 5、运行build命令、生成新的镜像 docker build -f Dockerfile文件绝对路径()-t 你自定义的镜像名称 . (这个点必然加) docker build -f /Users/xiemingbao/mydocker/Dockerfile -t ymb/centos . 6、运行容器 docker run -it 你自定义的镜像名称 这会就看到了容器里面存在两个挂载目录了 7、查看宿主机对于目录默认地址 docker inspect 容器ID 如下图红色标记路径
Dockerfile默认挂载到宿主机的目录
以上是关于Docker的容器数据卷的主要内容,如果未能解决你的问题,请参考以下文章