一 Docker 数据卷简介
1.1 为什么用数据卷
•宿主机无法直接访问容器中的文件
•容器中的文件没有持久化,导致容器删除后,文件数据也随之消失
•容器之间也无法直接访问互相的文件
为解决这些问题,docker加入了数据卷(volumes)机制,能很好解决上面问题,以实现:
•容器与主机之间、容器与容器之间共享文件
•容器中数据的持久化
•将容器中的数据备份、迁移、恢复等
1.2 数据卷的特点
•数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。
•数据卷可以目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换。
•容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中。
•容器对数据卷的修改是实时进行的。
•数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会有相互影响。
一个数据卷可以被多个容器同时挂载
一个容器也可以被挂载多个数据卷
二 Docker 数据卷管理
配置数据卷
创建启动容器时,使用-v参数 设置数据卷
docker run ... -v 宿主机目录(文件):容器内目录(文件)...
注意事项:
1、目录必是绝对路径
2、如果目录不存在,会自动创建
3、可以挂载多个数据卷(-v /root/data1:/root/data1 -v /root/data2:/root/data2)
[root@localhost ~]# docker run -it --name=c7 -v /root/data:/root/data_container centos /bin/bash
数据卷容器
多容器进行数据交换
1、多个容器挂载同一个数据卷
2、数据卷容器
配置数据卷容器
1、创建启动c3数据卷容器,使用-v参数 设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash
2、创建启动c1,c2容器,使用--volumes-from参数 设置数据卷
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
2.1 Docker挂载容器数据卷的三种方式
•bind mounts:将宿主机上的一个文件或目录被挂载到容器上。
•volumes:由Docker创建和管理。使用docker volume命令管理
•tmpfs mounts:tmpfs 是一种基于内存的临时文件系统。tmpfs mounts 数据不会存储在磁盘上。
2.2 bind mounts方式挂载数据卷
2.3 volumes方式挂载数据卷
|
|
2.4 tmpfs mount方式挂载数据卷
|
|
2.5 共享其他容器的数据卷-数据卷容器
|
|
三 Docker 数据卷注意事项
Docker的数据卷更多会是使用volumes方式来进行使用。使用时需注意:
•如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。
•如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。
这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。