管理容器中的数据

DockerBeginner
立即练习

介绍

容器技术通过提供隔离、轻量且可移植的环境,彻底改变了应用程序的部署方式。然而,管理容器内的数据带来了独特的挑战,特别是在确保数据在容器生命周期内持久化方面。本挑战将引导你掌握在 Docker 容器中进行有效数据管理的核心技术。

你将学习如何创建和使用 Docker 卷(volumes)、将其挂载到容器中、在卷中读写数据,以及执行备份和恢复操作。这些技能对于开发需要持久化存储的健壮容器化应用至关重要。

让我们开始探索 Docker 容器中的数据管理。

这是一个「挑战」项目,它与「引导实验」不同,你需要尝试独立完成挑战任务,而不是按照实验步骤一步步学习。挑战通常具有一定的难度。如果你觉得困难,可以与 Labby 讨论或查看解决方案。历史数据显示,这是一个 初学者 级别的挑战,通过率为 98%。它在学习者中获得了 100% 的好评率。

创建 Docker 卷

在这一步骤中,你将创建一个 Docker 卷。Docker 卷是一个用于存储持久化数据的托管对象,它独立于容器存在。

任务

  1. 使用 docker volume create 命令创建一个名为 myvolume 的新 Docker 卷。
  2. 列出所有 Docker 卷以验证 myvolume 是否创建成功。

要求

  • /home/labex/project 目录下执行所有操作。
  • 创建卷时使用默认的卷驱动程序(volume driver)。

示例

完成此步骤后,运行 docker volume ls 应该显示类似以下内容的输出:

DRIVER    VOLUME NAME
local     myvolume
✨ 查看解决方案并练习

在容器中挂载 Docker 卷

现在我们已经有了一个卷,让我们把它挂载到容器上。这一步将演示如何让运行中的容器使用持久化存储。

任务

  1. 基于 nginx 镜像运行一个名为 my-container 的新 Docker 容器。
  2. myvolume 卷挂载到容器内的 /app/data 路径。
  3. 使用 docker inspect 命令验证卷是否已正确挂载。

要求

  • /home/labex/project 目录下执行所有操作。
  • 以分离模式(detached mode)运行容器。
  • 启动容器时使用 -v 选项来挂载卷。

示例

运行容器后,docker inspect my-container 的输出应包含:

"Mounts": [
    {
        "Type": "volume",
        "Name": "myvolume",
        "Source": "/var/lib/docker/volumes/myvolume/_data",
        "Destination": "/app/data",
        "Driver": "local",
        "Mode": "z",
        "RW": true,
        "Propagation": ""
    }
]
✨ 查看解决方案并练习

向 Docker 卷写入数据

在这一步中,你将学习如何向挂载的 Docker 卷写入数据。即使容器被删除,这些数据也会持久保存。

任务

  1. 使用 docker exec 命令进入 my-container 容器。
  2. 在容器内的 /app/data 目录下创建一个名为 hello.txt 的文件。
  3. 将内容「Hello, World!」写入 hello.txt 文件。

要求

  • /home/labex/project 目录下执行所有操作。
  • 使用 echo 命令将内容写入文件。

示例

执行命令后,你应该能够看到该文件:

$ docker exec my-container ls /app/data
hello.txt
✨ 查看解决方案并练习

从 Docker 卷读取数据

既然我们已经向卷中写入了数据,现在来验证是否可以将其读取出来,以此证明数据在容器操作中的持久性。

任务

  1. 使用 docker exec 命令进入 my-container 容器。
  2. 读取并显示 /app/data/hello.txt 文件的内容。

要求

  • /home/labex/project 目录下执行所有操作。
  • 使用 cat 命令显示文件内容。

示例

你的命令输出应该是:

Hello, World!
✨ 查看解决方案并练习

备份与恢复 Docker 卷

在最后一步中,你将学习如何备份 Docker 卷中的数据并将其恢复到新卷中。这对于数据迁移和灾难恢复场景至关重要。

任务

  1. myvolume 卷中的数据备份为名为 myvolume.tar.gz 的压缩包,存放在 /home/labex/project 目录下。
  2. 创建一个名为 mynewvolume 的新 Docker 卷。
  3. 将备份数据恢复到 mynewvolume 中。

要求

  • /home/labex/project 目录下执行所有操作。
  • 在备份和恢复操作中,使用带有 --rm 选项的临时容器运行 docker run

示例

完成备份和恢复过程后,验证新卷的内容应显示:

$ docker run --rm -v mynewvolume:/app/data alpine cat /app/data/hello.txt
Hello, World!
✨ 查看解决方案并练习

总结

通过本次挑战,你获得了管理 Docker 容器内数据的实践经验。你已经学习了如何:

  1. 创建和管理 Docker 卷
  2. 将卷挂载到容器
  3. 在卷中写入和读取数据
  4. 备份卷数据并将其恢复到新卷

这些技能是开发需要持久化存储的健壮容器化应用的基础。在继续你的 Docker 学习之旅时,请记住,有效的数据管理对于维护应用状态、确保数据持久性以及简化运维流程至关重要。

对于更高级的场景,你可以考虑探索用于云存储集成的卷驱动程序、实施自动化备份策略,以及研究卷在 Docker Swarm 和 Kubernetes 等分布式存储解决方案中是如何交互的。