为什么要使用podman而不是docker

  1. Rootless 模式:Podman 提供了一个称为 Rootless 模式的选项,可以让非特权用户在没有 root 权限的情况下运行容器。这对于开发人员和用户来说是一个重要的特性,因为它消除了以 root 权限运行容器所带来的潜在风险。
  2. 集成与兼容性:Podman 与 Docker 不同,Podman 不需要一个守护进程来管理容器,这使得 Podman 更加适合与其他工具和流程集成。
  3. 开放源代码社区: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 测试容器是否正常运行。