为容器挂载持久化存储

Red Hat Enterprise LinuxBeginner
立即练习

介绍

在本挑战中,你将使用 podman 为容器挂载持久化存储。容器在本质上是临时性的,这意味着容器一旦被删除,其中创建的所有数据都会丢失。为了保存数据,你可以将宿主机系统中的目录挂载到容器内部。这种挂载的目录被称为持久化卷(Persistent Volume),它能确保即使容器被停止、删除或重建,你的数据依然存在。

为容器挂载持久化存储

在本挑战中,你将在宿主机系统上创建一个目录作为持久化卷。随后,你将运行一个新容器并将该持久化卷挂载到其中。最后,你将验证在容器内部写入卷中的数据在容器重启后是否依然存在。

任务

  • 在宿主机系统上创建一个目录作为持久化卷。
  • 运行一个新容器,并将持久化卷挂载到该容器。
  • 验证在容器内部写入卷中的数据在容器重启后是否依然存在。

要求

  • 在宿主机系统上创建一个名为 /data 的目录。该目录将作为卷挂载的宿主机路径。
  • 使用 nginx 镜像运行一个容器。容器必须命名为 my-nginx-container
  • 将宿主机的 /data 目录挂载到容器内部的 /usr/share/nginx/html 目录。
  • 在运行中的容器内部,于 /usr/share/nginx/html/my-file.txt 路径创建一个文件,内容必须为 This is a persistent file

示例

完成任务后,你应该能在容器的挂载目录中看到自定义文件以及默认的 Nginx 文件。你也可以检查宿主机的 /data 目录来查看相同的文件。

[labex@host ~]$ podman exec my-nginx-container cat /usr/share/nginx/html/my-file.txt
This is a persistent file
[labex@host ~]$ podman exec my-nginx-container ls /usr/share/nginx/html
my-file.txt

提示

  • 使用 sudo mkdir 命令创建 /data 目录。
  • 你可能需要使用 sudo chown 更改所有权,并使用 sudo chmod 更改权限,以确保容器进程可以向其写入数据。
  • podman run 命令的 -v--volume 选项用于将宿主机目录挂载到容器中。格式为 -v /host/path:/container/path
  • 在启用了 SELinux 的系统(如 RHEL)上,你需要为宿主机目录设置正确的 SELinux 上下文。使用 sudo semanage fcontext -a -t container_file_t "/data(/.*)?"sudo restorecon -R /data 来配置 SELinux 标签。
  • 如果遇到权限错误,请尝试将目录所有权设置为与容器用户 ID 匹配(对于 nginx,通常是 1000:1000)。
✨ 查看解决方案并练习

总结

在本挑战中,你学习了如何使用绑定挂载(Bind Mount)为容器提供持久化存储。通过将宿主机系统的目录挂载到容器中,你可以确保应用程序生成的数据即使在容器停止、删除或重启后也能持久存在。这项技术是容器中运行有状态应用的基础。