一、Docker容器数据卷是什么?

  • 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的,容器之间希望有可能共享数据
  • Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。
  • 为了能保存数据在docker中我们使用卷。

二、Docker容器数据卷能干嘛

  • 容器的持久化
  • 容器间继承+共享数据

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

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

三、Docker容器数据卷特点

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

四、方式一:直接添加命令

直接添加命令: docker run -it -v /宿主机绝对路径目录:/容器内目录      镜像名

1、宿主机(即:虚拟机linux环境根目录)目录如下:
在这里插入图片描述
2、容器内目录(即:docker中启动centos镜像的容器目录)如下:

[root@localhost ~]# docker run -it centos /bin/bash

在这里插入图片描述
3、执行 docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名 命令:会在步骤1和步骤2的目录中生成宿主机绝对路径目录容器内目录,如下图:

[root@localhost ~]#docker run -it -v /myDataVolume:/dataVolumeContainer centos 
[root@/f89b5db98ede]#

1)、宿主机目录下会生成myDataVolume目录
在这里插入图片描述2)容器内目录下会生成dataVolumeContainer目录
在这里插入图片描述
4、查看数据卷是否挂载成功命令:出现下图红框部分表示成功挂载数据卷

[root@localhost ~]#docker  inspect f89b5db98ede

在这里插入图片描述
5、查看容器和宿主机之间数据共享

1)在宿主机myDataVolume目录下创建host.txt文件

[root@localhost myDataVolume]# touch host.txt
[root@localhost myDataVolume]# ll
总用量 0  
- rw- r- - r - -. 1 root  root  0  705 12 22;56  host.txt

2)在容器中的dataVolumeContainer目录下也有host.txt文件

[root@f89b5db98ede dataVolumeContainer]# ll
total 0
- rw- r- - r - -. 1 root  root  0  Jul 13 02;56 host.txt  

以上1)和2)两步骤说明容器和宿主机之间数据共享

注意:

  • 宿主机myDataVolume目录下创建host.txt文件中添加和修改数据,在容器中的dataVolumeContainer目录下的host.txt文件中的内容和宿主机myDataVolume目录下创建host.txt文件中内容一样
  • 容器中的dataVolumeContainer目录下的host.txt文件中添加和修改数据,在宿主机myDataVolume目录下创建host.txt文件中的内容和容器中的dataVolumeContainer目录下的host.txt文件中内容一样

6、容器停止退出后,主机修改后数据是否同步

1)退出容器,并停止

[root@f89b5db98ede dataVolumeContainer]# exit
[root@localhost /]# 

2)主机修改数据

[root@localhost myDataVolume]# touch host02.txt
[root@localhost myDataVolume]# vim host02.txt
[root@localhost myDataVolume]#

3)重启启动容器,并进入容器的dataVolumeContainer目录查看

[root@localhost ]# docker start f89b5db98ede 
f89b5db98ede 
[root@localhost ]# docker attsch f89b5db98ede 
[root@f89b5db98ede /]# cd /dataVolumeContainer/ 
[root@f89b5db98ede dataVolumeContainer]# ll

在这里插入图片描述4)

[root@f89b5db98ede dataVolumeContainer]# cat hosts02.txt
host update 01
[root@f89b5db98ede dataVolumeContainer]#

结论:容器停止退出后,主机修改后数据是同步的

7、命令(带权限)

docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

1)命令中不带:ro 容器中的文件可读可写,如下图:
在这里插入图片描述
2)命令中带有:ro容器中的文件只读,如下图:
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐