为什么要使用podman而不是docker
- Rootless 模式:Podman 提供了一个称为 Rootless 模式的选项,可以让非特权用户在没有 root 权限的情况下运行容器。这对于开发人员和用户来说是一个重要的特性,因为它消除了以 root 权限运行容器所带来的潜在风险。
- 集成与兼容性:Podman 与 Docker 不同,Podman 不需要一个守护进程来管理容器,这使得 Podman 更加适合与其他工具和流程集成。
- 开放源代码社区:Podman 是一个开放源代码项目,由 Red Hat 公司领导并由一个活跃的社区支持。
sudo pacman -S podman
rootless(无根)配置
添加非管理员用户
# 创建非管理员用户poduser,用来运行podman
sudo useradd -m poduser
为用户poduser启用延迟(enable lingering)
# 启用延迟(enable lingering), 防止注销后容器关闭
loginctl enable-linger poduser
检查配置
# 确定用户存在于文件 /etc/subuid 中
# 比如 poduser:100000:65536
cat /etc/subuid
如果用户不存在于文件中
执行以下命令将范围添加到文件中
$ sudo usermod --add-subuids 10000-75535 poduser
$ sudo usermod --add-subgids 10000-75535 poduser
或者直接手动添加内容。
$ echo poduser:10000:65536 >> /etc/subuid
$ echo poduser:10000:65536 >> /etc/subgid
之后使用登录用户poduser (使用tty或者ssh连接)。
用户poduser操作
加载变更
# 加载/etc/subuid的变更
podman system migrate
测试
运行
# 运行helloworld测试
podman run --rm hello-world
返回
!... Hello Podman World ...!
.--"--.
/ - - \
/ (O) (O) \
~~~| -=(,Y,)=- |
.---. /` \ |~~
~/ o o \~~~~.----. ~~
| =(X)= |~ / (O (O) \
~~~~~~~ ~| =(Y_)=- |
~~~~ ~~~| U |~~
Project: https://github.com/containers/podman
Website: https://podman.io
Documents: https://docs.podman.io
Twitter: @Podman_io
创建容器 – 青龙面板为例
# 注意,podman共享目录要先建好目录,拉镜像要加docker.io,。
# 我们使用systemctl管理容器,所以不需要使用--restart unless-stopped
cd ~
mkdir -p ql/data
podman run -dit \
-v $PWD/ql/data:/ql/data \
-p 5700:5700 \
--name qinglong \
--hostname qinglong \
docker.io/whyour/qinglong:latest
设置自启动
# 如果没有文件夹,先创建文件夹
mkdir -p ~/.config/systemd/user/
# 自动生成podman容器的systemctl文件
# 注意:--name 后面的字段要和创建容器时一样。
podman generate systemd --name qinglong > ~/.config/systemd/user/container-qinglong.service
# 自启动
systemctl enable --user container-qinglong.service
# 启动容器
systemctl start --user container-qinglong.service
结束
# 测试用户退出后是否容器正常运行
exit
访问 ip:5700 测试容器是否正常运行。