介绍
在本挑战中,你将使用 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)为容器提供持久化存储。通过将宿主机系统的目录挂载到容器中,你可以确保应用程序生成的数据即使在容器停止、删除或重启后也能持久存在。这项技术是容器中运行有状态应用的基础。



