0Pricing
Cloud & IT Cert Prep · 课时

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 myapp

ACR 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 table

ACR 的专用终结点

为了实现最高级别的安全性,请禁用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Azure 容器注册表
  2. Azure 容器实例
  3. Azure Kubernetes 概念
  4. 在 AKS 上部署工作负载
← 返回 Cloud & IT Cert Prep