本文将向您展示如何使用Podman创建本地Docker容器映像注册表。容器映像专用注册表使您可以安全地在本地工作,因为您可以管理所有内容,使用容器注册表,您可以在任何计算机上构建容器映像,然后使用Docker或Podman CLI将其推送到本地容器注册表。Podman是一个无守护进程的容器引擎,用于在Linux系统上开发、管理和运行OCI容器。一旦安装了Podman(参考:在CentOS 8/RHEL 8系统上安装和使用Podman的方法),就可以继续使用它来构建本地Docker注册表。
一、为Docker注册表创建域 我将为容器注册表创建一个子域:registry.computingforgeeks.com,并为其更新DNS记录。
启用记录后,确认记录已填充: $ dig A registry.computingforgeeks.com
二、创建不安全的注册表 如果您在本地托管域,或者想使用没有SSL证书的注册表,尽管不建议将其用于生产环境,也可以这样做。 确认已安装podman: $ podman version Version:1.4.2-stable2 RemoteAPI Version:1 Go Version:go1.12.8 OS/Arch:linux/amd64 创建容器数据目录: sudo mkdir -p /var/lib/registry 创建您的不安全私有注册表,如下所示: podman run --privileged -d \ --name registry \ -p 5000:5000 \ -v /var/lib/registry:/var/lib/registry \ --restart=always \ registry:2 注册表内容将存储在主机系统上的/var/lib/containers/registry中。 这是我的执行输出:
检查注册表容器是否正在运行: $ podman ps
下面介绍使用不安全的注册表。 默认情况下,Docker/Podman客户端将尝试通过HTTPS访问注册表,由于我们拥有HTTP注册表,因此我们需要进行一些更改以使用不安全的注册表。 对于Podman,编辑/etc/containers/registries.conf文件,然后在[registries.insecure]块下添加不安全的注册表: $ sudo vi /etc/containers/registries.conf registries = ['myregistry.local','registry.computingforgeeks.com:5000'] 对于Docker,编辑/etc/sysconfig/docker并添加–insecure-registry选项: OPTIONS='--insecure-registry registry.computingforgeeks.com:5000 --selinux-enabled .....' 进行更改后,您需要重新启动docker服务: sudo systemctl restart docker 测试注册表: $ podman pull hello-world $ podman images $ podman tag docker.io/library/hello-world registry.computingforgeeks.com:5000/hello-world $ podman images $ podman push registry.computingforgeeks.com:5000/hello-world
检查注册表服务器主机上的注册表内容: $ ls /var/lib/registry/docker/registry/v2/repositories/ hello-world 您可以通过运行以下命令将映像拉到其他主机上: podman pull registry.computingforgeeks.com:5000/hello-world
三、使用加密证书创建安全的注册表 创建容器数据目录: sudo mkdir -p /var/lib/registry 安装certbot-auto工具,我们将使用该工具为注册表获取Let's Encrypt SSL证书: wget https://dl.eff.org/certbot-auto chmod a+x certbot-auto sudo mv certbot-auto /usr/local/bin/certbot-auto sudo firewall-cmd --add-service https --permanent sudo firewall-cmd --reload 获取加密的SSL证书: export DOMAIN="registry.computingforgeeks.com" export EMAIL="alerts@computingforgeeks.com" sudo /usr/local/bin/certbot-auto --standalone certonly -d $DOMAIN --preferred-challenges http --agree-tos -n -m $EMAIL --keep-until-expiring 设置您的电子邮件地址和域名用于注册。 将显示保存证书和私钥的路径:
将cron设置为autorenew: # crontab -e 00 3 * * * /usr/local/bin/certbot-auto renew --quiet 现在创建一个安全的Container注册表: export REG_DOMAIN="registry.computingforgeeks.com" podman run --privileged -d \ --name registry \ -p 5000:5000 \ -v /var/lib/registry:/var/lib/registry \ -v /etc/letsencrypt/live/${REG_DOMAIN}/fullchain.pem:/certs/fullchain.pem \ -v /etc/letsencrypt/live/${REG_DOMAIN}/privkey.pem:/certs/privkey.pem \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.pem \ -e REGISTRY_HTTP_TLS_KEY=/certs/privkey.pem \ registry:2 检查容器是否成功启动: $ podman ps
确认它有效: $ podman pull nginx $ podman images $ podman tag docker.io/library/nginx registry.computingforgeeks.com:5000/nginx $ podman images $ podman push registry.computingforgeeks.com:5000/nginx
现在,您可以在整个基础结构中使用注册表。
相关主题 |