แชร์ Docker Image บน Docker Hub
หลังจากที่เราสร้าง Docker Image ของตัวเองได้ในบทที่แล้ว (โดยใช้ Dockerfile และคำสั่ง docker build) สิ่งที่น่าสนใจต่อไปคือการแชร์ Image นั้นให้ผู้อื่นสามารถนำไปใช้งานได้ง่ายๆ ซึ่ง Docker Hub คือทางออกของเรา Docker Hub เป็นเหมือน repository สาธารณะ (หรือส่วนตัว ถ้าเราต้องการ) ที่เก็บ Docker Image ต่างๆ ทำให้เราสามารถดาวน์โหลด Image ที่คนอื่นสร้างไว้ หรือแชร์ Image ของเราให้คนอื่นดาวน์โหลดไปใช้ได้
ในบทนี้ เราจะมาเรียนรู้วิธีการ Push Docker Image ที่สร้างขึ้นไปยัง Docker Hub เพื่อแชร์กับผู้อื่น
สมัคร Docker Hub Account
ก่อนอื่นเลย เราต้องมี Account บน Docker Hub ก่อน ถ้ายังไม่มี สามารถสมัครได้ฟรีที่ https://hub.docker.com/
การสมัครก็เหมือนการสมัคร Account ทั่วไป กรอก Email, Username, และ Password ให้เรียบร้อย จด Username ไว้ด้วยนะครับ เพราะเราจะต้องใช้ในการ Login ผ่าน Command Line ในขั้นตอนต่อไป
Login Docker Hub ผ่าน Command Line
เมื่อมี Account แล้ว เราต้อง Login เข้า Docker Hub ผ่าน Command Line เพื่อให้ Docker รู้ว่าเราเป็นใคร และมีสิทธิ์ที่จะ Push Image ขึ้นไปได้
เปิด Terminal (หรือ Command Prompt) แล้วพิมพ์คำสั่ง:
docker login
Docker จะถาม Username และ Password ของเรา ก็กรอกให้ถูกต้อง
Username: your_dockerhub_username
Password: your_dockerhub_password
Login Succeeded
ถ้า Login สำเร็จ จะมีข้อความ "Login Succeeded" ขึ้นมา
ทำไมต้อง Login ผ่าน Command Line? Docker Client (ที่เราใช้สั่งงาน Docker) ต้องรู้ว่าเราเป็นใครและมีสิทธิ์ที่จะ Push Image ขึ้นไป Docker Hub การ Login ผ่าน Command Line จะสร้าง credentials ที่ Docker Client สามารถใช้ในการยืนยันตัวตนกับ Docker Hub ได้
Tag Image
ก่อนที่เราจะ Push Image ขึ้นไปได้ เราต้อง Tag Image ของเราก่อน การ Tag คือการ "ติดป้าย" ให้กับ Image โดยระบุ Repository (Docker Hub Username) และ Tag (Version) ของ Image
รูปแบบการ Tag Image คือ:
docker tag [IMAGE ID] [DOCKERHUB_USERNAME]/[REPOSITORY_NAME]:[TAG]
อธิบายแต่ละส่วน:
[IMAGE ID]: คือ ID ของ Image ที่เราต้องการ Tag สามารถหาได้จากคำสั่งdocker images[DOCKERHUB_USERNAME]: คือ Username ของเราบน Docker Hub[REPOSITORY_NAME]: คือชื่อ Repository ที่เราต้องการสร้างบน Docker Hub (ถ้ายังไม่มี Docker Hub จะสร้างให้ตอน Push)[TAG]: คือ Tag หรือ Version ของ Image (เช่นlatest,1.0,2.0-beta)
ตัวอย่าง: สมมติว่าเรามี Image ID คือ a1b2c3d4e5f6, Username บน Docker Hub คือ myusername, และต้องการสร้าง Repository ชื่อ mynginx โดยใช้ Tag เป็น latest คำสั่งจะเป็น:
docker tag a1b2c3d4e5f6 myusername/mynginx:latest
หลังจากรันคำสั่งนี้แล้ว ลองใช้คำสั่ง docker images อีกครั้ง จะเห็นว่ามี Image เพิ่มขึ้นมาอีกหนึ่ง Image ที่มี Repository และ Tag ที่เรากำหนดไว้
ทำไมต้อง Tag Image? Docker Hub ใช้ Repository Name และ Tag เพื่อระบุ Image ที่ต้องการดาวน์โหลดหรือ Push ถ้าเราไม่ Tag Image Docker Hub จะไม่รู้ว่า Image นี้ควรจะไปอยู่ตรงไหน และจะ Reject การ Push
แนวปฏิบัติที่ดี:
- ใช้ Tag ที่สื่อความหมาย: ควรใช้ Tag ที่สื่อความหมายถึง Version หรือ Purpose ของ Image เช่น
stable,dev,1.0.0,nginx-alpine - ใช้
latestอย่างระมัดระวัง:latestเป็น Tag Default ที่ Docker จะใช้ ถ้าไม่ได้ระบุ Tag อื่น แต่การใช้latestอาจทำให้เกิดความสับสนได้ เพราะไม่ได้บอกว่า Image นั้นเป็น Version อะไร ควรหลีกเลี่ยงการใช้latestใน Production - Tag Image หลาย Tag ได้: เราสามารถ Tag Image เดียวกันด้วยหลาย Tag ได้ เช่น
myusername/mynginx:latestและmyusername/mynginx:1.0
Push Image
เมื่อ Tag Image เรียบร้อยแล้ว เราก็สามารถ Push Image ขึ้นไปบน Docker Hub ได้ โดยใช้คำสั่ง:
docker push [DOCKERHUB_USERNAME]/[REPOSITORY_NAME]:[TAG]
ตัวอย่าง: จากตัวอย่างเดิม ถ้าเราต้องการ Push Image myusername/mynginx:latest ขึ้นไปบน Docker Hub คำสั่งจะเป็น:
docker push myusername/mynginx:latest
Docker จะเริ่ม Push Image ขึ้นไป Docker Hub ซึ่งอาจใช้เวลาสักครู่ ขึ้นอยู่กับขนาดของ Image และความเร็วของอินเทอร์เน็ต
เมื่อ Push เสร็จแล้ว ลองเข้าไปดูใน Docker Hub จะเห็นว่ามี Repository ใหม่ชื่อ mynginx พร้อมกับ Image ที่เรา Push ขึ้นไป
ข้อควรระวัง: ถ้า Repository ยังไม่มีอยู่ Docker Hub จะสร้าง Repository ให้โดยอัตโนมัติ แต่ Repository จะเป็น Public โดย Default ถ้าต้องการให้ Repository เป็น Private ต้อง Upgrade Account เป็นแบบเสียเงิน
ทำไมต้อง Push Image? การ Push Image ขึ้น Docker Hub ทำให้คนอื่นสามารถนำ Image ของเราไปใช้ได้ง่ายๆ โดยไม่ต้องสร้าง Image เองตั้งแต่ต้น ช่วยประหยัดเวลาและลดความซับซ้อนในการ Deploy Application
สรุป: ในบทนี้ เราได้เรียนรู้วิธีการแชร์ Docker Image บน Docker Hub ตั้งแต่การสมัคร Account, Login ผ่าน Command Line, Tag Image, และ Push Image การแชร์ Image บน Docker Hub เป็นวิธีที่สะดวกและมีประสิทธิภาพในการเผยแพร่ Application ของเราให้คนอื่นใช้งานได้ง่ายๆ
ในบทต่อไป เราจะมาเรียนรู้เกี่ยวกับ Docker Compose ซึ่งเป็นเครื่องมือที่ช่วยให้เราจัดการหลาย Docker Container พร้อมกันได้อย่างง่ายดาย