Docker容器的持久存储模式
2023-09-27 14:27:54 时间
本文讲的是Docker容器的持久存储模式,【编者的话】本文讨论了Docker容器的持久存储模式,包括默认模式、数据卷模式、只含数据的容器、从主机映射而得的数据卷、从主机映射而得的数据卷且存储后端是共享存储以及 Convoy 存储插件,其中第 2-4 种支持容器持久性,即升级容器也不会移除数据;第 5-6 种支持主机持久性,即主机失效也不会引起数据丢失。
本文讲的是Docker容器的持久存储模式,【编者的话】本文讨论了Docker容器的持久存储模式,包括默认模式、数据卷模式、只含数据的容器、从主机映射而得的数据卷、从主机映射而得的数据卷且存储后端是共享存储以及 Convoy 存储插件,其中第 2-4 种支持容器持久性,即升级容器也不会移除数据;第 5-6 种支持主机持久性,即主机失效也不会引起数据丢失。
简介 说到Docker,持久存储是一个需要小心处理的问题。通常一个服务的升级流程是关停旧版本容器,然后拉取并启动新版本容器。默认情况下,旧版容器包含的所有数据都会被消除,我们当然不想这样。
本文将讨论保证数据持久性的几种模式:
默认模式:不支持任何持久性 数据卷:容器持久性 仅含数据的容器:容器持久性 从主机映射而得的卷:容器持久性 从主机映射而得的卷,存储后端是共享存储:主机持久性 Convoy 卷插件:主机持久性
上述几种持久性(我自己发明的)是什么意思呢?
容器持久性:升级容器并不会移除数据 主机持久性:主机失效也不会引起数据丢失
下面一一解释这些持久存储模式。
默认模式 这是最基本的一种持久存储模式。创建容器时没有指定任何与卷相关的选项,数据保存在容器内部。前文已经提及,升级容器会导致容器数据丢失。如果容器是无状态的,这当然没问题;如果容器是有状态的,需要持久保存数据(例如,数据库容器),默认模式显然就不适合了。
数据卷 在创建容器时指定 volume 选项。数据卷位于主机系统的特定位置下(例如, /var/lib/docker/volumes/_container_name_/_data 目录下,可用 docker inspect 命令查看),升级容器时不会改动这些数据。
只包含数据的容器 只包含数据的容器与典型的数据卷相比略有不同。首先创建一个数据卷容器(通常以 busybox 或 alpine 为基础镜像),然后在启动主容器时使用 -volumes-from 选项,把数据卷容器的所有卷映射到主容器内。这是一种典型的随从模式实现。
从主机映射而得的数据卷 这种模式是把主机的目录映射为容器的数据卷。在数据卷模式中,容器的文件夹实际上保存在主机 /var/lib/docker/volumes/ 目录下面的一个文件。而从主机映射的卷是直接建立容器与主机之间的目录映射。这种方式与数据卷模式具有相同的优点,也可以混合使用这两种模式。这种模式的主要缺点是容器与主机之间的权限(uid/gid)映射。
从主机映射而得的数据卷,存储后端是共享存储 把共享存储(例如, NFS, Gluster ...)的文件夹映射为主机的文件夹,再映射为容器的卷。这种模式的主要优点是:即使主机失效,容器的数据也不会丢失。
Convoy 卷插件 主机级别的持久存储映射感觉还是有些“静态”——你必须保证所有主机默认具有相同的文件夹结构,否则终有一天会遇上麻烦。
Convoy 是 docker 的一个存储卷插件,起一个中介容器的作用:确保容器的数据卷链接到共享存储,目前实现了 NFS 和 Gluster 两种共享存储的支持,其他共享存储的支持据说“即将”实现。
其他模式 还有很多其他的持久存储模式。如果你有独特的持久存储模式,告诉我一声!
Flocker 我知道 Flocker ,虽然没试用过,看起来挺不错的。
结论 Docker 支持数据持久性! 记住有多种持久存储模式,每一种各有利弊。 专业诀窍:一定要测试你选择的持久模式!与自我修复(resilience)和性能相关的方方面面都要进行复核。
原文链接:Docker : Storage Patterns for Persistence (翻译:柳泉波)
原文发布时间为: 2016-05-09 本文作者:bnuhero 本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。 原文标题:Docker容器的持久存储模式
Docker 与 K8S学习笔记(十一)—— 容器的存储 Docker为容器提供了两种存储数据的方式: Storage Driver即存储驱动 Data Volume即数据卷 本节我们分别讨论下它们的应用。 一、Storage Driver 前面讲过容器是由一个可写的容器层加若干个只读的镜像层组成,这样的设计带来如下效果: 新数据直接写在容器层中; 修改现
本文讲的是Docker容器的持久存储模式,【编者的话】本文讨论了Docker容器的持久存储模式,包括默认模式、数据卷模式、只含数据的容器、从主机映射而得的数据卷、从主机映射而得的数据卷且存储后端是共享存储以及 Convoy 存储插件,其中第 2-4 种支持容器持久性,即升级容器也不会移除数据;第 5-6 种支持主机持久性,即主机失效也不会引起数据丢失。
简介 说到Docker,持久存储是一个需要小心处理的问题。通常一个服务的升级流程是关停旧版本容器,然后拉取并启动新版本容器。默认情况下,旧版容器包含的所有数据都会被消除,我们当然不想这样。
![dockerdatapatterns-container_service_upgrade.jpg dockerdatapatterns-container_service_upgrade.jpg](http://dockerone.com/uploads/article/20160509/b7a00cd45da86f3e88f76d55a6b69f84.jpg)
本文将讨论保证数据持久性的几种模式:
默认模式:不支持任何持久性 数据卷:容器持久性 仅含数据的容器:容器持久性 从主机映射而得的卷:容器持久性 从主机映射而得的卷,存储后端是共享存储:主机持久性 Convoy 卷插件:主机持久性
上述几种持久性(我自己发明的)是什么意思呢?
容器持久性:升级容器并不会移除数据 主机持久性:主机失效也不会引起数据丢失
下面一一解释这些持久存储模式。
默认模式 这是最基本的一种持久存储模式。创建容器时没有指定任何与卷相关的选项,数据保存在容器内部。前文已经提及,升级容器会导致容器数据丢失。如果容器是无状态的,这当然没问题;如果容器是有状态的,需要持久保存数据(例如,数据库容器),默认模式显然就不适合了。
![dockerdatapatterns-container_only.jpg dockerdatapatterns-container_only.jpg](http://dockerone.com/uploads/article/20160509/37c1a094d9f7b4efdee4973c927a0f03.jpg)
数据卷 在创建容器时指定 volume 选项。数据卷位于主机系统的特定位置下(例如, /var/lib/docker/volumes/_container_name_/_data 目录下,可用 docker inspect 命令查看),升级容器时不会改动这些数据。
![dockerdatapatterns-volume_only.jpg dockerdatapatterns-volume_only.jpg](http://dockerone.com/uploads/article/20160509/ef686c4434bbb59c38a57f7785e5c62e.jpg)
只包含数据的容器 只包含数据的容器与典型的数据卷相比略有不同。首先创建一个数据卷容器(通常以 busybox 或 alpine 为基础镜像),然后在启动主容器时使用 -volumes-from 选项,把数据卷容器的所有卷映射到主容器内。这是一种典型的随从模式实现。
![dockerdatapatterns-volumes_from_data_container.jpg dockerdatapatterns-volumes_from_data_container.jpg](http://dockerone.com/uploads/article/20160509/8d89fe0cf5cdf07d6f44c75effc77f21.jpg)
从主机映射而得的数据卷 这种模式是把主机的目录映射为容器的数据卷。在数据卷模式中,容器的文件夹实际上保存在主机 /var/lib/docker/volumes/ 目录下面的一个文件。而从主机映射的卷是直接建立容器与主机之间的目录映射。这种方式与数据卷模式具有相同的优点,也可以混合使用这两种模式。这种模式的主要缺点是容器与主机之间的权限(uid/gid)映射。
![dockerdatapatterns-host_mapping.jpg dockerdatapatterns-host_mapping.jpg](http://dockerone.com/uploads/article/20160509/c6ad3b7484f10cdefd38fb3278464254.jpg)
从主机映射而得的数据卷,存储后端是共享存储 把共享存储(例如, NFS, Gluster ...)的文件夹映射为主机的文件夹,再映射为容器的卷。这种模式的主要优点是:即使主机失效,容器的数据也不会丢失。
![dockerdatapatterns-shared_storage_host_mapping.jpg dockerdatapatterns-shared_storage_host_mapping.jpg](http://dockerone.com/uploads/article/20160509/44901a9d5192a0d266cecbccdf5bf1a7.jpg)
Convoy 卷插件 主机级别的持久存储映射感觉还是有些“静态”——你必须保证所有主机默认具有相同的文件夹结构,否则终有一天会遇上麻烦。
Convoy 是 docker 的一个存储卷插件,起一个中介容器的作用:确保容器的数据卷链接到共享存储,目前实现了 NFS 和 Gluster 两种共享存储的支持,其他共享存储的支持据说“即将”实现。
![dockerdatapatterns-convoy.jpg dockerdatapatterns-convoy.jpg](http://dockerone.com/uploads/article/20160509/0a7c1e4235114c9bb48db04877af37de.jpg)
其他模式 还有很多其他的持久存储模式。如果你有独特的持久存储模式,告诉我一声!
Flocker 我知道 Flocker ,虽然没试用过,看起来挺不错的。
![diagram-1.jpg diagram-1.jpg](http://dockerone.com/uploads/article/20160509/be0464eb3376d16fad23979996edefad.jpg)
结论 Docker 支持数据持久性! 记住有多种持久存储模式,每一种各有利弊。 专业诀窍:一定要测试你选择的持久模式!与自我修复(resilience)和性能相关的方方面面都要进行复核。
原文链接:Docker : Storage Patterns for Persistence (翻译:柳泉波)
原文发布时间为: 2016-05-09 本文作者:bnuhero 本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。 原文标题:Docker容器的持久存储模式
Docker 与 K8S学习笔记(十一)—— 容器的存储 Docker为容器提供了两种存储数据的方式: Storage Driver即存储驱动 Data Volume即数据卷 本节我们分别讨论下它们的应用。 一、Storage Driver 前面讲过容器是由一个可写的容器层加若干个只读的镜像层组成,这样的设计带来如下效果: 新数据直接写在容器层中; 修改现