Azure Container Registry
สร้างและพุชอิมเมจ Docker ไปยัง Azure Container Registry ส่วนตัว จัดการการเข้าถึงด้วยการกำหนดบทบาท และทำให้การสร้างอิมเมจเป็นอัตโนมัติด้วย ACR Tasks
Azure Container Registry เป็นบทเรียน Azure Fundamentals ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Azure Fundamentals และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Azure Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน
Azure Container Registry คืออะไร
Azure Container Registry (ACR) คือบริการรีจิสทรี Docker ส่วนตัวที่มีการจัดการ ซึ่งสร้างบน Docker Registry 2.0 แบบโอเพนซอร์ส บริการนี้จัดเก็บและจัดการอิมเมจคอนเทนเนอร์และอาร์ติแฟกต์ที่เกี่ยวข้อง (แผนภูมิ Helm, อาร์ติแฟกต์ OCI) ที่ใช้ในการปรับใช้ Azure ของคุณ ACR ผสานรวมกับ Azure Kubernetes Service (AKS), Azure Container Instances (ACI) และ App Service ได้โดยตรง ทำให้ดึงอิมเมจได้อย่างราบรื่นโดยไม่ต้องจัดการข้อมูลประจำตัว
ระดับบริการ ACR
ACR มีระดับบริการสามระดับ Basic ปรับค่าใช้จ่ายให้เหมาะกับการเรียนรู้และการพัฒนาที่มีปริมาณงานต่ำ โดยมีพื้นที่จัดเก็บ 10 GB และรองรับเว็บฮุกอย่างจำกัด 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 แล้วจึงพุช URL ของเซิร์ฟเวอร์การเข้าสู่ระบบ ACR มีรูปแบบ <registryname>.azurecr.io การตรวจสอบสิทธิ์จะใช้ข้อมูลประจำตัว Azure AD ผ่าน az acr login (สำหรับการใช้งานแบบโต้ตอบ) หรือใช้รหัสผ่านผู้ดูแลระบบ ACR หรือ Service Principal สำหรับไปป์ไลน์อัตโนมัติ
# 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 จะสร้างรายงานที่แสดงรายการช่องโหว่ตามระดับความรุนแรง (วิกฤต สูง ปานกลาง ต่ำ) และให้คำแนะนำในการแก้ไข คุณสามารถกำหนดนโยบายเพื่อบล็อกการปรับใช้อิมเมจที่มีช่องโหว่ระดับวิกฤตไปยังคลัสเตอร์ AKS ผ่านการผสานรวมกับ Azure Policy ได้
# 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 และเชื่อมต่อกับ ACR ผ่าน ปลายทางส่วนตัวภายใน VNet ของคุณเท่านั้น วิธีนี้ช่วยให้มั่นใจว่าอิมเมจคอนเทนเนอร์จะไม่ถูกถ่ายโอนผ่านอินเทอร์เน็ตสาธารณะ โดยการดึงทั้งหมดจะดำเนินการผ่านโครงข่ายส่วนตัวของ Azure กำหนดค่า โซน DNS ส่วนตัว (privatelink.azurecr.io) เพื่อแปลงชื่อโฮสต์ของรีจิสทรีเป็นที่อยู่ IP ส่วนตัวภายใน VNet ของคุณ
# 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 ซึ่งจะมอบบทบาท AcrPull ให้กับข้อมูลประจำตัวที่มีการจัดการของ AKS โดยอัตโนมัติ หลังจากแนบแล้ว ข้อกำหนดของ Pod ใน Kubernetes จะอ้างอิงอิมเมจโดยใช้ชื่อโฮสต์ 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 Fundamentals (AZ-900) จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า Azure Container Registry (ACR) คือรีจิสทรีส่วนตัวที่มีการจัดการสำหรับจัดเก็บอิมเมจ Docker, ACR Tasks ช่วยให้สร้างอิมเมจบนคลาวด์ได้โดยไม่ต้องใช้ Docker daemon ภายในเครื่อง และ RBAC roles (AcrPull, AcrPush) ใช้ควบคุมการเข้าถึงสำหรับบริการการปรับใช้และ pipeline ของ CI/CD ต่อไปเราจะสำรวจ Azure Container Instances
คำถามที่พบบ่อย
บทเรียน “Azure Container Registry” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Azure Container Registry” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Azure Fundamentals ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Azure Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Azure Container Registry”
สร้างและพุชอิมเมจ Docker ไปยัง Azure Container Registry ส่วนตัว จัดการการเข้าถึงด้วยการกำหนดบทบาท และทำให้การสร้างอิมเมจเป็นอัตโนมัติด้วย ACR Tasks คุณปฏิบัติ Azure Fundamentals ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Azure Fundamentals หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Azure Fundamentals บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “Azure Container Registry” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Azure Fundamentals นี้ได้ไหม
ได้ บทเรียน Azure Fundamentals ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Azure Container Registry
- Azure Container Instances
- แนวคิด Kubernetes สำหรับ Azure
- การปรับใช้ภาระงานบน AKS