Azure 容器实例
使用 ACI 在几秒内启动容器化应用程序,而无需管理服务器;配置环境变量和卷挂载,并了解 ACI 的计费方式。
Azure 容器实例 是 CoddyKit 上的免费 Azure Fundamentals 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Azure Fundamentals 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Azure Fundamentals 课程共包含 4 节课。
什么是 Azure 容器实例?
Azure Container Instances (ACI) 是在 Azure 中运行容器化工作负载的最快方式,无需管理服务器或编排器。您只需提供容器镜像,Azure 就会在共享的多租户基础设施上于几秒内运行该镜像。ACI 非常适合短时任务、批处理作业、构建代理和事件驱动型工作负载;对于这些场景,启动完整的 Kubernetes 集群会带来过多额外开销。
创建容器实例
使用单条 az container create 命令启动 ACI 容器。请指定镜像、资源组、CPU 和内存。ACI 会拉取镜像、分配资源并启动容器,通常在 5–10 秒内完成。如果您分配 DNS 名称标签,每个容器实例都会获得唯一的完全限定域名 (FQDN),从而可以立即从互联网访问。
# Run an Nginx container accessible from the internet
az container create \
--name my-nginx \
--resource-group MyRG \
--image nginx:latest \
--cpu 1 \
--memory 1 \
--dns-name-label my-nginx-demo \
--ports 80
# Access at: http://my-nginx-demo.<region>.azurecontainer.io环境变量和安全值
在创建时指定环境变量,即可向 ACI 容器传递配置。对于 API 密钥或密码等敏感值,请使用安全环境变量——部署后,这些值不会显示在 Azure 门户或 CLI 输出中,从而避免意外暴露在日志或审计记录中。安全值在运行时仍可作为普通环境变量供容器内部访问。
# Pass regular and secure environment variables
az container create \
--name my-app \
--resource-group MyRG \
--image mycontainerregistry.azurecr.io/myapp:v1.0 \
--environment-variables APP_ENV=production \
--secure-environment-variables \
DATABASE_PASSWORD='super-secret-password' \
API_KEY='my-api-key'
# View logs from the running container
az container logs --name my-app --resource-group MyRGACI 计费和资源分配
ACI 按秒计费,费用取决于您分配的 CPU 核数和内存 GB 数,并且没有最低计费时长。只有容器运行期间才会产生费用——容器停止的瞬间,计费也会停止。因此,ACI 对短时工作负载而言非常经济。每个容器组可分配 0.1 至 4 个 CPU 核心以及 0.1 至 16 GB 内存,但具体组合必须在支持范围内。
# Small: 0.5 CPU, 0.5 GB memory
az container create --name small-task --resource-group MyRG \
--image my-batch-image:latest --cpu 0.5 --memory 0.5 \
--restart-policy Never # Don't restart after completion
# Large: 4 CPU, 16 GB memory for intensive tasks
az container create --name ml-inference --resource-group MyRG \
--image ml-model:latest --cpu 4 --memory 16重启策略
ACI 支持三种重启策略,用于控制容器退出后的行为。Always(默认)会在容器每次退出时将其重启,适合长时间运行的服务。Never 只运行容器一次,然后让其保持终止状态,适合批处理作业。OnFailure 仅在容器以非零退出代码退出时重启,适合出错重试模式。
# Batch job: run once, never restart
az container create \
--name data-processor \
--resource-group MyRG \
--image my-batch-image:latest \
--restart-policy Never \
--environment-variables BATCH_DATE=2025-01-01
# Check the container's final state
az container show \
--name data-processor \
--resource-group MyRG \
--query '{state:instanceView.state, exitCode:instanceView.currentState.exitCode}'容器组:多容器部署
容器组是共享生命周期、网络和存储的一组容器,类似于 Kubernetes Pod。同一组中的容器共享本地 IP 地址和端口命名空间,因此可以通过 localhost 相互通信。常见模式是在同一组中运行一个主应用容器和一个边车容器(例如日志记录代理或代理服务器),并通过 YAML 或 ARM 模板定义它们。
# multi-container.yaml
apiVersion: '2021-09-01'
location: eastus
name: my-container-group
properties:
containers:
- name: app
properties:
image: myapp:v1.0
ports: [{port: 80}]
resources: {requests: {cpu: 1, memoryInGb: 1}}
- name: log-forwarder
properties:
image: fluent-bit:latest
resources: {requests: {cpu: 0.5, memoryInGb: 0.5}}
osType: Linux
restartPolicy: Always
type: Microsoft.ContainerInstance/containerGroups
# Deploy from YAML
# az container create --resource-group MyRG --file multi-container.yaml卷挂载:Azure Files 集成
ACI 容器默认是无状态的——容器重启时,写入其文件系统的数据会丢失。将Azure Files 共享挂载为卷,可以在容器重启后保留数据,或在同一组中的多个容器之间共享数据。创建容器实例时,请指定存储帐户名称、密钥和文件共享名称。
# Mount an Azure Files share for persistent storage
az container create \
--name stateful-app \
--resource-group MyRG \
--image myapp:v1.0 \
--azure-file-volume-account-name mystorageaccount \
--azure-file-volume-account-key '<storage-account-key>' \
--azure-file-volume-share-name myfileshare \
--azure-file-volume-mount-path /data
# Data written to /data persists in the Azure Files shareGPU 容器实例
ACI 支持用于机器学习推理、视频处理和科学计算工作负载的GPU 容器实例(K80、V100)。GPU 实例仅在部分区域可用,并且要求使用 Linux 容器。GPU 实例按 GPU/秒计费,因此非常适合突发式推理场景:启动 GPU 容器、运行模型,然后立即将其删除——成本远低于全天候运行的专用 GPU VM。
# Create a GPU-enabled container instance
az container create \
--name gpu-inference \
--resource-group MyRG \
--image my-ml-model:latest \
--gpu-count 1 \
--gpu-sku V100 \
--cpu 4 \
--memory 16 \
--os-type Linux使用虚拟网络的 ACI
将 ACI 容器组部署到VNet 内的专用子网中,可以为其分配私有 IP 地址,并允许它们访问其他连接到 VNet 的资源(数据库、VM),而无需将这些资源暴露到互联网。与 VNet 集成的 ACI 要求使用专用的委派子网(委派给 Microsoft.ContainerInstance/containerGroups),并且不支持分配公共 IP。
# Create an ACI container in a VNet
az container create \
--name private-task \
--resource-group MyRG \
--image myapp:v1.0 \
--vnet MyVNet \
--subnet ContainerSubnet \
--restart-policy Never
# The container gets a private IP from the subnet CIDR
# It can reach VNet resources (SQL, Redis, VMs) on private IPs作为虚拟 Kubelet 节点的 ACI
ACI 通过开源项目 Virtual Kubelet 以虚拟节点的形式与 AKS 集成。当 AKS 集群遇到超出其 VM 节点容量的突发需求时,Kubernetes 可以将 Pod 调度到虚拟 ACI 节点上,从而启动实际的 ACI 容器实例。这样无需预先配置额外的 VM 节点即可实现无限的突发扩展,而且您只需为突发期间使用的 ACI 计算资源付费。
# Enable virtual nodes on an AKS cluster
az aks enable-addons \
--name myAKSCluster \
--resource-group MyRG \
--addons virtual-node \
--subnet-name VirtualNodeSubnet
# Schedule a burst pod on ACI via node selector
# spec:
# nodeSelector:
# kubernetes.io/role: agent
# beta.kubernetes.io/os: linux
# type: virtual-kubelet
# tolerations:
# - key: virtual-kubelet.io/provider
# operator: Exists何时使用 ACI、AKS 与应用服务
对于短时任务、批处理作业、持续集成构建代理以及不需要 Kubernetes 额外开销的一次性容器,请选择 ACI。对于需要服务发现、运行状况检查、滚动更新和集群网络的长时间运行型多容器微服务,请选择 AKS。如果您希望使用平台即服务的便利功能(部署槽位、托管证书、内置身份验证),但不想自行管理容器网络,请选择应用服务。
快速检查
请测试您对本课中 Microsoft Azure 基础知识(AZ-900)概念的理解。
课程回顾
在本课中,您学习了:Azure Container Instances 可以在几秒内运行容器,无需管理服务器,并按 CPU 和内存的使用秒数计费;容器组允许多个容器像 Kubernetes Pod 一样共享网络和存储;重启策略(Always、Never、OnFailure)控制容器退出后的生命周期。接下来,我们将学习 Azure 的 Kubernetes 概念。
常见问题解答
「Azure 容器实例」课时是免费的吗?
是的 — 「Azure 容器实例」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Azure Fundamentals 课程的其余内容,请升级到 CoddyKit PRO。 Azure Fundamentals 课程共包含 4 节课。
「Azure 容器实例」这节课中我会学到什么?
使用 ACI 在几秒内启动容器化应用程序,而无需管理服务器;配置环境变量和卷挂载,并了解 ACI 的计费方式。 你通过在浏览器中直接运行的动手代码来练习 Azure Fundamentals,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Azure Fundamentals 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Azure Fundamentals 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「Azure 容器实例」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Azure Fundamentals 课中编写并运行代码吗?
能。每节 Azure Fundamentals 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。