将持久存储附加到容器
准备永久存储位置
容器中的存储具有临时性,这意味着移除容器后,其内容会丢失。
从容器主机提供持久存储
为容器提供永久存储的一种简单方式是使用容器主机上的目录来存储数据。podman可以在正在运行的容器内挂载主机目录。容器化应用将这些主机目录视为容器存储的一部分,就像常规应用将远程网络卷视为主机文件系统的一部分一样。移动容器时,系统不会回收容器主机目录的内容。新容器可以挂载它以访问数据。
准备主机目录
准备主机目录时,必须对其进行配置,以便容器内的进程可以访问它。目录配置涉及:
- 配置目录的所有权和权限
- 设置适当的SELinux上下文
容器内的应用所使用的用户账户必须具有主机目录的访问权限,确保在主机目录上设置正确的权限,以便应用可以访问它。
挂载卷
创建和配置主机目录后,将此目录挂载到容器。
添加--volume或-v选项到podman run命令,并指定主机目录路径和容器存储路径,其中用冒号:分隔:--volume host_dir:container_dir:Z
借助Z选项,podman会SELinux container_file_t上下问类型应用到主机目录。
管理容器及服务
在服务器启动时自动启动容器
通过rootless容器创建systemd用户单元文件,用systemctl命令来管理。
以普通用户身份运行systemd服务
除了管理系统服务,systemd还可以管理用户服务。借助systemd用户服务,用户可以为自己的服务创建单元文件,使用systemctl 命令管理这些服务,无需root访问权限。
loginctl enable-linger强制已启动用的服务在服务器启动时启动,在服务器关闭期间停止
loginctl show-user username查看当前用户的状态
创建和管理systemd用户服务
创建~/.config/systemd/user/目录来存储单元文件。
控制新用户服务使用systemctl命令和--user选项
创建systemd单元文件
podman generate systemd --name containername --files --new
上述命令使用容器作为模型来创建配置文件,创建文件后必须删除容器,因为systemd最初期望容器不存在。
--name指定容器名称
--files指示podman在当前目录中生成单元文件,若未使用,podman将z在其标准输出中显示此文件
--new指示podman将systemd服务配置为在服务启动时创建容器,在服务停止时删除容器。
使用systemd启动和停止容器
systemctl --user start container-name #启动
systemctl --user stop container-name #停止
systemctl --user status container-name #获取状态
将容器配置为在主机启动时启动
loginctl enable-linger
systemctl --user enable container-name