本文将向您展示如何使用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
现在,您可以在整个基础结构中使用注册表。
相关主题