> 文章列表 > Docker容器数据卷

Docker容器数据卷

Docker容器数据卷

文章目录

      • Docker容器数据卷是什么
      • Docker容器数据卷能干什么
      • Docker容器卷和宿主机互联
        • 实例操作
      • Docker容器卷的继承和共享

Docker容器数据卷是什么

先来看看Docker的理念:

  • 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的。
  • 容器之间希望有可能共享数据。

Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。

为了能保存数据在docker中我们使用卷。(一句话:就是想在docker和宿主机之间实现数据共享,数据持久化。类似于redis中的RDB、AOF)

Docker容器数据卷能干什么

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。(实现容器的持久化、容器之间的继承 + 数据共享)

特点:

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

Docker容器卷和宿主机互联

可以将docker容器中的数据保存到宿主机的磁盘中如下

docker run -it --privileged=true -v 宿主机绝对路经目录:/容器内目录 镜像名      (默认可读可写)
docker run -it --privileged=true -v 宿主机绝对路经目录:/容器内目录:ro 镜像名   (只能可读)  ro:read only
docker run -it --privileged=true -v 宿主机绝对路经目录:/容器内目录:wo 镜像名   (只能可写)  wo:write only

参数解释:

--privileged=true:打开root的权限    -v:可以指定多个路径 (表示绑定一组路径)

例1:

sudo docker run -it --privileged=true --name=u1 -v /tmp/host1_data:/tmp/docker1_data ubuntu /bin/bash

说明:如果宿主机和docker中没有指定的各自的文件夹,执行命令后会自动创建相应的文件夹。

运行一个带容器卷存储功能的容器实例的特点:

  • 数据卷可在容器之间共享或重用数据
  • 卷中的更改可以直接生效。爽(实时)
  • 数据卷中的更改不会包含在镜像的更新中
  • 数据卷的生命周期一直此需要没有容器使用它为止

实例操作

  • 创建一个名字为u1的,带容器卷存储功能的容器实例
sudo docker run -it --privileged=true --name=u1 -v /tmp/host_data:/tmp/docker_data ubuntu /bin/bash

Docker容器数据卷
从上图可以看到进入到了新创建的容器中

  • 进入到容器中/tmp/docker_data目录下创建一个文档
cd /tmp/docker_data  #进入到目标目录
touch docker.txt     #创建名为docker.txt的文件
  • 进入到宿主机/tmp/host_data目录下查看
cd /tmp/host_data   #进入到目标目录
ll                  #在该目录下查看文件

Docker容器数据卷
可以看到在在容器中创建的docker.txt同步到了宿主机的/tmp/host_data文件夹中;
同理,在宿主机该文件夹中创建host.txt文件,也会同步到容器的/tmp/docker_data文件夹中,下图进行验证

创建host.txt文件:
Docker容器数据卷
在容器中查看:
Docker容器数据卷
从上图可以看到在宿主机创建的文件也同步到了容器中。

Docker容器卷的继承和共享

docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu

创建了一个名为u2的容器,并且共享u1的容器数据卷,如下图所示
在创建u2容器后直接进入/tmp/docker_data文件夹,可以看到和容器u1中数据卷的数据相同,达到继承和共享的目的。
Docker容器数据卷
以上如有错误欢迎指正,如果帮到您请点赞加收藏哦!