互联网技术 / 互联网资讯 · 2024年3月29日

开放外部访问的云注册表核心技术

要让外部主机访问仅在本地可用的注册表,必须先对传输进行 tls 保护。

获取证书

以下假设适用于示例场景:

  • 注册表的 URL 是 https://registry.example.com/
  • DNS、路由和防火墙配置允许通过端口 443 访问注册主机
  • 已从证书颁发机构 CA 获得证书
  • 如果已获得中间证书,请参阅使用中间证书
  1. 创建证书目录
    mkdir -p certs
  2. 如果注册表当前正在运行,请停止它
    docker container stop registry
  3. 重新启动注册表,并指示使用 tls 证书。将 certs 目录绑定挂载到容器中 certs/,并设置环境变量以指示容器定位 domain.crt 与 domain.key 文件。注册表在默认 https 端口 443 上运行。
    docker run -d 
    --restart=always 
    --name registry 
    -v ./certs:/certs 
    -e REGISTRY_HTTP_ADDR=0.0.0.0:443 
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt 
    -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key 
    -p 443:443

注册表客户端现在可以通过外部地址从注册表中拉取和推送镜像。示例命令如下:

docker pull ubuntu:16.04
docker tag ubuntu:16.04 registry.example.com/my-ubuntu
docker push registry.example.com/my-ubuntu
docker pull registry.example.com/my-ubuntu