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 注册表。