背景

容器在risc-v社区比较流行。这里介绍容器在研发环境的实践,能够单向拉取镜像运行,不能推送。

+------------------------------------+        +------------------------------+       +-----------+
| Upstream Docker                    |        | Pull-Through Cache           |       | Client    |
| Registry                           |        | Docker Registry              |       | (host001) |
| (https://registry-1.docker.io)     | -----> | (registry.icinfra.cn:5000)   | ----> |           |
+------------------------------------+        +------------------------------+       +-----------+

配置

Pull-through cache docker registry

根据 https://docs.docker.com/docker-hub/mirror/#run-a-registry-as-a-pull-through-cache 介绍,配置/etc/docker/registry/config.yml文件里的proxy.remoteurl为外部registry。

registry容器可以通过传入REGISTRY_PROXY_REMOTEURL环境变量来完成配置,命令如下:

podman run -d -p 5000:5000 --name registry-cache -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io registry:2

Client

在客户端侧配置registry地址,让podman或docker命令使用。

cat > ~/.config/containers/registries.conf <<EOF
[registries.insecure]
 registries = ['registry.icinfra.cn:5000']
EOF

完毕。

附录

  1. https://distribution.github.io/distribution/about/configuration/ 与 https://distribution.github.io/distribution/recipes/mirror/ 提到,podman push到pull-through cache是不支持的。满足“禁止用户push”的需求。
  2. https://www.icinfra.cn/blog/2024/rootless-podman-and-nfs/ 容器镜像层不能放在NFS,用户数据可以通过-v映射NFS目录进去使用。
  3. https://www.redhat.com/sysadmin/rootless-podman-user-namespace-modes 运行 rootless容器 需要打开subordinate ID。