การนำ Docker มาใช้ในการพัฒนา software นั้นถือว่าเป็นสิ่งที่น่าสนใจมาก ๆ
บางคนอาจจะบอกว่า น่าจะเป็นความรู้พื้นฐานของนักพัฒนาเลยนะ
แต่ว่าการศึกษาสิ่งใหม่ ๆ ก็ไม่ใช่เรื่องที่ง่ายเลย
ดังนั้นจึงสรุปขั้นตอนการใช้งาน Docker เป็น comand line นะ
พร้อมยกตัวอย่างการใช้งานสำหรับการพัฒนาระบบด้วยภาษา Java
แนะนำการใช้งาน Docker แบบพื้นฐาน
Docker นั้นพัฒนาไปเร็วมาก ทำให้มี ecosystem ขนาดใหญ่ แต่การศึกษาทั้งหมดเป็นเรื่องที่ไม่ง่าย และ ใช้เวลานานมาก ดังนั้นใน blog นี้จะเน้นเรื่อง การใช้งาน Docker command line โดยเน้นไปที่การใช้งาน command line ชุดใหม่ ซึ่งมีการปรับเปลี่ยนให้เป็นหมวดหมู่และง่ายต่อการจำมากขึ้น ผลที่ตามมาคือ พิมพ์เยอะมากขึ้น ใน blog นี้จะแบ่งชุดคำสั่งเป็นกลุ่ม ๆ มาเริ่มกันเลย1. การจัดการ image
Image คือต้นฉบับสำหรับการสร้าง container ต่าง ๆ โดยที่เราสามารถทำการจัดการได้ดังนี้ เลือกคำสั่งที่ใช้บ่อย ๆ- สร้าง image ใหม่ขึ้นมา กำหนดขั้นตอนการสร้างจาก Dockerfile
- ทำการลบ image
- ทำการดึง หรือ pull image มาจาก repository เช่น Docker Hub มายังเครื่องเราได้
- ทำการ push image ไปยัง repository
นี่แค่เริ่มต้นคำสั่งจัดการ image เบื้องต้นเท่านั้น แต่เพียงพอสำหรับผู้เริ่มต้น
เมื่อได้ image หรือ base image ที่ต้องการแล้ว
ถ้าเราไม่พอใจ สามารถทำการแก้ไขและสร้าง image ใหม่ขึ้นมา เพื่อให้เหมาะสมกับระบบที่เราต้องการได้ สามารถกำหนดขั้นตอนการสร้าง image ผ่านไฟล์ Dockerfile ตัวอย่างง่าย ๆ ต้องการสร้าง image สำหรับการ compile และ run โปรแกรมที่พัฒนาด้วยภาษา Java คือ javac และ java มีขั้นตอนดังนี้- เลือก Base image ซึ่งจะใช้ openjdk:9-jdk
- ทำการสร้าง working directory สำหรับจัดเก็บ source code
- กำหนด endpoint ให้ทำการ run bash shell ขึ้นมา
ชีวิตน่าจะดีขึ้น ลองคิดดูสิว่า ถ้าเราต้องการ run java มากกว่า 1 version เราจะต้องทำอย่างไร ?ตัวอย่างที่ซับซ้อนขึ้น ต้องการสร้าง image สำหรับระบบงานที่พัฒนาด้วยภาษา Java และต้องทำการ compile และ build ด้วย Apache Maven ดังนั้นเราต้องกำหนดขั้นตอนการสร้าง image ของเราดังนี้
- เลือก Base image ซึ่งจะใช้ openjdk:9-jdk
- ทำการติดตั้ง package ต่าง ๆ ที่จำเป็นนั่นคือ Apache Maven และ Vim เอาไว้แก้ไข code
- ทำการสร้าง working directory สำหรับจัดเก็บ source code
- กำหนด endpoint ให้ทำการ run bash shell ขึ้นมา
2. การจัดการ container
หลังจากที่ได้ image ที่ต้องการแล้ว สิ่งต่อมาที่จะต้องทำคือ การสร้าง container จาก image เหล่านั้น เทียบง่าย ๆ คือ การสร้าง instance/object จาก class ใน OOP นั่นเอง โดยทาง docker ได้เตรียม command line สำหรับการจัดการ container มาให้เพียบ แต่เรามาใช้งานคำสั่งที่ใช้บ่อย ๆ กัน เริ่มด้วยการสร้าง container จาก image [code] $docker container run<options> <ชื่อ image> <command> <arguments> [/code] จะเห็นได้ว่ามีให้ใส่ option ซึ่งมีเยอะมาก ๆ ดังนั้นมาดูตัวอย่างกัน ใช้ image จากข้างต้น- สร้าง container ชื่อ demo01
- สร้างจาก image ชื่อว่า my_image
- map path จากเครื่องของเราหรือเรียกว่า host ไปยัง container
- Run container แบบ foreground mode (แสดงว่ายังมี mode อื่นอีกเช่น interactive และ background เป็นต้น)
- ลบ container ทิ้งทันทีหลังจากทำงานเสร็จสิ้น
- Run คำสั่งของ Apache Maven เพื่อ compile และ build ระบบงาน
3. การกำหนดจำนวน resource ต่าง ๆ ทั้ง CPU และ Memory ให้ container
[code] $docker container update<options> container [/code] สำหรับชาว Java นั้นเรื่องนี้สำคัญมาก ๆ เนื่องจากถ้ากำหนดไม่ดี และไม่เข้าใจการทำงานของ JVM แล้ว ก็อาจเกิดข้อผิดพลาดได้ ยกตัวอย่างเช่นการใช้ resource เกินจำนวนที่กำหนด สามารถดูปัญหาและการแก้ไขได้จาก JVM is Docker-awareคำสั่งสุดท้ายคือ การลบข้อมูลที่ไม่ใช้งานทิ้งไป
ลบทั้ง image, container, volume และ network รวมไปถึง layer ของจากการสร้าง image อีกด้วย ซึ่งทำให้เราได้พื้นที่ disk กลับคืนมาอย่างมากมาย [code] $docker system prune<options> [/code] แต่คำสั่งนี้ไม่ลบพวก container volume นะ ถ้าอยากจะลบต้องเพิ่ม option -volume เข้าไปด้วยเพียงเท่านี้น่าจะพอมีประโยชน์สำหรับผู้เริ่มต้นบ้างนะครับ เริ่มต้นด้วย container เดียวก่อน น่าจะทำให้มีกำลังใจมากยิ่งขึ้น จากนั้นก็นับสองสามสี่ต่อไปครับยกตัวอย่างเรื่องที่ต้องศึกษาต่อเช่น
ถามว่าชุดคำสั่งเยอะไหม ? ตอบเลยว่ามาก ถามว่าต้องจำหมดไหม ? ตอบเลยว่าไม่ ดังนั้นสิ่งที่สำคัญสุด ๆ ความเข้าใจ และ keyword ที่ต้องการขอให้สนุกกับการ coding ครับ