一. 数据卷
想必大家都使用过U盘、光盘等外部存储设备,通过将U盘等外部存储设备挂载到系统中的一个挂载点,即可实现对这些外部设备的读写操作。
数据卷即供容器使用的一个特殊目录,和Linux系统挂在U盘等存储设备时使用的mount命令非常类似。对数据卷的修改立即生效,并且不会影响生成的镜像,卷会一直存在,直到没有容器使用它。
通常我们会挂载一个主机目录作为数据卷,如数据库的存储目录;也会挂载一个主机文件作为数据卷,如应用的配置文件。线面,我们分别介绍如何挂载一个目录,以及如何挂载一个文件作为数据卷。
1.1 挂载一个主机目录作为数据卷
挂载数据卷的命令为:
docker run -itd --name centos01 -v /opt/data/centos01:/data 192.168.255.128:5000/centos
使用 -v
参数创建数据卷,并且可以使用多个 -v
参数为容器创建多个数据卷。冒号之前的部分表示宿主机的真实目录,冒号之后的部分表示容器中的虚拟目录,即挂载点。
对数据卷的操作,其实都是对宿主机真实目录的操作:进入容器,在 /data 下创建 c.txt 文件,则在宿主机的真实目录中也将创建一个 c.txt 文件(注:和数据卷相关的目录,无论是容器还是宿主机的目录,都将在创建和运行容器时自动生成):
此外,创建数据卷时,还可以使用 ro 参数来指定只读数据卷(默认为rw,可读可写),容器将无法对数据卷做修改,详情如下:
1.2 挂载一个文件作为数据卷
注:宿主机中必须存在要挂载的文件,否则将创建目录,并挂载相应的目录。
二. 数据卷容器
数据卷实现了在在宿主机和容器之间共享数据,数据卷容器则可以帮我们实现在容器间共享数据。数据卷容器的本质也是一个普通数据卷,只不过它专门提供其它容器挂载,可以在容器之间共享和重用。使用数据卷容器,首先需要在容器内创建一个数据卷,作为数据卷容器:
数据卷容器使用 -v 参数指定挂载容器的目录,此处为 centos01 容器中的 /data 目录。进入容器 centos01 并在 /data 目录下创建了2个文件。
接下来,我们创建并运行2个容器 centos02 和 centos03,并分别挂载 centos01 数据卷容器:
进入容器 centos02 ,在/data目录下即可看到我们在 centos01 数据卷容器中创建的文件:
进入容器 centos03,在 /data
目录下即可看到我们在 centos01 数据卷容器中创建的文件,以及刚刚在 centos02 中创建的文件:
综上,借助数据卷容器 centos01,实现了在容器 centos01、centos02 和 centos03 之间的数据共享。