Docker 一般情况下的数据操作都是在容器上的可写层上进行的,但这却有下面这些缺点:
1、数据不能在容器停止运行后保持持久化,而且也难以被其他容器使用。
2、容器的可写层是与容器主机紧耦合的,导致难以把其中的数据移到其他地方。
3、要写数据到容器可写层需要提供一个存储驱动(该驱动使用 Linux 内核提供了统一的文件系统),这就导致其相比较于直接写到主机文件系统的使用 Docker 数据卷(data volumes)的方式拥有更低的性能。
因此,Docker 提供了三种方式来挂载容器中的数据:卷(volumes)、绑定挂载(bind mounts)和 tmpfs 挂载。其中使用卷是绝大部分情况下所推荐的。但无论使用哪种方式,数据在容器中看起来都是一样的,都是以目录或者单个文件的形式出现在容器的文件系统中的。下图很好地展示了这三者的区别。
其中:
* 卷方式被存储在由 Docker 管理的部分主机文件系统中(Linux 中位于 /var/lib/docker/volumes 下)。非 Docker 进程不应该修改这部分文件系统。这是 Docker 中持久化数据的最好方式。
* 绑定挂载方式可把数据存储在主机系统的任意地方,甚至是重要的文件或目录中。非 Docker 进程在任意时刻都可能修改这些数据。
* tmpfs 方式只是把数据储存在主机内存中,而不会写到主机的文件系统中。虽然它不能持久化数据,但却能有效地提升性能。
要使用卷,可以在运行容器时使用“-v/--volume”或“--mount”选项(推荐后者),但如果需要指定具体的卷驱动,只能使用“--mount”。另外,“docker service create”命令也仅支持“--mount”选项。
“-v/--volume”选项包含三个以冒号分隔的字段。第一个是卷的唯一名字(匿名卷则忽略该字段),第二个是将要挂载到容器中的文件或目录的路径,第三个是以逗号分隔的可选列表。
“--mount”选项包含以逗号分隔的多个键值对。如“type”键可以是 colume、bind 或者 tmpfs;“source/src”键是卷名(匿名卷则忽略该字段);“destination/dst/target”键指定了容器中要挂载的目标路径;“readonly”键可挂载只读卷;“volume-opt”键接收包含选项名和对应值的键值对,这个键可指定多次。
下面这个示例演示了卷的使用方式。
$ docker volume create my_col # 创建卷
$ docker volume ls # 查看卷,“docker volume inspect”可查看更详细
DRIVER VOLUME NAME
local my_vol
# 启动容器时指定卷,这里 /app 不存在时会自动创建,如果它已经在容器中存在并且含有
# 内容,则其内容会一并复制到卷中,这样其他使用这个卷的容器也能访问到这些数据。
$ docker run -d \
-it \
--name devtest \
--mount source=my_vol,target=/app \ # 或:-v my_col:/app
# --mount source=my_vol,target=/app,readonly 或 -v my_vol:/app:ro 挂载只读卷到当前容器
nginx:latest
$ docker inspect devtest # 查看新容器的信息
....
"Mounts": [
{
"Type": "volume",
"Name": "my_vol",
"Source": "/var/lib/docker/volumes/my_vol/_data",
"Destination": "/app",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
...
$ docker container stop devtest # 停止容器
$ docker container rm devtest # 删除容器
$ docker volume rm my_vol # 删除卷
当使用“docker volume create”创建一个卷或启动的容器指定的卷还不存在时,都可以指定一个卷驱动。下面就以“vieux/sshfs”卷驱动为例来演示如何创建一个带卷驱动的卷。
# 方法一:
# 1、安装“vieux/sshfs”插件(本例子假设已经拥有两个主机节点,并且其中一个 docker
# 主机能用 SSH 连接到另一个)。
$ docker plugin install --grant-all-permissions vieux/sshfs
# 2、创建一个带有自定义卷驱动的卷(本例子指定了一个 SSH 密码,但如果两个主机共享键
# 配置,也可忽略该密码。每个卷都可以使用“-o”选项来指定多个配置选项)。
$ docker volume create --driver vieux/sshfs \
-o sshcmd=test@node2:/home/test \
-o password=testpassword \
sshvolume
# 方法二:
# 启动一个容器时指定卷驱动(同上,如果两个主机共享键配置,也可忽略该密码)。
$ docker run -itd \
--name sshfs-container \
--volume-driver vieux/sshfs \
--mount src=sshvolume,target=/app,volume-opt=sshcmd=test@node2:/home/test,volume-opt=password=testpassword \
nginx:latest
绑定挂载和 tmpfs 挂载的方式同卷大同小异,可自行前往官网查询对应的参数限制。
- 大小: 14.5 KB
分享到:
相关推荐
29-应急管理数据治理技术规范:数据管控-数据质量管理技术要求(试行).pdf
29-应急管理数据治理技术规范:数据管控-数据资源目录技术要求(试行).pdf
29-应急管理数据治理技术规范:数据接入技术要求(试行).pdf
29-应急管理数据治理技术规范:数据管控-应用资源目录技术要求(试行).pdf
《高校教务管理系统数据设计与数据流图解析》 高校教务管理系统是高等教育机构不可或缺的信息管理系统,它涵盖了从学生入学到毕业的全过程管理,旨在优化教育资源分配,提高教学效率,保障教育质量。本文将深入探讨...
数据中台之主数据管理 数据中台之主数据管理是指在数据中台中对主数据的统一管理和维护,确保主数据的唯一性、规范性和高效性。主数据管理的目标是统一数据标准和规范,确保主数据的权威性和可靠性,提高数据维护...
DAMA2数据管理知识体系强调了在当前数据驱动的世界中有效管理数据的重要性。它涵盖了数据管理的基本概念、数据质量和治理的最佳实践、以及如何通过有效的数据规划来提高组织的竞争力。随着技术的不断发展,加强数据...
使用Oracle数据集成平台管理数据.pptx
在这个图书管理系统中,DFD可能包括如“借书”、“还书”、“查询书籍”等主要过程,每个过程由数据流、处理逻辑和数据存储组成。数据流表示信息的传递,处理逻辑描述信息如何被加工,而数据存储则表示信息的存储...
按照标准画的数据流图 那时也花了蛮多的心血 关于物业管理系统的 希望对您有帮助
### 教务管理系统数据流图知识点解析 #### 一、数据流图概述 在软件工程领域,数据流图(Data Flow Diagram,简称DFD)是一种常用的方法,用于描绘信息流和处理过程。它通过图形化的表示来展示系统的逻辑流程,...
银行经营管理指标数据元
酒店客房管理系统毕业论文的数据删除流程图
数据集市建设、数据质量及数据管理方法 数据治理及数据仓库模型设计 数据治理平台系统介绍 数据质量管理 数据质量管理规范 数据质量征途 通用元数据管理工具用户使用手册 银行核心业务系统介绍x 元数据及数据质量...
报告中提出了多个关键概念,包括数据价值管理、数据创新、数据全流程贯通、业务自动化、数据质量度量、数据管理体系、数据源管理政策、数据架构管理政策、数据质量管理政策等。这些概念都是华为公司实施数字化转型和...
在数字化转型的背景下,数据已成为企业竞争力的关键因素,因此,有效管理数据资产变得至关重要。 二、数据资产管理框架 白皮书可能详细介绍了数据资产管理的全面框架,包括数据治理、数据质量、元数据管理、数据...
技术元数据用于开发和管理数据仓库,包括数据仓库结构的描述、业务系统和数据仓库的体系结构和模式、汇总用的算法、操作环境到数据仓库环境的映射等信息。业务元数据从业务角度描述了数据仓库中的数据,提供了介于...
金蝶主数据管理解决方案金蝶主数据管理解决方案金蝶主数据管理解决方案金蝶主数据管理解决方案金蝶主数据管理解决方案金蝶主数据管理解决方案金蝶主数据管理解决方案金蝶主数据管理解决方案金蝶主数据管理解决方案...
数据分类分级管理制度 数据分类分级管理制度是企业信息安全管理的重要组成部分,旨在对企业内的数据资产进行分类、分级和管理,以保证数据的安全和机密性。下面是对数据分类分级管理制度的详细解释: 一、数据分类...
主数据管理旨在确保企业关键业务实体(如客户、产品、供应商等)的一致性和准确性,而元数据管理则关注数据的“关于数据的数据”,提供对数据资产的描述、解释和定位。 MDM的核心目标是消除数据冗余,提高数据质量...