- Docker 教程
- Docker - 首页
- Docker - 概述
- Docker - 在 Linux 上安装
- Docker - 安装
- Docker - Hub
- Docker - 镜像
- Docker - 容器
- Docker - 注册表
- Docker - Compose
- Docker - 使用容器
- Docker - 架构
- Docker - 层
- Docker - 容器和主机
- Docker - 配置
- Docker - 容器和 Shell
- Docker - Dockerfile
- Docker - 构建文件
- Docker - 公共仓库
- Docker - 管理端口
- Docker - Web 服务器
- Docker - 命令
- Docker - 容器链接
- Docker - 数据存储
- Docker - 卷
- Docker - 网络
- Docker - 安全
- Docker - 工具箱
- Docker - 云
- Docker - 构建云
- Docker - 日志
- Docker - 持续集成
- Docker - Kubernetes 架构
- Docker - Kubernetes 的工作原理
- Docker - 生成式 AI
- Docker - 托管
- Docker - 最佳实践
- Docker 设置服务
- Docker - 设置 Node.js
- Docker - 设置 MongoDB
- Docker - 设置 NGINX
- Docker - 设置 ASP.Net
- Docker - 设置 MySQL
- Docker - 设置 Go
- Docker - 设置 Rust
- Docker - 设置 Apache
- Docker - 设置 MariaDB
- Docker - 设置 Jupyter
- Docker - 设置 Portainer
- Docker - 设置 Rstudio
- Docker - 设置 Plex
- Docker 设置 - Flame
- Docker 设置 - PostgreSQL
- Docker 设置 - Mosquitto
- Docker 设置 - Grafana
- Docker 设置 - Nextcloud
- Docker 设置 - Pawns
- Docker 设置 - Ubuntu
- Docker 设置 - RabbitMQ
- Docker - 设置 Python
- Docker - 设置 Java
- Docker - 设置 Redis
- Docker - 设置 Alpine
- Docker - 设置 BusyBox
- Docker 设置 - Traefik
- Docker 设置 - WordPress
- Docker 有用资源
- Docker - 快速指南
- Docker - 有用资源
- Docker - 讨论
Docker - 卷
Docker 卷是 Docker 数据管理的重要组成部分,因为它为 Docker 容器提供了数据持久性。卷允许数据存在于容器的可写层之外,保证数据在移除或升级容器时不会丢失。这对于数据库、配置文件或需要跨容器重启或部署生存的应用程序数据尤其重要。
与将主机文件系统中的目录映射到容器中的绑定挂载不同,Docker 卷由 Docker 本身管理,并提供更高的抽象性和可移植性。由于卷可以在多个容器之间共享,因此当不同的服务需要访问相同数据时,它们非常有用。
Docker 卷的工作原理是什么?
Docker 卷是独立的文件系统,存在于容器生命周期之外。这种分离确保数据持久存在,并且可以轻松地在多个容器之间共享。
Docker 卷的工作方式如下:
- 创建 - 可以使用“docker volume create”命令显式创建卷,也可以在使用卷挂载启动容器时隐式创建。
- 存储 - 卷存储在主机的特定目录中,在 Linux 系统上默认为 /var/lib/docker/volumes。
- 挂载 - 卷被挂载到容器中的特定路径:写入这些路径的数据存储在卷中,而不是容器的可写层。
- 持久性 - 即使停止、更新或删除容器也不会影响卷中的数据。因此,这使得在不同容器实例之间保持持久性相对容易。
- 共享 - 多个容器可以同时共享卷。它允许不同的容器访问或修改相同的数据。
- 管理 - 可以使用 Docker 命令(例如列出、检查和删除卷)轻松管理卷。此外,可以使用卷驱动程序将卷存储在远程主机或云提供商上。
卷和绑定挂载的区别
Docker 中的卷和绑定挂载都有助于在容器和主机之间存储和共享数据,但方式不同。让我们讨论 Docker 卷和绑定挂载之间的主要区别。
| 特性 | Docker 卷 | 绑定挂载 |
|---|---|---|
| 管理 | 由 Docker 管理 | 由主机系统管理 |
| 位置 | 存储在 Docker 管理的目录 (/var/lib/docker/volumes/) 中 | 可以是主机文件系统上的任何目录 |
| 可移植性 | 更具可移植性,适用于容器编排 | 可移植性较差,取决于主机的目录结构 |
| 性能 | 由 Docker 优化 I/O 操作 | 性能取决于主机文件系统 |
| 隔离性 | 提供更好的数据隔离和安全性 | 直接访问主机文件系统,隔离性较差 |
| 易用性 | 通过 Docker 命令更易于使用和管理 | 需要了解主机文件系统路径 |
| 数据共享 | 易于在多个容器之间共享 | 可以共享,但更复杂 |
| 数据持久性 | 数据在容器生命周期结束后仍然存在 | 数据也持久存在,但由 Docker 范围之外管理 |
| 备份和恢复 | 使用 Docker 命令更容易备份和恢复 | 需要手动备份和恢复过程 |
| 灵活性 | 存储路径固定,灵活性较差 | 更灵活,允许任意主机路径 |
| 安全性 | 在 Docker 上下文中具有更好的安全管理 | 依赖于主机的安全设置和访问控制 |
| 配置 | 使用 docker volume 命令创建和管理 | 直接在 docker run 命令中指定 |
| 设置 | 需要 Docker 处理卷生命周期 | 可以使用主机路径在没有 Docker 的情况下设置 |
| 权限 | 由 Docker 使用卷选项管理 | 继承自主机的目录权限 |
Docker 卷命令
如前所述,Docker 卷帮助我们创建和管理 Docker 容器中的持久存储。Docker 卷命令使管理它们更容易。让我们讨论一些用于创建、管理和对 Docker 卷执行各种操作的命令。
创建 Docker 卷
如果要创建新的 Docker 卷,可以使用 docker volume create 命令。使用此命令创建的卷可以被一个或多个容器使用。
$ docker volume create my_volume
列出 Docker 卷
列出本地主机上的 Docker 卷将是帮助您管理卷的最常用命令之一。如果要列出系统上的所有 Docker 卷,可以使用 docker volume ls 命令。
$ docker volume ls
检查 Docker 卷
如果要获取有关特定卷的详细信息,可以使用 docker volume inspect 命令。此命令需要指定卷的名称或 ID,您可以使用 volume list 命令获取。它将提供有关卷在主机上的位置及其配置的详细信息。
$ docker volume inspect my_volume
删除 Docker 卷
如果要清理本地机器并删除不再需要的 Docker 卷,可以使用 docker volume rm 命令。它允许您仅删除当前未被任何容器使用的卷。
$ docker volume rm my_volume
将 Docker 卷与容器一起使用
运行容器时,可以使用 -v 或 --mount 选项指定卷。-v 选项更简单,更常用,而 --mount 提供更高级的配置选项。
使用 -v -
$ docker run -d -v my_volume:/data my_image
使用 --mount -
$ docker run -d --mount source=my_volume,target=/data my_image
删除未使用的卷
Docker volume remove 命令一次只能删除一个卷。但是,如果要删除所有未使用的 Docker 卷以释放机器中的一些空间,可以使用 docker volume prune 命令。运行此命令时,它会在删除所有悬空卷之前提示您进行确认。
$ docker volume prune
备份 Docker 卷
备份卷中存储的数据始终很有用,因为如果意外删除卷,它将帮助您恢复丢失的数据。您可以将卷中的数据存储到 tarball 文件中。为此,您可以使用容器来压缩卷的内容并将其输出到主机系统上的文件。以下是名为 my_volume 的卷的示例命令:
$ docker run --rm -v my_volume:/data -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /data
从备份恢复 Docker 卷
一旦将数据备份到 tarball 文件中,就可以使用以下命令将其恢复到 Docker 卷。以下是将名为 my_volume 的卷从备份文件恢复的示例命令:
$ docker run --rm -v my_volume:/data -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar -C /data
结论
在本章中,我们讨论了 Docker 卷是什么以及它们与绑定挂载的不同之处。然后,我们讨论了几个 Docker 卷命令,这些命令将帮助您轻松管理和使用 Docker 环境中的持久存储。使用这些命令,您可以创建、检查、列出、删除、备份和恢复卷。这确保了容器中的应用程序在需要时拥有可靠且灵活的存储。
关于 Docker 卷的常见问题
1. 如何使用卷在 Docker 容器中持久化数据?
您可以将 Docker 卷挂载到容器内的任何路径,并在容器生命周期中持久化数据。您可以使用 docker volume create 创建命名卷,然后在启动新容器时使用 -v 或 --mount 标志将其挂载。
2. 我可以在容器之间共享 Docker 卷吗?
是的,这是可能的。多个容器可以访问同一个卷并能够更改它们。要共享卷,您只需要将同一个卷挂载到多个不同的容器中一次。Docker 本身会同步正在运行的实例之间的数据。