IT工程师都需要掌握的容器技术之Docker存储管理

通过本篇文章我们可以了解到容器镜像结构、将主机数据挂载到容器的方式、容器数据卷及数据卷的备份与恢复等技术 , 下面我们就一起来学习吧!
01 Docker存储概览默认情况下容器中所有创建的文件及数据都被存储在了容器的可写层 , 如果按默认操作会有如下问题:
1)容器被删除数据不会保存 , 同时如果另外一个进程想要调用容器中数据也非常困难;
2)容器的可写层与运行容器的主机紧密耦合 , 无法轻松地将数据移动到其它地方;
3)容器数据写入容器可写层需要使用Storage driver(容器存储驱动)来管理文件系统进行写操作 , 因为多了这一层导致其比直接将数据写入主机的文件系统的效率低很多 。
针对上述问题 , Docker 提供了四种不同的方式将数据从 Docker 主机直接挂载到容器中 , 分别为卷(volumes) , 绑定挂载(bind mounts) , 临时文件系统(tmpfs)及命名通道(named pipe) , 这四种方式的named pipe是windows系统独有的(因为实际工作中容器大多都是部署在linux系统上的 , 所以本篇文章我们主要介绍前三种挂载方式) 。卷(volumes) , 绑定挂载(bind mounts)及临时文件系统(tmpfs)这三种挂载方式特点如下:

IT工程师都需要掌握的容器技术之Docker存储管理

文章插图
 
1)卷存储在 Docker 管理的主机文件系统的一部分中(/var/lib/docker/volumes/)中 , 完全由 Docker 管理 , 卷存储是docker数据保存最推荐的方法;
2)bind mounts 绑定挂载 , 可以存储在主机系统上的任何位置 , 甚至可以是重要的系统文件或目录 , Docker主机或Docker容器上的非Docker进程可以随时对其进行修改;
3)tmpfs 仅存储在主机系统的内存中 , 而不会写入主机的文件系统 。
下面我们就来看看怎么创建这三种存储方式吧!
02 卷(volumes)卷是这三种存储方式中唯一使用Docker来创建与管理的 , 卷的推荐使用场景如下:
1)在多个运行容器进行数据共享;
2)当您要将容器的数据存储在远程主机或云上时;
3)当您需要将数据从一台Docker主机备份 , 还原或迁移到另一台Docker主机时 , 卷是一个更好的方案;
4)容器中程序需要更好的IO性能 。
下面我们看看如何使用docker命令来操作卷
(1) 查看卷列表
1. # 查看卷列表  2. # docker volume ls  
IT工程师都需要掌握的容器技术之Docker存储管理

文章插图
 
(2) 创建卷
创建卷的具体命令如下:
1. # 创建卷  2. # docker volume create [Volume Name]  我们现在创建一个volume2 , 同时查看创建卷的详细参数 , 操作如下
1. # 创建卷  2. # docker volume create volume2  3. #   4. # 查看volume2的详细信息  5. # docker volume inspect volume2 
IT工程师都需要掌握的容器技术之Docker存储管理

文章插图
 
(3) 挂载卷
挂载卷是在创建容器时进行绑定的 , 在创建容器docker container run后面加参数进行卷的挂载 , 其挂载有两种方式一种通过-v挂载一种通过--mount , -v用于单独的容器挂载而—mount一般用于docker service(也就是docker swarm) , 下面是这两个参数的具体说明:
1. -v:   2.   由三个由冒号(:)分隔的字段组成 , [HOST-DIR:]CONTAINER-DIR[:OPTIONS]  3.   1)HOST-DIR 代表主机上的目录或数据卷的名字 。省略该部分时 , 会自动创建一个匿名卷 。如果是指定主机上的目录 , 需要使用绝对路径 。  4.   2)CONTAINER-DIR 代表将要挂载到容器中的目录或文件 , 即表现为容器中的某个目录或文件  5.   3)OPTIONS 代表配置 , 例如设置为只读权限(ro) , 此卷仅能被该容器使用(Z) , 或者可以被多个容器使用(z) 。多个配置项由逗号分隔 。  6.   7. --mount:  8.   由多个键值对组成 , 键值对之间由逗号分隔 。例如:type=volume,source=volume2,destination=/volume2,ro=true  9.   1)type , 指定类型 , 可以指定为 bind , volume , tmpfs 。  10.   2)source , 当类型为 volume 时 , 指定卷名称 , 匿名卷时省略该字段 。当类型为 bind , 指定路径 。可以使用缩写 src 。  11.   3)destination , 挂载到容器中的路径 。可以使用缩写 dst 或 target 。  12.   4)ro 为配置项 , 多个配置项直接由逗号分隔一般使用 true 或 false 。  


推荐阅读