Menu

Tuesday, March 10, 2020

[Docker - MySQL] การใช้ Docker Image MySQL โดยไม่ระบุเลขเวอร์ชั่นของ Patch ใน Tag อาจทำให้ได้ Docker Image เวอร์ชั่นที่เราไม่ได้คาดการณ์ไว้
[Docker - MySQL] Using Docker Image MySQL without Patch Version Number in Tag May Cause Using Unpredictable Docker Image Version

หลังจากที่ใช้ Docker Image สำหรับ MySQL 5.7 มาหลายโปรเจค 

วันนึงมีโปรเจคที่ต้องรัน SQL เพื่อ insert ข้อมูลภาษาไทยลงฐานข้อมูล ปรากฏว่า SQL ดังกล่าวสามารถรันบน environment ที่เป็น  UAT ได้ แต่ไม่สามารถรันบน Production ได้ ทั้งที่โค้ดและเลข Tag ของ Docker Image ก็เป็นเวอร์ชั่นเดียวกัน

หลังจากหาสาเหตุอยู่นาน พบว่า ถึงแม้จะใช้เลข Docker Tag เดียวกัน คือ 5.7 แต่เวอร์ชั่นของ MySQL ภายในแต่ละ Docker Image แตกต่างกัน ดังรูปข้างล่าง

Image mysql:5.7 ที่ถูกสร้างวันที่ 12/12/2017 จะใช้ MySQL version 5.7.20

Image mysql:5.7 ที่ถูกสร้างวันที่ 10/06/2019 จะใช้ MySQL version 5.7.26

Image mysql:5.7 ที่ถูกสร้างวันที่ 28/12/2019 จะใช้ MySQL version 5.7.28
นั่นหมายความว่า สำหรับ Docker MySQL แล้ว ถึงแม้เลข Tag จะเหมือนเดิม แต่ก็ไม่ได้รับรองว่า Image ของ Tag นั้นจะเหมือนเดิมไปตลอด ในกรณีที่ไม่ระบุเลขเวอร์ชั่นของ Patch 

ดังนั้น การใช้ Tag ของ Docker MySQL ควรใช้เลขเวอร์ชั่นเต็ม เช่น 5.7.26 เป็นต้น เพื่อลดความเสี่ยงของการเปลี่ยนแปลงเวอร์ชั่นของ image ในอนาคต เช่นเดียวกับการไม่ใช้ Tag เป็น latest นั่นเอง

เพิ่มเติม จากการทดสอบ Docker Container ของทั้ง 2 เวอร์ชั่น 5.7.20 และ 5.7.26 พบว่า Container ของ MySQL เวอร์ชั่น 5.7.20 ไม่สามารถคัดลอกข้อความภาษาไทยมาวางได้ ดังรูปข้างล่าง
 

No comments:

Post a Comment