การ Pull และ Push Docker Image
บทนี้จะพาคุณฝึกใช้งาน docker pull และ docker push แบบทีละขั้น เข้าใจ output ที่เห็นใน terminal, จัดการ tag อย่างเป็นระบบ และส่ง image ระหว่างเครื่องได้จริง
ภาพจำ: ตั้งชื่อ tag ให้ชัดก่อน push แล้วใช้ชื่อเดียวกัน pull บนเครื่องปลายทางเพื่อให้ deployment ทำซ้ำได้
ภาพจำสำคัญบทนี้
pull คือดึง image ลงเครื่องเรา ส่วน push คือส่ง image จากเครื่องเราขึ้น registry
Diagram: Developer > Build/Tag > Push Registry > Pull on Another Machine
ใช้ flow นี้เป็น mental model หลัก: ฝั่งนักพัฒนาสร้างและติด tag image, push ขึ้น registry, แล้วเครื่องปลายทาง pull ด้วยชื่อและ tag เดียวกัน
1. Developer
build image ในเครื่องตัวเอง
2. Tag
ตั้งชื่อ image ตาม registry/repo:tag
3. Push
อัปโหลดขึ้น registry กลาง
4. Pull
เครื่องอื่นดึง image เดิมไปรัน
ส่วนที่ 1
Step 1: docker pull — ดึง image มาใช้งาน
คำสั่ง pull ใช้ดาวน์โหลด image จาก registry มายังเครื่องเรา ถ้า image ยังไม่มีใน local Docker จะดึงทุก layer ที่จำเป็นมาเก็บไว้ในเครื่องก่อน
ทุกบรรทัดมีคอมเมนต์เพื่ออธิบายรูปแบบและความหมายของ tag ที่ใช้งาน
- pull โดยไม่ระบุ tag จะใช้ latest โดยปริยาย
- การระบุ tag ชัดเจนช่วยให้ environment ตรงกันทุกเครื่อง
ส่วนที่ 2
Step 2: อ่าน output ระหว่าง pull ให้เป็น
ตอน pull คุณจะเห็น Docker ดาวน์โหลดทีละ layer พร้อมสถานะ Download complete และ Pull complete เมื่อครบทุกชั้นจึงจะพร้อมใช้งาน
ตัวอย่างนี้เป็นรูปแบบ output ที่พบบ่อยเมื่อดึง nginx ครั้งแรกบนเครื่องใหม่
ส่วนที่ 3
Step 3: pull จาก registry อื่นที่ไม่ใช่ Docker Hub
ถ้าดึงจาก registry อื่น ต้องระบุ hostname ของ registry ให้ครบ เช่น ghcr.io หรือ registry ภายในองค์กร
ระบุ registry host นำหน้าชื่อ repository เสมอ
ส่วนที่ 4
Step 4: docker push — อัปโหลด image ขึ้น registry
ก่อน push ต้อง login และตั้งชื่อ image ให้อยู่ในรูปแบบที่ registry เข้าใจ จากนั้นจึง push ตามชื่อเต็ม registry/repository:tag
ทำตามลำดับนี้เสมอเพื่อลด error เรื่องสิทธิ์และชื่อ image
ส่วนที่ 5
Step 5: Terminal mockup ของ docker push (full output)
ระหว่าง push จะเห็นแต่ละ layer ถูกอัปโหลด หรือบางชั้นถูก reuse ด้วยข้อความ Layer already exists เมื่อ push เสร็จจะได้ digest กลับมา
ตัวอย่างนี้เป็น output ที่พบบ่อยเมื่อ push image ไป Docker Hub
ส่วนที่ 6
Step 6: จัดการ tag ให้เป็นระบบ
docker tag ไม่ได้คัดลอกไฟล์ใหม่ทันที แต่เป็นการเพิ่มชื่ออ้างอิงใหม่ให้ image เดิมใน local cache ของคุณ จึงใช้สร้างชื่อ release ได้รวดเร็วมาก
แนะนำใช้หลาย tag เพื่อรองรับทั้งการอ้างอิงแบบมนุษย์อ่านง่ายและแบบ trace กลับไปยัง commit ได้
| Tag | ใช้เมื่อไร | ข้อควรระวัง |
|---|---|---|
| v1.0.0 | release แบบชัดเจน, deploy ซ้ำได้ | ต้องมีวินัยในการ bump version |
| latest | ใช้เป็นค่าเริ่มต้นสำหรับผู้เริ่มต้น | ไม่ควรใช้เดี่ยวใน production |
| git-a1b2c3d | ต้องการ trace ย้อนกลับถึง source commit | อ่านยากสำหรับคนที่ไม่ดู git |
ส่วนที่ 7
Step 7: End-to-end flow ตั้งแต่ build > tag > push > pull
ตัวอย่างนี้เป็น flow ครบวงจรที่ใช้สอนทีมใหม่ได้ดี เพราะเห็นภาพตั้งแต่สร้าง image จนถึงเครื่องปลายทางที่ดึงไปใช้งาน
ใช้คำสั่งชุดนี้ใน workshop ได้ทันที โดยแก้ชื่อผู้ใช้และชื่อ image ให้ตรงโปรเจกต์จริง
ส่วนที่ 8
Step 8: Workshop จริง (ทำตามทีละข้อ)
ทำ workshop นี้ให้ครบ คุณจะย้าย image ข้ามเครื่องได้จริงและเข้าใจการทำงานของ registry แบบใช้งานได้ทันที
สร้างบัญชีที่ hub.docker.com และยืนยันอีเมลให้เรียบร้อย
สร้าง Docker Hub repository ชื่อ my-node-app (เลือก public หรือ private ตามโจทย์)
build image อย่างง่ายจากโปรเจกต์ Node.js
tag และ push image ไปยัง repository ของตัวเอง
ไปอีกเครื่องหนึ่งแล้ว pull image เดิมลงมาเพื่อยืนยันว่าใช้งานข้ามเครื่องได้