Azure 容器注册表
将 Docker 映像构建并推送到专用 Azure 容器注册表,使用角色分配管理访问权限,并通过 ACR Tasks 自动执行映像构建。
Azure 容器注册表 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。
什么是 Azure Container Registry?
Azure Container Registry(ACR)是一项托管的专用 Docker 注册表服务,基于开源 Docker Registry 2.0 构建。它用于存储和管理 Azure 部署所使用的容器映像及相关项目(Helm 图表、OCI 项目)。ACR 与 Azure Kubernetes Service(AKS)、Azure Container Instances(ACI)和 App Service 原生集成,可实现无缝拉取映像,而无需管理凭据。
ACR 服务层级
ACR 提供三个服务层级。Basic 针对学习和低吞吐量开发进行了成本优化,提供 10 GB 存储空间和有限的 webhook 支持。Standard 增加了异地复制功能和更高的吞吐量,适合大多数生产工作负载。Premium 包含异地复制、内容信任、专用链接、客户管理的密钥以及最高带宽,适用于企业安全要求。
# Create a Premium ACR in East US
az acr create \
--name mycontainerregistry \
--resource-group MyRG \
--location eastus \
--sku Premium
# List ACR instances in the subscription
az acr list --query '[].{name:name, sku:sku.name, loginServer:loginServer}' -o table将映像推送到 ACR
要将 Docker 映像推送到 ACR,请先对 Docker 客户端进行身份验证,再使用 ACR 登录服务器主机名为本地映像添加标记,最后执行推送。ACR 登录服务器 URL 遵循 <registryname>.azurecr.io 模式。身份验证可以通过 az acr login 使用 Azure AD 凭据完成(适用于交互式使用),也可以使用 ACR 管理员密码或服务主体完成自动化流水线身份验证。
# Authenticate to ACR
az acr login --name mycontainerregistry
# Tag a local image for ACR
docker tag myapp:latest mycontainerregistry.azurecr.io/myapp:v1.0
# Push the image
docker push mycontainerregistry.azurecr.io/myapp:v1.0
# List images in the registry
az acr repository list --name mycontainerregistry -o table
az acr repository show-tags --name mycontainerregistry --repository myappACR Tasks:基于云的构建
ACR Tasks 允许您在云中构建 Docker 映像,而无需本地 Docker 守护进程。快速任务(az acr build)会将构建上下文发送到 ACR,并在远程运行 Dockerfile,生成的映像会直接存储在注册表中。基于计划或触发器的任务可以在基础映像更新或代码提交到 GitHub 时自动重新构建映像,从而无需单独的构建代理即可实现完整的容器 CI 流水线。
# Quick task: build and push without local Docker
az acr build \
--registry mycontainerregistry \
--image myapp:v1.0 \
. # build context (current directory with Dockerfile)
# Define a multi-step ACR Task triggered on commit
az acr task create \
--name buildAndTest \
--registry mycontainerregistry \
--context https://github.com/myorg/myrepo.git \
--file acr-task.yaml \
--git-access-token <GITHUB_PAT>使用 RBAC 进行访问控制
ACR 与 Azure RBAC 集成,可实现精细化访问控制。内置的 ACR 角色包括 AcrPull(只能拉取映像,用于部署服务)、AcrPush(拉取和推送,用于 CI/CD 流水线)以及 AcrDelete(管理映像标记)。将 AcrPull 角色分配给 AKS 或 App Service 托管标识,使容器无需在任何位置存储凭据即可拉取映像。
# Grant AKS cluster's managed identity the AcrPull role
ACR_ID=$(az acr show --name mycontainerregistry --resource-group MyRG --query id -o tsv)
AKS_IDENTITY=$(az aks show --name myAKSCluster --resource-group MyRG \
--query identityProfile.kubeletidentity.objectId -o tsv)
az role assignment create \
--assignee $AKS_IDENTITY \
--role AcrPull \
--scope $ACR_ID面向全球部署的异地复制
异地复制(Premium 层)会将您的注册表复制到多个 Azure 区域。当某个区域中的 AKS 或 ACI 拉取映像时,会从最近的副本读取,而不是访问远程注册表,从而降低延迟和出口费用。复制过程对用户透明——相同的映像 URI 可在全球范围内使用,ACR 会自动将拉取请求路由到地理位置最近的副本。
# Add a geo-replication to West Europe
az acr replication create \
--name westeurope \
--registry mycontainerregistry \
--location westeurope
# List all replicas
az acr replication list \
--registry mycontainerregistry \
--query '[].{name:name, location:location, status:provisioningState}' -o table内容信任和映像签名
内容信任(Premium 层)使用 Docker Notary 确保只有经过签名的映像才能从注册表中拉取。启用 ACR 内容信任后,未签名的映像会被拒绝。签名通过 CI 流水线中的 Docker Content Trust 工具链和受信任的密钥对完成。这可以防止恶意映像被推送并部署到生产环境的供应链攻击。
# Enable content trust on the registry
az acr config content-trust update \
--registry mycontainerregistry \
--status enabled
# Sign an image when pushing (DOCKER_CONTENT_TRUST env var)
# export DOCKER_CONTENT_TRUST=1
# docker push mycontainerregistry.azurecr.io/myapp:v1.0
# (Docker prompts for signing key passphrase)使用 Defender 扫描漏洞
启用 Microsoft Defender for Containers,即可自动扫描每个推送到 ACR 的映像,检查其中已知的操作系统层和应用层漏洞(CVE)。Defender 会生成报告,按严重性(严重、高、中、低)列出漏洞,并提供修复指导。通过 Azure Policy 集成,您可以配置策略,阻止包含严重漏洞的映像部署到 AKS 群集。
# Enable Defender for Containers on the subscription
az security pricing create \
--name Containers \
--tier Standard
# View vulnerability assessment results
az security assessment list \
--query "[?contains(displayName, 'Container')].{name:displayName, status:status.code}" \
-o tableACR 的专用终结点
为了实现最高级别的安全性,请禁用 ACR 的公共网络访问,仅通过 VNet 内的专用终结点连接到 ACR。这样可以确保容器映像不会通过公共互联网传输,所有拉取操作都会经过 Azure 的专用骨干网络。配置专用 DNS 区域(privatelink.azurecr.io),将注册表主机名解析为 VNet 内的专用 IP 地址。
# Create a private endpoint for ACR
az network private-endpoint create \
--name acr-private-endpoint \
--resource-group MyRG \
--vnet-name MyVNet \
--subnet PrivateEndpointSubnet \
--private-connection-resource-id \
$(az acr show --name mycontainerregistry --query id -o tsv) \
--group-id registry \
--connection-name acrConnection
# Disable public access
az acr update \
--name mycontainerregistry \
--public-network-enabled false生命周期管理:清理旧映像
如果没有生命周期管理,容器注册表会累积数千个旧映像标记,占用昂贵的存储空间。使用ACR 清理任务(一种内置的定时任务)删除未标记的清单以及超过指定时长的标记。使用 az acr task create 和 acr purge 命令按计划运行清理操作,针对特定存储库执行清理,同时保留一定数量的最新标记。
# Create a scheduled purge task: delete tags older than 30d
az acr task create \
--name scheduledPurge \
--registry mycontainerregistry \
--cmd 'acr purge --filter myapp:.* --ago 30d --keep 5 --untagged' \
--schedule '0 1 * * *' \
--context /dev/null将 ACR 与 AKS 集成
将 AKS 连接到 ACR 的最简单方式是使用 az aks update --attach-acr 命令,该命令会自动为 AKS 托管标识授予 AcrPull 角色。完成连接后,Kubernetes Pod 规范只需使用完整的 ACR 主机名来引用镜像即可——不需要配置 imagePullSecrets,因为 AKS 会在节点级别透明地使用托管标识进行身份验证。
# Attach ACR to an existing AKS cluster
az aks update \
--name myAKSCluster \
--resource-group MyRG \
--attach-acr mycontainerregistry
# Now pods can use ACR images without imagePullSecrets
# Example pod spec:
# spec:
# containers:
# - name: myapp
# image: mycontainerregistry.azurecr.io/myapp:v1.0快速检查
请测试您对本课中 Microsoft Azure 基础知识(AZ-900)概念的理解。
课程回顾
在本课中,您学习了:Azure Container Registry (ACR) 是用于存储 Docker 镜像的托管私有注册表;ACR Tasks 支持在云端构建镜像,无需本地 Docker 守护进程;RBAC 角色(AcrPull、AcrPush)控制部署服务和持续集成/持续交付管道的访问权限。接下来,我们将学习 Azure 容器实例。
常见问题解答
「Azure 容器注册表」课时是免费的吗?
是的 — 「Azure 容器注册表」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。
「Azure 容器注册表」这节课中我会学到什么?
将 Docker 映像构建并推送到专用 Azure 容器注册表,使用角色分配管理访问权限,并通过 ACR Tasks 自动执行映像构建。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cloud & IT Cert Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「Azure 容器注册表」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?
能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Azure 容器注册表
- Azure 容器实例
- Azure Kubernetes 概念
- 在 AKS 上部署工作负载