用 podman 代替 docker

2019/04/20

各种容器的实现简直和 UNIX 一样乱七八糟

并且全是用 Go 写的 (???

podman 背后由 Red Hat 支持,有望成为支持各发行版自带的容器管理实现

类似的先例是 pulseaudio, systemd 和未来的 wayland

podman 目标不是容器编排,可以使用更专业的 openshift/k8s 进行容器编排

使用

  1. alias docker podman 添加到你的 sh rc 文件

非 root 使用

  1. sysctl -w kernel.unprivileged_userns_clone=1
  2. 安装 slirp4netns ,这个程序提供 root less 时的网络命名空间
  3. 参照 subuid(5) 的提示编写你的 /etc/subuid/etc/subgid 文件,这个文件提供 uid 与 gid 映射
  4. 或者按照 podman 官方的推荐运行 sudo usermod --add-subuids 10000-75535 $(whoami)

我是这样写的

# cat /etc/subuid
sa:10000:500

# cat /etc/subgid
sa:500:50

标识 sa 用户可以使用从 100000 开始的 500 各 uid 和从 500 开始的 50 个 gid

非 root 用户之间的容器镜像不共享,容器镜像保存在每个用户的 $XDG_DATA_HOME/.local/share/containers/storage

优点和与 docker lxd nspawn 等的不同

快速体验

ref

  1. Replacing Docke With Podman https://media.ccc.de/v/ASG2018-177-replacing_docker_with_podman
  2. CNI https://github.com/containernetworking/cni
  3. RunC https://github.com/opencontainers/runc
  4. OCI https://github.com/opencontainers/image-spec
  5. CRIU https://podman.io/blogs/2018/10/10/checkpoint-restore.html
  6. slirp4nets https://github.com/rootless-containers/slirp4netns