如何使用私有 Docker Registry 与 Zun

Zun 默认从 Docker Hub 拉取容器镜像。但是,可以配置 Zun 从私有 Registry 拉取镜像。

本文档提供了一个示例,用于部署和配置 Zun 的 Docker Registry。有关部署 Docker Registry 的全面指南,请参阅 此处

部署私有 Docker Registry

安装私有 Docker Registry 的一种简单方法是将其作为 Zun 容器部署

$ openstack appcontainer create \
    --restart always \
    --expose-port 443 \
    --name registry \
    --environment REGISTRY_HTTP_ADDR=0.0.0.0:443 \
    --environment REGISTRY_HTTP_TLS_CERTIFICATE=/domain.crt \
    --environment REGISTRY_HTTP_TLS_KEY=/domain.key \
    registry:2

注意

根据租户网络的配置,您可能需要确保容器可以从云的其他租户访问。例如,您可能需要将浮动 IP 关联到容器。

为了使您的 Registry 可供外部主机访问,您必须使用 TLS 证书(由证书颁发机构颁发)或创建自签名证书。本文档向您展示如何生成和使用自签名证书

$ mkdir -p certs
$ cat > certs/domain.conf <<EOF
[req]
distinguished_name = req_distinguished_name
req_extensions     = req_ext
prompt = no
[req_distinguished_name]
CN = zunregistry.com
[req_ext]
subjectAltName = IP:172.24.4.49
EOF
$ openssl req \
    -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
    -x509 -days 365 -out certs/domain.crt -config certs/domain.conf

注意

zunregistry.com 替换为您的 Registry 的域名。

注意

172.24.4.49 替换为您的 Registry 的 IP 地址。

注意

您需要确保域名(即 zunregistry.com)将被解析为 IP 地址(即 172.24.4.49)。例如,您可能需要相应地编辑 /etc/hosts

将证书复制到 Registry

$ openstack appcontainer cp certs/domain.key registry:/
$ openstack appcontainer cp certs/domain.crt registry:/

配置 Docker 守护进程以接受证书

# mkdir -p /etc/docker/certs.d/zunregistry.com
# cp certs/domain.crt /etc/docker/certs.d/zunregistry.com/ca.crt

注意

zunregistry.com 替换为您的 Registry 的域名。

注意

在每个计算节点上执行这些步骤。

启动 Registry

$ openstack appcontainer start registry

验证 Registry 是否正常工作

$ docker pull ubuntu:16.04
$ docker tag ubuntu:16.04 zunregistry.com/my-ubuntu
$ docker push zunregistry.com/my-ubuntu
$ openstack appcontainer run --interactive zunregistry.com/my-ubuntu /bin/bash

注意

zunregistry.com 替换为您的 Registry 的域名。