提升Docker效率的小操作——用volume实现容器和主机之间共享数据 [转载]

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 对于Docker来说,创建一个容器实际上非常简单:您只需要拉取一个镜像,并将其部署成容器就可以了。但是这个容器该如何保存数据呢?换言之,您要如何处理这些数据呢?又或者说,您要如何在容器之间共享这些数据呢?

说在前面

Docker是一个非常强大的工具,它帮助企业扩大产品规模,并简化部署容器化应用程序的流程。对于Docker来说,创建一个容器实际上非常简单:您只需要拉取一个镜像,并将其部署成容器就可以了。但是这个容器该如何保存数据呢?换言之,您要如何处理这些数据呢?又或者说,您要如何在容器之间共享这些数据呢?

Docker 容器的机制是由一系列只读层构成,其最上层包含一个最终的读写层。这是一个非常复杂的系统——称为联合文件系统(UFS)

当您不需要保留数据时,该文件系统可以很好的完成该任务。但是,当您需要停止、重新部署一个容器并需要保留数据时,那该怎么办呢? 为了能够保存数据(或者在容器之间共享数据),您必须用到volumes 。Docker volume 是存在于主机文件系统上(在联合文件系统之外)的目录(或文件)。

您该如何创建和管理这些volumes ?接下来,跟着我找出答案吧!我将在Ubuntu Server 16.04平台上使用Docker的最新版本。不管您使用的是什么主机操作系统,使用volumes的流程都是相同的。

创建一个标准的volume

让我们创建一个名为“volume1”的volume 。这是通过如下命令完成的:

docker volume create --name volume1

如果我们输入“docker volume ls”的命令,那么我们刚刚创建的“volume1”将出现在图1的列表中。

(图1)我们刚刚创建的“volume1”准备就绪

您可以通过输入“docker volume inspect volume1”的命令来获取更多关于“volume1”的详细信息。该命令的输出结果(图2)将显示“volume1”的名称、选项、挂载点等相关信息。

(图2)关于“volume1”的细节

然而,并不是所有标准的volume都是有用的。接下来,让我们创建一个可以让Docker 容器变得更加灵活的volume吧。

创建一个主机数据volume

现在,我们要做的就是部署一个新的容器(基于最新的Ubuntu镜像),这个容器包含一个附着在主机目录上的volume。这意味着您可以在该容器内工作并将数据保存到容器目录中,同时这些容器目录中的数据将与主机目录同步。您必须做的第一件事就是确保创建了主机目录。我们将使用如下命令来创建一个名为“container-data”的目录:

mkdir ~/container-data

确保在Docker用户可以访问的位置来创建上述目录。实际上,您可以在系统的任何位置创建该目录(只要用户具有读写权限)。使用该目录,部署容器的命令(将主机目录附着到容器volume,它位于容器内的/ data目录下)将是:

docker run -d -P --name test-container -v /home/jack/container-data:/data ubuntu

现在,您应该可以看到容器ID了,记下前四个字符,我们来测试一下。在shell界面,对正在运行的容器使用如下命令:

docker attach ID(其中ID是运行容器的前四个字符)

其中ID是运行容器的前四个字符。

现在,您的光标应该出现在bash提示符处。如果您输入“ls /”的命令,您应该能看到那个我们在容器运行时添加的数据目录。接下来,我们创建一个带有“touch / data / test”命令的测试文件。然后,回到主机的终端,并输入“ls ~/ container-data”的命令。您应该可以看到列出的测试文件。现在,再从同一终端输入“touch ~/ container-data / test2”的命令。最后,返回到我们的容器shell界面并输入“ls / data”命令,这时应该会同时出现test和test2两个文件。这时,您运行的容器正在共享主机文件上的数据。

您可以根据需要将尽可能多的容器附加到该主机目录上,每个容器(以及主机)都可以访问相同的数据。正如Larry David 所说:“这真的是非常、非常、非常的方便”。

让Docker变得更加有用

利用Volumes是一个使Docker容器变得更加有用的好方法。Volumes 可以帮助您备份数据,在容器之间共享数据,甚至可以在容器和主机之间共享数据。

目录
相关文章
|
12天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
142 77
|
20天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
14天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
55 3
|
21天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
54 7
|
21天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
49 3
|
21天前
|
存储 安全 数据安全/隐私保护
Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。
在数字化时代,Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。本文探讨了 Docker 应用的备份与恢复策略,涵盖备份的重要性、内容、方法及常见工具,制定备份策略,恢复流程及注意事项,并通过案例分析和未来趋势展望,强调备份与恢复在保障应用安全中的重要性。
25 2
|
21天前
|
存储 安全 数据中心
Docker 容器凭借轻量级和高效的特性,成为应用部署的重要工具
Docker 容器凭借轻量级和高效的特性,成为应用部署的重要工具。本文探讨了 Docker 如何通过 Namespace 和 Cgroups 实现 CPU、内存、网络和存储资源的隔离,提高系统安全性和资源利用率,以及面临的挑战和应对策略。
36 1
|
4天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
20 3
实战~如何组织一个多容器项目docker-compose
|
21天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
30 5
|
21天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
49 4
下一篇
DataWorks