使用第三方容器注册表

Azure Developer CLI (azd) 支持用于部署的外部第三方容器注册表。 若要使用此功能,需要在调用 azd 部署之前手动向外部容器注册表进行身份验证。

仅当 azd 为你管理映像操作时,才需要基于 Docker 的身份验证,例如拉取、构建、标记或推送映像。 如果某个服务配置了 services.<name>.docker.imagePassthrough: true,azd 会按原样复用已配置的远程镜像。 在这种情况下, azd 不需要 Docker 或 Podman,并且不对该服务执行任何注册表身份验证或映像生命周期步骤。

身份验证

运行 docker login,并向外部容器注册表进行身份验证。 可能需要遵循特定注册表提供程序的更多设置或配置步骤。

docker login <your-registry>

示例方案

可以将 azd 配置为从模板的 azure.yaml 文件中的外部容器注册表推送和拉取图像。 对更多容器注册表的支持为部署工作流提供了更大的灵活性。

从外部容器注册表拉取

在此示例中,在 azd 部署期间,容器从 docker.io/username/nginx:latest 中拉取,并由容器应用服务直接引用。

name: todo-nodejs-mongo-aca
metadata:
  template: todo-nodejs-mongo-aca@0.0.1-beta
services:
  nginx:
    image: docker.io/<username>/nginx:latest
    host: containerapp

注意

容器应用基础设施配置在从私有容器注册表拉取容器时,必须配置凭据。

若要在不需要 Docker 或 Podman 的情况下部署远程映像,请设置 services.<name>.image,并在 services.<name>.docker.imagePassthrough: true 中提供映像的完整限定名称(包括注册表):

name: todo-nodejs-mongo-aca
metadata:
  template: todo-nodejs-mongo-aca@0.0.1-beta
services:
  nginx:
    image: docker.io/<username>/nginx:latest
    host: containerapp
    docker:
      imagePassthrough: true

imagePassthrough 具有以下约束:

  • 需要设置 services.<name>.image。
  • 它不能与 docker.remoteBuild 结合使用。
  • 该服务不支持 azd publish 映像替代标志 --from-package 和 --to。

拉取、标记和推送到外部注册表

请考虑具有以下配置的 azure.yaml 文件:

# azure.yaml

name: todo-nodejs-mongo-aca
metadata:
  template: todo-nodejs-mongo-aca@0.0.1-beta
services:
  nginx:
    image: nginx
    host: containerapp
    docker:
      registry: docker.io/<username>
      image: nginx
      tag: latest   

该 azd deploy 命令拉取配置的 nginx 镜像。 在这种情况下,它是 Docker Hub 上的公共镜像,因此 azd 重新标记容器/镜像并将其推送到 Docker 注册表。

在执行 azd deploy 时构建、标记并推送到外部注册表

请考虑具有以下配置的 azure.yaml 文件:

# azure.yaml

name: todo-nodejs-mongo-aca
metadata:
  template: todo-nodejs-mongo-aca@0.0.1-beta
services:
  api:
    project: ./src/api
    host: containerapp
    docker:
      registry: docker.io/<username>
      image: todo-api

该 azd deploy 命令生成容器,对其进行标记,并将其推送到 docker 注册表。