Registry, CI & Deploy — ภาพรวมโมดูล
Container registry คืออะไร?
หัวข้อที่มีชื่อว่า “Container registry คืออะไร?”เมื่อคุณ build Docker image แล้ว image นั้นจะอยู่แค่บนเครื่องของคุณเท่านั้น Registry คือ server ที่ทำหน้าที่จัดเก็บและแจกจ่าย image เพื่อให้เครื่องอื่น ๆ — CI runner, cloud server, หรือเครื่องของเพื่อนร่วมทีม — สามารถ pull และรัน image เดียวกันได้
ขั้นตอนมีอยู่เสมอสามขั้นตอนเดิม:
Build → Tag → Push (เครื่องของคุณ / CI runner) ↓ Registry ↓ Pull → Run (เซิร์ฟเวอร์ deploy)แต่ละขั้นตอนตรงกับ Docker command ที่คุณรู้จักแล้ว (หรือจะได้เรียนในโมดูลนี้):
docker build -t myapp:1.0 .docker tag myapp:1.0 docker.io/acme/myapp:1.0docker push docker.io/acme/myapp:1.0# --- บนเซิร์ฟเวอร์ ---docker pull docker.io/acme/myapp:1.0docker run -d docker.io/acme/myapp:1.0Docker Hub เทียบกับ registry อื่น ๆ
หัวข้อที่มีชื่อว่า “Docker Hub เทียบกับ registry อื่น ๆ”| Registry | ที่อยู่ | หมายเหตุ |
|---|---|---|
| Docker Hub | docker.io (ค่าเริ่มต้น) | Registry สาธารณะที่ใหญ่ที่สุด; repo สาธารณะฟรี |
| GHCR | ghcr.io | GitHub Container Registry; รวมกับ GitHub Actions |
| ECR | *.dkr.ecr.*.amazonaws.com | ของ AWS; ใช้ IAM auth |
| GAR | *.pkg.dev | Google Artifact Registry |
| Self-hosted | ทุก host | รัน registry:2 เอง |
เมื่อไม่ระบุที่อยู่ registry Docker จะใช้ docker.io เป็นค่าเริ่มต้น เช่น FROM node:22-alpine เป็นชื่อย่อของ FROM docker.io/library/node:22-alpine
สิ่งที่โมดูลนี้ครอบคลุม
หัวข้อที่มีชื่อว่า “สิ่งที่โมดูลนี้ครอบคลุม”| บทเรียน | สิ่งที่คุณจะเรียนรู้ |
|---|---|
| หน้านี้ | Registry, workflow การแจกจ่าย image, Docker Hub เทียบกับตัวเลือกอื่น |
| Docker Hub | บัญชี, repo, สาธารณะ vs ส่วนตัว, docker login, rate limits |
| Tag, Push & Pull | รูปแบบการตั้งชื่อ, docker tag, docker push, docker pull, version tags |
| GitHub Actions CI | Build & push อัตโนมัติด้วย docker/build-push-action |
| Deploy basics | docker run -d, --restart, rolling updates, secrets บน host |
ลองทำ: pull และรัน public image
หัวข้อที่มีชื่อว่า “ลองทำ: pull และรัน public image”ไม่ต้องใช้ credentials — image สาธารณะบน Docker Hub สามารถ pull ได้โดยตรงจาก Play with Docker ลองเลยตอนนี้
# Pull a public image from Docker Hub
docker pull docker.io/library/hello-world:latest
# Run it
docker run --rm hello-world
# Pull an nginx image and check the tag
docker pull nginx:1.27-alpine
docker images nginx