คราวนี้ก็รู้ทั้งวิธีการใช้ Docker และวิธีการเขียน Dockerfile กันไปแล้ว ก็ถึงคราวจริงจังกับเรื่องของ Storage กันแล้ว
ก็สำหรับคนที่กำลังเขียน Dockerfile สำหรับ Application ทั้งของตัวเอง หรือว่าจะเป็นสำหรับบริษัทก็จะพบปัญหาเดียวกันว่า...
พอ Build Images ขึ้นมาแล้วขนาดใหญ่ชิบหาย
ซึ่งถ้าใครมีพื้นที่จัดเก็บใหญ่ดีก็...ไม่ค่อยมีปัญหาหรอก แต่จะเริ่มมีปัญหาเวลาที่เรา
- สร้าง container แล้วจะใช้เวลานาน
- คนอื่น Pull Images นานเพราะ Images ขนาดเท่าช้าง ก็อาจจะมีปัญหาเกี่ยวกับ Network Traffic และ Bandwidth ตามมา
ดังนั้นในบทความนี้ก็จะมาแจก Tips ที่จะช่วยทำให้ขนาด Images เล็กลงนะครับ
Tips 1: ลด Layers ลงให้น้อยที่สุด
อ่าว! คราวนี้ก็จะงงกันว่าอะไรคือ Layers
จินตนาการว่า Dockerfile เราเป็น Sandwich และทุกครั้งที่เราใช้คำสั่งพวก FROM
, RUN
อะไรพวกนี้อีกหลายๆอันจะใส่ไส้เข้าไปใน Sandwich 1 ชั้น แล้วคราวนี้เวลามีไส้เพิ่มขึ้นมากๆ มันก็จะใหญ่เกินกว่าที่ปากเราจะรับได้ ดังนั้นเทคนิคนึงที่จะสามารถลดขนาด Images ได้นั้นคือต้องใส่ไส้ให้น้อยที่สุด โดยจากเดิมที่เป็น...แบบนี้
RUN yum -y update
RUN yum -y install git
ให้กลายเป็นแบบนี้
RUN yum update && yum install git
สิ่งที่สังเกตุเห็นเลยคือ แต่เดิมมีไส้อยู่ 2 ชั้น เหลือแค่ชั้นเดียวซะแล้ว .-.
แต่เพิ่มเติมคือผมใส่ &&
ซึ่งในความหมายของ bash คือ หลังทำคำสั่งเสร็จแล้วให้ทำอะไรต่อนั่นเองงงงงงงงงงงงงงงงง
คราวนี้ถ้าใส่คำสั่งซ้อน &&
เยอะมากๆ ก็อาจจะงงๆในบรรทัดเดียวก็สามารถแยกบรรทัดออกมาได้ แบบนี้
RUN yum -y update && \
yum -y install git
สิ่งที่เพิ่มเข้าไปคือ \
หรือที่ชาวบ้านเรียกกันว่า BACKSLASH
ใช้ในการให้ไปอ่านบรรทัดต่อไป ต่อ....ก็ไปลองเล่นใน bash เองเองล่ะกัน
Tips 2: ลบของไม่จำเป็นออกไปให้หมด!
ใช่แล้ว! พวก vim
, nano
, curl
, htop
และไฟล์ขยะทั้งหลายแหล่ ลบออกไปให้หมดก่อนที่จะ build เสร็จเพราะสิ่งที่เราใช้งานจริงๆคือ Application, Base Image และ Package ที่จำเป็นต่อ Application
Q: อ่าว!! แล้วผมจะ Debug ยังไงล่ะ? A: Debug บ้านแกบน Dockerfile ทำไมล่ะ ทุกอย่างควรจะเสร็จตั้งแต่ก่อนขึ้น Images แล้ว
Tips 3: ใช้ Base Images ที่เล็กกว่านี้
Base Images ของ ubuntu
ก็ซดไป 100MB++ แล้ว centos
อย่าพูดถึง ของพวกนี้ก็ยังใหญ่เกินไปอยู่ดีดังนั้นริฟฟี่จึงขอมานำเสนอ...
alpine:latest
นั่นเองงงงงงง ซึ่งขนาดของมันใหญ่แค่ 36MB เท่านั้น?!!!!!!!!!!!! เช็คได้ที่ Docker Store
Tips 4: ใช้ FromLatest.io
บนเว็บก็มีเครื่องมือที่ทรงพลังอย่าง FromLatest.io เหมือนกันโดยจะสามารถส่ง Dockerfile ที่เราเขียนไปเนี่ยตรวจหาข้อผิดพลาด และแนะนำวิธีการช่วย Improve Dockerfile ให้แข็งแกร่งขึ้นได้อีกด้วย
ก็...ถ้าทำทั้งหมดนี้ได้ก็จะสามารถลดขนาด Image ลงได้มากแน่นอน ยังไงก็ลองใช้เทคนิคที่แนะนำมาดูนะครับ