Docker Hub
Docker Hub คืออะไร?
หัวข้อที่มีชื่อว่า “Docker Hub คืออะไร?”Docker Hub (hub.docker.com) คือ registry สาธารณะค่าเริ่มต้นที่ติดมากับ Docker CLI เมื่อคุณรัน docker pull nginx Docker จะแปลงเป็น docker.io/library/nginx:latest โดยอัตโนมัติแล้วดาวน์โหลดจาก Docker Hub
Docker Hub รองรับ image สามประเภท:
- Official images — ดูแลโดย Docker, Inc. (เช่น
nginx,node,postgres) ชื่อสั้นไม่มี prefix - Verified Publisher images — ดูแลโดยผู้จำหน่ายซอฟต์แวร์ (เช่น
elastic/elasticsearch) แสดงป้ายสีน้ำเงิน - Community images — เผยแพร่โดยบุคคลหรือทีม ภายใต้ namespace ของตัวเอง (เช่น
mycompany/myapp)
การสร้างบัญชีและ repository
หัวข้อที่มีชื่อว่า “การสร้างบัญชีและ repository”- สมัครที่ hub.docker.com
- สร้าง repository: คลิก Create Repository, ตั้งชื่อ, และกำหนด visibility เป็น Public หรือ Private
ชื่อ image บน Docker Hub ใช้รูปแบบ:
docker.io/<username>/<repository>:<tag>ตัวอย่าง:
docker.io/acme/api-server:2.1.0เมื่อ push จาก CLI สามารถละ docker.io/ ได้ — เป็น registry เริ่มต้น:
docker push acme/api-server:2.1.0Public vs private repository
หัวข้อที่มีชื่อว่า “Public vs private repository”| Public | Private | |
|---|---|---|
| ทุกคน pull ได้ | ใช่ | ไม่ (ต้อง login) |
| ขีดจำกัด free tier | ไม่จำกัด | 1 repo บน free plan |
| Use case | Open-source, tutorials | งาน production |
การ authenticate ด้วย docker login
หัวข้อที่มีชื่อว่า “การ authenticate ด้วย docker login”ก่อน push ต้องผ่านการ authenticate Docker Hub รองรับการ login ด้วยรหัสผ่าน แต่ access token เป็นตัวเลือกที่ดีกว่า — สามารถกำหนดสิทธิ์ ยกเลิกได้ และไม่เปิดเผยรหัสผ่านของคุณ
สร้าง token ที่ Docker Hub → Account Settings → Personal access tokens จากนั้น:
docker login# ใส่ Docker Hub username# ใส่ access token (ไม่ใช่รหัสผ่าน)หรือส่ง credentials แบบไม่โต้ตอบ (เหมาะกับ script):
echo "$DOCKERHUB_TOKEN" | docker login --username "$DOCKERHUB_USERNAME" --stdinหลัง login Docker จะเก็บ credentials ไว้ที่ ~/.docker/config.json logout เพื่อล้างออก:
docker logoutPull rate limits
หัวข้อที่มีชื่อว่า “Pull rate limits”Docker Hub จำกัดจำนวนการ pull สำหรับคำขอที่ไม่ผ่านการ authenticate:
| การ authenticate | ขีดจำกัด |
|---|---|
| Anonymous (ไม่ login) | 100 pulls / 6 ชั่วโมง ต่อ IP |
| Free account | 200 pulls / 6 ชั่วโมง |
| Pro / Team / Business plan | ไม่จำกัด |
CI runner ใช้ IP สาธารณะร่วมกัน ดังนั้น anonymous pull มักถึงขีดจำกัดบ่อย ควร authenticate ใน CI เสมอ แม้ใช้ free account ก็ตาม
Official vs verified vs community images
หัวข้อที่มีชื่อว่า “Official vs verified vs community images”# Official image — ไม่มี namespace prefixdocker pull postgres:16
# Verified Publisher imagedocker pull elastic/elasticsearch:8.14.0
# Community image — ต้องมี namespace/repo เสมอdocker pull bitnami/postgresql:16เมื่อเลือก base image ควรเลือก official หรือ verified publisher image เพื่อความปลอดภัยและการดูแลระยะยาว
ข้อแลกเปลี่ยน
หัวข้อที่มีชื่อว่า “ข้อแลกเปลี่ยน”| ตัวเลือก | Benefit | Cost |
|---|---|---|
| Docker Hub | Free tier ใช้งานง่าย เริ่มต้นได้ทันที ecosystem ของ official image ใหญ่ที่สุด | Anonymous pull มี rate limit และการควบคุมสิทธิ์แบบละเอียด (fine-grained access) มีจำกัดในแผนฟรี |
| Private registry (เช่น ECR, GHCR) | ผูกกับ IAM/permission ของ cloud provider ได้ละเอียด ไม่มี anonymous pull rate limit | ต้องตั้งค่าเพิ่ม และมักผูกติดกับ cloud provider หรือ platform นั้น ๆ |
ข้อผิดพลาดที่พบบ่อย
หัวข้อที่มีชื่อว่า “ข้อผิดพลาดที่พบบ่อย”- เก็บ Docker Hub token ไว้ใน Dockerfile หรือ commit เข้า source code แทนที่จะใช้ secret store
- ใช้ anonymous pull ใน CI หรือ production แทนการ authenticate ทำให้โดน rate limit แบบสุ่ม
- Push เฉพาะ
latesttag โดยไม่มี version tag ที่ pin ได้ ทำให้ rollback กลับเวอร์ชันเก่ายาก
💡 ตัวอย่างจากของจริง
Docker Hub บังคับ anonymous pull rate limit ที่ 100 pulls ต่อ 6 ชั่วโมงต่อ IP ซึ่งทำให้หลายทีม โดยเฉพาะทีมที่รัน CI runner หรือ Kubernetes cluster ขนาดใหญ่ที่ใช้ IP ร่วมกัน ต้องตั้ง pull-through mirror cache เพื่อลดจำนวน request ที่ยิงตรงไปยัง Docker Hub