当前位置:首页 > 编程语言 > 正文内容

使用Docker Compose卷管理持久性数据

a811625532年前 (2023-09-06)编程语言43

Docker Compose 是一款功能强大的协调工具,旨在使用 Docker 简化多容器应用程序的管理和部署。docker-compose.yml 文件通过在一个文件中定义具有多个服务、 *** 和卷的复杂应用程序来简化部署。使用 Docker Compose 的一个重要方面是使用卷管理持久化数据。

本文探讨了在 Docker Compose 中使用卷处理持久性数据的重要性,并提供了有效使用卷的实践指南。

什么是 Docker 卷?

Docker 卷是一个重要的生态系统组件,用于存储和管理由短暂容器生成的持久数据。即使在移除或更新容器后,数据也能持久存在,这样就不会在日常操作中丢失重要的应用程序数据。

卷与容器的文件系统是分离的,因此你可以轻松地对它们进行备份,在多个容器之间共享它们,并在主机之间迁移它们。

与绑定挂载(即从主机系统到容器的目录挂载)相比,使用卷的一个关键优势是可移植性。你可以在不同主机或容器之间快速移动卷,但必须将绑定挂载绑定到主机系统上的特定目录。

这种可移植性使中的数据管理更灵活、更高效。卷还兼容各种存储驱动程序,让您可以根据具体的使用情况选择更佳的存储解决方案。

Docker 卷的类型

Docker 卷对于管理基于容器的应用程序中的数据至关重要。它们有两种不同的类型:命名卷和匿名卷。本节将深入探讨这两种类型的主要区别,并演示如何实施它们来管理应用程序中的数据。

命名卷和匿名卷的用途不同,提供的控制和管理功能也各不相同。由于命名卷具有人类可读的标识符,且易于管理,因此在大多数使用案例中,命名卷通常是首选,但要更大限度地发挥这两种类型的优势,必须了解它们的功能。

已命名卷

命名卷有一个用户定义的名称,便于识别、管理和在多个容器之间共享。Docker 创建并管理命名卷,并将其数据存储在主机系统的特定位置。该位置通常位于 Docker 安装目录下,有一个与卷名相对应的唯一 ID。

命名卷提供了更大的控制性和灵活性,因为你可以使用它们的人可读标识符轻松地引用和操作它们。

要在 Docker 中创建命名卷,请运行:

docker volume create my_named_volume

匿名卷

与命名卷不同,匿名卷没有用户定义的名称。相反,Docker 会在你创建容器时自动创建它们,并为卷分配一个唯一的 ID。

由于缺乏人类可读的标识符,管理和存储卷通常比较困难。由于 Docker 会自动创建卷,因此通常使用匿名卷进行临时存储。如果在创建容器时没有指定命名卷,也会出现匿名卷。

要使用匿名卷创建容器,请运行:

docker run -v /data nginx

此命令将匿名卷挂载到容器 nginx 内的 /data 目录。可以用挂载卷的容器名称替换 nginx

如何使用 Docker Compose 创建和管理卷

可以在 docker-compose.yml 文件中定义卷,从而简化了卷的创建和管理。该文件包含应用程序的服务、 *** 和卷的配置,可在一个地方轻松管理应用程序的资源。

1. 在 Docker Compose 中定义卷

要在 docker-compose.yml 文件中创建一个已命名的卷,请在 volumes 关键字下定义它。如有必要,还可以指定卷驱动程序和选项。

2. 将卷挂载到容器

要把卷附加到容器上,请在 docker-compose.yml 文件的 service 定义中使用 volumes 关键字。指定卷名称后的冒号和要挂载卷的容器路径。

你还可以使用相同的卷名,在多个容器之间共享卷。

下面是在 docker-compose.yml 文件中创建名为 web_datadb_data 的卷的例子:

version: '3.8'
services:
web:
image: nginx
volumes:
- web_data:/var/www/html
web-test:
image: nginx
volumes:
- web_data:/var/www/html # Web and web test share the web_data volume
db:
image: mysql
volumes:
- db_data:/var/lib/mysql
volumes:
web_data:
db_data:
driver: local # Define the driver and options under the volume name
driver_opts:
type: none
device: /data/db_data
o: bind

此示例定义了两个命名卷。然后,它将卷挂载到各自容器的特定路径下。接下来,它将 web_data 卷挂载到 web 容器中的 /var/www/html 目录,将 db_data 卷挂载到 db 容器中的 /var/lib/mysql 目录。

webweb-test 容器共享 web_data 卷,允许它们访问和修改相同的数据卷。

通过在 docker-compose.yml 文件中定义和管理卷,你可以根据需要轻松创建、更新和删除卷,而无需使用 Docker 命令手动管理它们。这种简化的流程让您可以专注于开发和部署应用程序,而 Docker Compose 则负责处理底层资源管理。

如何使用 Docker Compose 和 Volume 命令

Docker Compose 提供了多种命令,可帮助您有效管理应用程序及其资源。让我们详细回顾一下这些命令及其与卷的关系:

  •  docker compose up 会创建并启动你的应用程序,包括它的服务、 *** 和卷。如果你在 docker-compose.yml 文件中定义了已命名的卷,这条命令会自动创建它。
  •  docker compose down 停止并删除应用程序的服务和 *** 。默认情况下,它不会删除已命名的卷。要删除已命名的卷,请使用 --volumes-v 标志。
  •  docker compose ps 会列出容器及其当前状态,包括与卷相关的信息。
  •  docker compose config 验证并显示从 docker-compose.yml 文件生成的有效配置,包括卷定义。

列表卷

要列出所有卷,请使用 ls

docker volume ls

输出会显示所有已命名的卷,包括由 Docker Compose 创建的卷。

检查卷

要查看特定卷的详细信息,请使用 inspect 。它会输出卷的相关信息,如名称、驱动程序、挂载点和选项:

docker volume inspect db_data

卷的详细信息以 *** ON 格式给出。例如,考虑到上面提供的 docker-compose.yml 文件,这就是返回的输出结果:

[
{
"CreatedAt": "some-date-here",
"Driver": "local",
"Labels": null,
"Mountpoint": "/path/on/host/where/volume/is/mounted",
"Name": "db_data",
"Options": {
"device": "/data/db_data",
"o": "bind",
"type": "none"
},
"Scope": "local",
"Status": {
"Mounts": [
...
]
}
}
]

按名称删除 Docker 卷

要删除 Docker 卷,可以使用 docker volume rm ,后面跟卷名:

docker volume rm volume-name

清理未使用的卷

要,请使用 prune

docker volume prune

该命令有助于清理开发环境并回收存储空间。它会删除所有与容器无关的未使用卷,包括 Docker Compose 创建的卷。

利用这些命令及其与卷相关的功能,你可以有效地管理应用程序的资源,确保更佳性能和存储空间的高效利用。

Docker Compose 版本

自 2023 年 7 月起,。在新发布的 Docker Desktop 中,它也不再可用。不过,Docker Desktop 仍然支持 docker-compose 别名,以便将命令重定向到 docker compose ,从而提高与第三方工具和脚本的兼容性。

要将现有代码从 Docker Compose 版本 1 切换到版本 2,只需将破折号换成空格即可。例如, docker-compose up 变成 docker compose up

有了版本 2,你就可以直接在 Docker 命令行界面(CLI)中使用 & compose 命令,切换 Docker 上下文以在云服务上构建容器,并使用亚马逊 ECS 和微软 ACI。

小结

这篇文章强调了在 Docker Compose 中使用卷管理持久性数据的重要性。卷是 Docker 生态系统中的一个重要组件,它使您能够存储和管理 Docker 容器生成的数据。有了 Docker 卷,即使在您删除或更新容器后,重要的应用程序数据也会持续存在,有助于保持应用程序的完整性和一致性。

Docker Compose 提供了一种在 docker-compose.yml 文件中创建和管理卷的简化 *** 。这种 *** 简化了开发过程,确保了资源的高效利用。

使用卷还能使开发变得灵活高效,Docker Compose 提供了各种与卷相关的命令,帮助你有效监督应用程序资源。利用这些命令,您可以轻松创建、检查和清理卷。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://2345hao.cn/blog/index.php/post/8059.html

分享给朋友:

“使用Docker Compose卷管理持久性数据” 的相关文章

宝塔面板教程之不同环境安装篇

宝塔面板教程之不同环境安装篇

Linux面板环境安装,主要支持LNMP和LAMP、Tomcat、node.js。不过对于大部分站长来说,主要是LNMP和LAMP两个环境的安装。 LNMP和LAMP两个环境的最大区别是,前者采用Nginx作为Web服务器,后者则采用Apache作为Web服务器。(选择哪个作为您的Web服务器,可...

宝塔面板教程之数据库管理篇

宝塔面板教程之数据库管理篇

宝塔的数据库管理,是基于phpmyadmin管理和新建数据库。其最大的便利性就是类似,通过面板可以快速访问进行管理操作,无需单独访问phpmyadmin的主页。 此外,在宝塔面板进行数据库管理,你也对数据库名、用户名及密码等信息一目了然,及可以对数据库执行快速备份或者导入。 添加数据...

宝塔面板教程之面板设置篇

宝塔面板教程之面板设置篇

宝塔面板设置主要涉及的是宝塔控制后台自身的参数,包括诸如面板的开关、自动更新及SSL、面板端口设置等。虽然这部分不涉及服务器自身的管理,但对宝塔面板的设置也有其重要。 特别是面板端口、安全入口及面板密码等涉及安全的参数设置。 启动和关闭面板 如果你长时间无需使用到宝塔面板,可以考虑...

宝塔面板教程之软件管理篇

宝塔面板教程之软件管理篇

宝塔面板提供丰富的软件以一键安装,这让服务器环境搭建提供不少的便利性,站长可以根据实际需求快速编译安装以实现不同的功能需求。 软件管理,主要是宝塔提供的一些面板扩展插件。 Nginx Nginx是一个高性能的HTTP和反向代理服务器,具有轻量级、占用内存小,并发能力强等优势。 w...

如何成为一名出色的Java开发人员

如何成为一名出色的Java开发人员

美国劳工统计局估计在美有超过软件开发人员。根据2021年的数据,其中,这是世界上使用最广泛的五种编程语言之一。 自然,学习Java并成为Java开发人员对于任何对软件开发感兴趣的人来说都是明智的职业选择。 在本综合指南中,您将学习成为Java开发人员所需的一切知识。我们将分解您需要的技能、工...

优化Laravel性能的17种方法

优化Laravel性能的17种方法

您是否正在寻找成功的方法来加快Laravel的性能,同时在您的项目上工作?你来对地方了! Laravel是一个流行的开源PHP框架,以其强大的安全性和简单而复杂的编码架构而闻名。它是构建能够推动收入和推动业务发展的尖端Web应用程序的绝佳选择。 尽管如此,如果你不使用正确的优化技术,Lara...