1、什么是容器数据卷?

先来看看Docker的作用:

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

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

2、容器数据卷

什么是容器数据卷?

Docker容器产生的数据,如果我们不通过docker commit命令来生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然就没有了。为了能保存数据在Docker中,我们使用卷。

容器数据卷的作用

可以完成容器到宿主主机、宿主主机到容器的双方向数据共享
特点

  • 数据卷可在容器之间共享或重用数据
  • 卷中的更改可以直接生效
  • 数据卷中的更改不会包含在镜像的更新中
  • 数据卷的生命周期一直持续到没有容器使用它为止
  • 卷的设计目的就是数据的持久化,完全独立于容器的生成周期,因此Docker不会在容器删除时删除其挂载的数据卷。

    数据卷的添加

  1. 在容器内部添加
  2. DockerFile添加
  3. 命令直接添加
  • 命令:docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
  • 执行以下命令: ```bash docker run -it -v /myDataVolume:/dataVolumeContain centos

直接运行项目

docker run -it —privileged=true -v /tmp/host_data:/tmp/docker_data —name v5 ubuntu

  1. 了解一下:--privileged = true的作用
  2. - 使用该参数,**container内的root拥有真正的root权限**。
  3. - 否则,container内的root只是外部的一个普通用户权限。
  4. - privileged启动的容器,可以看到很多host上的设备,并且可以执行mount
  5. - 甚至允许你在docker容器中启动docker容器。
  6. **查看是否添加成功**
  7. - 查看数据卷是否起作用:<br />docker inspect 镜像ID
  8. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/1278591/1651835313390-a8de932f-eb19-4676-8c32-9530b2aa9a4b.png#clientId=ubc37b367-ac67-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=148&id=ud6b04d28&margin=%5Bobject%20Object%5D&name=image.png&originHeight=277&originWidth=833&originalType=binary&ratio=1&rotation=0&showTitle=false&size=12376&status=done&style=none&taskId=u387fcd81-7144-41f8-814b-7f4b9892774&title=&width=444.26666666666665)
  9. <a name="oWuc5"></a>
  10. #### 容器和宿主机之间数据共享
  11. 1. 容器到宿主机
  12. 1. 当容器stop的时候,重启容器,数据任然会同步到容器中;
  13. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/1278591/1651835952659-50d98ac2-ccfe-4168-ae0f-e15b3d4c0776.png#clientId=ubc37b367-ac67-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=367&id=u2a69038b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=688&originWidth=1621&originalType=binary&ratio=1&rotation=0&showTitle=false&size=60110&status=done&style=none&taskId=u963816e3-6fc8-4a81-91c7-2a75f14dba1&title=&width=864.5333333333333)<br />容器停止退出后,主机修改后数据是否可以同步到容器?答案:可以
  14. <a name="CMI7w"></a>
  15. #### 容器数据限制设置(带权限)
  16. 命令:这个只是限制容器内部,宿主机是不能够限制的
  17. ```bash
  18. docker run -it --privileged = true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名(容器内readonly,只读,不可写)

执行以下命令:

docker run -it --privileged = true -v /myDataVolume:/dataVolumeContain:ro centos

查看数据卷是否起作用:
docker inspect 镜像ID
Docker容器数据卷 - 图1
此方式,容器中数据卷只读

容器间的继承:

通过—volumes-from:继承那个镜像

docker run -it --privileged = true  --volumes-from u1 --name u2 /bin/bash