ข้ามไปยังเนื้อหา

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)
  1. สมัครที่ hub.docker.com
  2. สร้าง 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 เริ่มต้น:

Terminal window
docker push acme/api-server:2.1.0
PublicPrivate
ทุกคน pull ได้ใช่ไม่ (ต้อง login)
ขีดจำกัด free tierไม่จำกัด1 repo บน free plan
Use caseOpen-source, tutorialsงาน production

ก่อน push ต้องผ่านการ authenticate Docker Hub รองรับการ login ด้วยรหัสผ่าน แต่ access token เป็นตัวเลือกที่ดีกว่า — สามารถกำหนดสิทธิ์ ยกเลิกได้ และไม่เปิดเผยรหัสผ่านของคุณ

สร้าง token ที่ Docker Hub → Account Settings → Personal access tokens จากนั้น:

Terminal window
docker login
# ใส่ Docker Hub username
# ใส่ access token (ไม่ใช่รหัสผ่าน)

หรือส่ง credentials แบบไม่โต้ตอบ (เหมาะกับ script):

Terminal window
echo "$DOCKERHUB_TOKEN" | docker login --username "$DOCKERHUB_USERNAME" --stdin

หลัง login Docker จะเก็บ credentials ไว้ที่ ~/.docker/config.json logout เพื่อล้างออก:

Terminal window
docker logout

Docker Hub จำกัดจำนวนการ pull สำหรับคำขอที่ไม่ผ่านการ authenticate:

การ authenticateขีดจำกัด
Anonymous (ไม่ login)100 pulls / 6 ชั่วโมง ต่อ IP
Free account200 pulls / 6 ชั่วโมง
Pro / Team / Business planไม่จำกัด

CI runner ใช้ IP สาธารณะร่วมกัน ดังนั้น anonymous pull มักถึงขีดจำกัดบ่อย ควร authenticate ใน CI เสมอ แม้ใช้ free account ก็ตาม

Terminal window
# Official image — ไม่มี namespace prefix
docker pull postgres:16
# Verified Publisher image
docker pull elastic/elasticsearch:8.14.0
# Community image — ต้องมี namespace/repo เสมอ
docker pull bitnami/postgresql:16

เมื่อเลือก base image ควรเลือก official หรือ verified publisher image เพื่อความปลอดภัยและการดูแลระยะยาว

ตัวเลือกBenefitCost
Docker HubFree 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 เฉพาะ latest tag โดยไม่มี 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

ประเภท credentials ที่แนะนำสำหรับ docker login บน Docker Hub คืออะไร?
Anonymous pull rate limit บน Docker Hub (free tier) คือเท่าไร?
image ประเภทใดที่ Docker, Inc. ดูแลโดยตรงและไม่มี namespace prefix?
Docker เก็บ credentials หลัง docker login สำเร็จไว้ที่ไหน?