Docker的容器数据卷

Posted @Kerry~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker的容器数据卷相关的知识,希望对你有一定的参考价值。

什么是数据卷?

容器运行过程中会产生相关数据,为了避免在 停止/删除 容器时造成数据丢失,需要实现数据持久化存储,需要把宿主机目录挂载到容器里面,实现数据共享并且存储。

简单来说:把宿主机中的某几个目录挂载到容器中,目的是:实现数据持久化存储以及数据备份,实现数据共享。

类似于Redis中的rdb和aof文件

主要特点哪些?(能干什么)

数据卷的设计目的就在于:数据持久化,完全独立于容器的生存周期,因此Docker 不会在容器删除时删除其挂载的数据卷,这样就实现了数据持久化。

数据卷作用:

  1. 数据持久化
  2. 数据共享、容器继承

主要特点:

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

创建数据卷的方式

方式一:直接命令添加

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形式添加

  1. 在宿主机目录下面创建mydocker并且进入
  2. 创建一个Dockerfile 文件 并且写入一个VOLUME指令来给镜像添加一个或多个数据卷
  3. Dockerfile的构建
  4. 使用build生成镜像
  5. 运行容器
  6. 使用命令docker inspect 容器ID 查看挂载目录
  7. 测试数据共享以及存储
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的容器数据卷的主要内容,如果未能解决你的问题,请参考以下文章

Docker学习笔记(8-2)Docker - 数据卷容器

docker数据卷容器

Docker 数据卷

docker数据卷容器

Docker之七:Docker数据卷管理

06-Docker-容器数据卷