มีโอกาสต้องนำ Docker มาใช้ในระบบงานที่พัฒนาด้วยภาษา Java
จากการลงมือทำพบว่า มันไม่ใช่เรื่องง่ายเลย
สำหรับการนำระบบงานที่พัฒนาด้วยภาษา Java มาใส่ในโลกของ Container
ดังนั้นจึงทำการสรุปสิ่งที่ต้องคำนึงไว้นิดหน่อย
น่าจะเป็นประโยชน์สำหรับคนที่กำลังจะเริ่มนะ

1. เริ่มด้วยการเลือก Image ของ JDK (Java Development Kit) ที่มีขนาดเล็ก ๆ

จากการทดลองใช้ image จาก OpenJDK 8 พบว่า

  • OpenJDK แบบ default ซึ่งใช้ os คือ Debian 8 Jessie มีขนาด 643.2 MB (สำหรับ JRE มีขนาด 107.9 MB)
  • OpenJDK แบบใช้ os คือ alpine มีขนาด 145 MB (สำหรับ JRE มีขนาด 107.9 MB)

สิ่งที่คำนึงคือ ขนาดของ image ที่เลือกใช้เป็น base
ต้องมีขนาดเล็ก ๆ ไว้ก่อน แต่จัดการได้นะ

จากนั้นเรื่องของ OS (Operating System) ก็สำคัญ
จากข้างต้นจะเห็นได้ว่า แต่ละ OS นั้นมีขนาดที่แตกต่างกัน

  • CentOS มีขนาดประมาณ 196 MB
  • Ubuntu มีขนาดประมาณ 127 MB
  • Debian มีขนาดประมาณ 123 MB
  • Alpine มีขนาดประมาณ 5 MB
  • BusyBox มีขนาดประมาณ 1 MB

แนะนำให้เลือก OS ที่มีขนาดเล็ก และ คุณสามารถจัดการได้ง่าย (รู้จักมันดี)
เนื่องจากต้องทำการดูแลรักษา
เนื่องจากต้องทำการ update version ล่าสุดอยู่อย่างเสมอ
ทั้ง OS และ dependency ต่าง ๆ

ถ้าเป็น commercial OS ก็ต้องจัดการกันอีกแบบ

ปล. สำหรับ Oracle’s JDK นั้นก็มี issue เรื่อง license agreement เหมือนกันนะ
ถ้าจะทำการลบไฟล์ที่ไม่ได้ใช้งานออกไป
ซึ่งช่วยทำให้ขนาดของ image ลดลงไปอย่างมากมาย
ลองไปอ่านบทความนี้เพิ่มได้ Running Java on Docker? You’re Breaking the Law

2. ก่อนทำการสร้าง image นั้นใน folder ที่จะสร้างให้มีเฉพาะสิ่งที่ต้องการเท่านั้น

ไฟล์หรือ folder อะไรที่ไม่จำเป็นต่อการสร้าง image
ก็ให้ลบทิ้งไปซะ
หรือทำการใส่ไว้ในไฟล์ .dockerignore​ ซะ
ตัวอย่างสำหรับ Maven project ก็ให้เอา folder target ออกไปซะ
หรือพวก configuration ของ IDE
หรือพวก configuration ในแต่ละเครื่อง

3. การสร้าง image ของตัวเอง

หลังจากเลือก based image ได้แล้ว
ส่วนใหญ่แล้วนั้นเรามักชอบสร้าง image เป็นของตัวเอง
ซึ่งจะทำการ configuration ค่าต่าง ๆ ที่ต้องการใช้
แต่แนะนำว่าอย่า hard code ไว้ใน image นะ
เช่นทำการกำหนดค่า หรือ path ต่าง ๆ ไว้ในไฟล์ Dockerfile เลย
ซึ่งจะทำให้ image ไม่มีความยึดหยุ่น

ดังนั้นถ้าอะไรที่ต้องเปลี่ยนบ่อย ๆ ก็ map volume ออกมาซะ
หรือกำหนดไฟล์ไว้ให้แก้ไขเลย
จะได้จัดการง่ายขึ้นไปอีกนะ

4. เข้าไปดูใน image หน่อยว่าเป็นอย่างไร ?

เพื่อตรวจสอบให้แน่ใจว่า image ที่สร้างขึ้นมา
มีโครงสร้างเป็นไปตามที่คาดหวังหรือไม่
หรือเข้าไปแก้ไขไฟล์ต่าง ๆ (ไม่ควรทำนะ สำหรับ image ที่ใช้กันเยอะ ๆ)
หรือทำการ debug นั่นเอง

สำหรับ container ที่ทำงานอยู่แล้ว
สามารถเข้าไปโดยใช้คำสั่ง

$docker exec -it <container id> bash

แต่ถ้ายังไม่มี container ก็ใช้คำสั่ง

$docker run -it <image> bash

เพียงเท่านี้ก็พอทำให้เราเริ่มต้นใช้ Docker กับ Java ได้แล้วนะ
ยังมีเรื่องต้องให้ทำอีกเยอะเลย