Azure Container Instances
เปิดใช้แอปพลิเคชันแบบคอนเทนเนอร์ได้ภายในไม่กี่วินาทีด้วย ACI โดยไม่ต้องจัดการเซิร์ฟเวอร์ กำหนดค่าตัวแปรสภาพแวดล้อมและการเมานต์โวลุม และทำความเข้าใจการคิดค่าบริการของ ACI
Azure Container Instances เป็นบทเรียน Azure Fundamentals ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Azure Fundamentals และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Azure Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน
Azure Container Instances คืออะไร
Azure Container Instances (ACI) คือวิธีที่รวดเร็วที่สุดในการเรียกใช้เวิร์กโหลดแบบคอนเทนเนอร์ใน Azure โดยไม่ต้องจัดการเซิร์ฟเวอร์หรือระบบจัดการคลัสเตอร์ใด ๆ คุณระบุอิมเมจคอนเทนเนอร์ แล้ว Azure จะเรียกใช้อิมเมจนั้นภายในไม่กี่วินาทีบนโครงสร้างพื้นฐานแบบใช้ร่วมกันและรองรับผู้เช่าหลายราย ACI เหมาะอย่างยิ่งสำหรับงานที่มีอายุสั้น งานแบบชุด ตัวแทนสร้าง และเวิร์กโหลดที่ขับเคลื่อนด้วยเหตุการณ์ ซึ่งการเริ่มต้นคลัสเตอร์ Kubernetes เต็มรูปแบบจะเป็นภาระเกินความจำเป็น
การสร้าง Container Instance
เปิดใช้คอนเทนเนอร์ ACI ด้วยคำสั่ง az container create เพียงคำสั่งเดียว โดยระบุอิมเมจ กลุ่มทรัพยากร CPU และหน่วยความจำ ACI จะดึงอิมเมจ จัดสรรทรัพยากร และเริ่มต้นคอนเทนเนอร์ โดยทั่วไปใช้เวลาเพียง 5-10 วินาที Container instance แต่ละรายการจะได้รับ fully qualified domain name (FQDN) ที่ไม่ซ้ำกัน หากคุณกำหนดป้ายชื่อ DNS ทำให้เข้าถึงได้จากอินเทอร์เน็ตทันที
# 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 MyRGการเรียกเก็บเงินและการจัดสรรทรัพยากรของ ACI
ACI คิดค่าบริการเป็น วินาที ตามจำนวนคอร์ CPU และหน่วยความจำ GB ที่คุณจัดสรร โดยไม่มีระยะเวลาขั้นต่ำในการคิดค่าบริการ คุณจะจ่ายเฉพาะช่วงที่คอนเทนเนอร์กำลังทำงานเท่านั้น ทันทีที่คอนเทนเนอร์หยุดทำงาน การคิดค่าบริการก็จะหยุดลง ทำให้ ACI คุ้มค่าอย่างมากสำหรับเวิร์กโหลดที่มีอายุสั้น คุณสามารถจัดสรรคอร์ CPU ได้ตั้งแต่ 0.1 ถึง 4 คอร์ และหน่วยความจำตั้งแต่ 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 รองรับ นโยบายการเริ่มต้นใหม่ 3 แบบเพื่อควบคุมพฤติกรรมของคอนเทนเนอร์หลังจากออกจากการทำงาน 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}'กลุ่มคอนเทนเนอร์: การปรับใช้หลายคอนเทนเนอร์
กลุ่มคอนเทนเนอร์ คือชุดของคอนเทนเนอร์ที่ใช้วงจรการทำงาน เครือข่าย และพื้นที่จัดเก็บร่วมกัน ซึ่งคล้ายกับ Pod ของ Kubernetes คอนเทนเนอร์ในกลุ่มเดียวกันใช้ที่อยู่ 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 เป็นโวลุมเพื่อคงข้อมูลไว้ระหว่างการเริ่มต้นคอนเทนเนอร์ใหม่ หรือแบ่งปันข้อมูลระหว่างคอนเทนเนอร์ในกลุ่มเดียวกัน ระบุชื่อบัญชีพื้นที่จัดเก็บ คีย์ และชื่อส่วนใช้ร่วมกันของไฟล์ขณะสร้าง Container instance
# 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 shareContainer Instances ที่ใช้ GPU
ACI รองรับ GPU container instances (K80, V100) สำหรับเวิร์กโหลดการอนุมาน ML การประมวลผลวิดีโอ และการคำนวณทางวิทยาศาสตร์ Instance ที่ใช้ GPU มีให้บริการในบางภูมิภาคและต้องใช้คอนเทนเนอร์ Linux โดยคิดค่าบริการต่อ GPU/วินาที จึงประหยัดสำหรับสถานการณ์การอนุมานแบบเร่งด่วนที่คุณเริ่มต้นคอนเทนเนอร์ GPU เรียกใช้โมเดล แล้วปิดการทำงานทันที ซึ่งมีค่าใช้จ่ายถูกกว่า VM ที่ใช้ GPU โดยเฉพาะและทำงานตลอด 24 ชั่วโมงอย่างมาก
# 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 LinuxACI กับเครือข่ายเสมือน
ปรับใช้กลุ่มคอนเทนเนอร์ ACI ลงใน ซับเน็ตเฉพาะภายใน VNet เพื่อให้มีที่อยู่ IP ส่วนตัวและสามารถเข้าถึงทรัพยากรอื่นที่เชื่อมต่อกับ VNet เช่น ฐานข้อมูลและ VMs ได้โดยไม่ต้องเปิดเผยต่ออินเทอร์เน็ต ACI ที่ผสานรวมกับ VNet ต้องใช้ซับเน็ตเฉพาะที่มีการมอบหมาย (มอบหมายให้กับ 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 IPsACI ในฐานะโหนด Kubelet เสมือน
ACI ผสานรวมกับ AKS เป็น โหนดเสมือน ผ่านโครงการโอเพนซอร์ส Virtual Kubelet เมื่อคลัสเตอร์ AKS มีความต้องการใช้งานเพิ่มขึ้นอย่างรวดเร็วจนเกินความจุของโหนด VM แล้ว Kubernetes สามารถกำหนดเวลาให้ Pod ทำงานบนโหนด ACI เสมือนได้ โดยจะเริ่มต้น Container instances จริง วิธีนี้ช่วยให้เพิ่มขนาดแบบเร่งด่วนได้อย่างไม่จำกัดโดยไม่ต้องจัดเตรียมโหนด 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 หรือ App Service เมื่อใด
เลือกใช้ ACI สำหรับงานที่มีอายุสั้น งานแบบชุด ตัวแทนสร้าง CI และคอนเทนเนอร์ที่ใช้ครั้งเดียว ซึ่งไม่จำเป็นต้องมีภาระจาก Kubernetes เลือกใช้ AKS สำหรับไมโครเซอร์วิสที่ทำงานต่อเนื่องและมีหลายคอนเทนเนอร์ ซึ่งต้องใช้การค้นหาบริการ การตรวจสอบสถานะ การอัปเดตแบบทยอย และเครือข่ายของคลัสเตอร์ เลือกใช้ บริการแอป เมื่อคุณต้องการความสะดวกแบบ PaaS เช่น ช่องการปรับใช้ ใบรับรองที่มีการจัดการ และการยืนยันตัวตนในตัว โดยไม่ต้องจัดการเครือข่ายคอนเทนเนอร์ด้วยตนเอง
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจแนวคิด Microsoft Azure Fundamentals (AZ-900) จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า Azure Container Instances เรียกใช้คอนเทนเนอร์ได้ภายในไม่กี่วินาทีโดยไม่ต้องจัดการเซิร์ฟเวอร์ คิดค่าบริการต่อวินาทีตาม CPU และหน่วยความจำ กลุ่มคอนเทนเนอร์ ช่วยให้คอนเทนเนอร์หลายรายการใช้เครือข่ายและพื้นที่จัดเก็บร่วมกันได้เหมือน Pod ของ Kubernetes และ นโยบายการเริ่มต้นใหม่ (Always, Never, OnFailure) ควบคุมวงจรการทำงานของคอนเทนเนอร์หลังออกจากการทำงาน ต่อไปเราจะสำรวจแนวคิด Kubernetes สำหรับ Azure
คำถามที่พบบ่อย
บทเรียน “Azure Container Instances” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Azure Container Instances” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Azure Fundamentals ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Azure Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Azure Container Instances”
เปิดใช้แอปพลิเคชันแบบคอนเทนเนอร์ได้ภายในไม่กี่วินาทีด้วย ACI โดยไม่ต้องจัดการเซิร์ฟเวอร์ กำหนดค่าตัวแปรสภาพแวดล้อมและการเมานต์โวลุม และทำความเข้าใจการคิดค่าบริการของ ACI คุณปฏิบัติ Azure Fundamentals ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Azure Fundamentals หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Azure Fundamentals บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “Azure Container Instances” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Azure Fundamentals นี้ได้ไหม
ได้ บทเรียน Azure Fundamentals ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Azure Container Registry
- Azure Container Instances
- แนวคิด Kubernetes สำหรับ Azure
- การปรับใช้ภาระงานบน AKS