云网牛站
所在位置:首页 > Linux云服务器 > 使用Podman设置Docker容器注册表并加密SSL

使用Podman设置Docker容器注册表并加密SSL

2020-01-18 21:29:50作者:连一续稿源:云网牛站

本文将向您展示如何使用Podman创建本地Docker容器映像注册表。容器映像专用注册表使您可以安全地在本地工作,因为您可以管理所有内容,使用容器注册表,您可以在任何计算机上构建容器映像,然后使用Docker或Podman CLI将其推送到本地容器注册表。Podman是一个无守护进程的容器引擎,用于在Linux系统上开发、管理和运行OCI容器。一旦安装了Podman(参考:在CentOS 8/RHEL 8系统上安装和使用Podman的方法),就可以继续使用它来构建本地Docker注册表。

 

一、为Docker注册表创建域

我将为容器注册表创建一个子域:registry.computingforgeeks.com,并为其更新DNS记录。

使用Podman设置Docker容器注册表并加密SSL

启用记录后,确认记录已填充:

$ dig A registry.computingforgeeks.com

使用Podman设置Docker容器注册表并加密SSL

 

二、创建不安全的注册表

如果您在本地托管域,或者想使用没有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设置Docker容器注册表并加密SSL

检查注册表容器是否正在运行:

$ podman ps

使用Podman设置Docker容器注册表并加密SSL

下面介绍使用不安全的注册表。

默认情况下,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

使用Podman设置Docker容器注册表并加密SSL

检查注册表服务器主机上的注册表内容:

$ 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

设置您的电子邮件地址和域名用于注册。

将显示保存证书和私钥的路径:

使用Podman设置Docker容器注册表并加密SSL

将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设置Docker容器注册表并加密SSL

确认它有效:

$ 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

使用Podman设置Docker容器注册表并加密SSL

现在,您可以在整个基础结构中使用注册表。

 

相关主题

使用Podman运行Docker容器的方法

精选文章
热门文章