การปรับแต่ง Docker image ให้เหมาะสม

Docker ระดับกลาง

Mike Metzger

Data Engineering Consultant

Docker image คืออะไร

  • Docker image คือฐานของ container
  • เก็บเนื้อหาทั้งหมดที่ container instance เข้าถึงได้ตั้งแต่เริ่มต้น
Docker ระดับกลาง

ปัญหาของ Docker image

  • อาจเผลอใส่ทุกองค์ประกอบที่อาจต้องใช้ลงใน image เดียว
  • ทำให้ขนาดใหญ่และจัดการยาก
  • ดูแลด้านความปลอดภัยและอัปเดตได้ยากเพราะ dependency ซับซ้อน
  • รวม container หลายตัวเข้าด้วยกันได้ยากและสิ้นเปลืองพื้นที่/แบนด์วิดท์
Docker ระดับกลาง

แนวทางที่แนะนำสำหรับ Docker image

  • แบ่ง container ให้เล็กที่สุดเท่าที่จำเป็น
  • รวม container หลายตัวภายหลังได้ง่ายกว่าการสร้าง image ขนาดใหญ่ตัวเดียว
  • เปรียบได้กับ
    • การสร้างจากชิ้นส่วนที่ใช้ซ้ำได้
    • แทนที่จะสร้างใหม่ตั้งแต่ต้นทุกครั้ง
  • อัปเดตซอฟต์แวร์ใดก็กระทบเฉพาะ container ที่ใช้ image นั้น ไม่ใช่ทุก container
  • ปรับแต่งขนาดได้ ทำให้ใช้งานและแจกจ่ายง่ายขึ้น
Docker ระดับกลาง

ตัวอย่างการแบ่ง Docker image

  • ลองนึกถึงโปรเจกต์ data engineering ที่ใช้ซอฟต์แวร์เหล่านี้:

    • ฐานข้อมูล Postgresql
    • Python ETL software
    • Web server software
  • ใช้ image เดียวได้ แต่ต้องอัปเดต image ทุกครั้งที่มีการเปลี่ยนแปลง ETL หรือการตั้งค่า web server

  • จะเกิดอะไรขึ้นถ้าต้องเพิ่ม web server อีกตัว?
FROM ubuntu
RUN apt update
RUN apt install -y postgresql
RUN apt install -y nginx
RUN apt install -y python3.9
...
Docker ระดับกลาง

ตัวอย่างการใช้ container ขนาดเล็ก

  • Docker มีตัวเลือกที่ดีกว่า
  • แยกแต่ละส่วนออกเป็น container ของตัวเอง
    • Container ฐานข้อมูล Postgresql
    • Python ETL components
    • Web server
  • ปรับแต่งการตั้งค่าให้เหมาะกับการใช้งาน และเพิ่ม/ลดองค์ประกอบได้ตามต้องการ
bash> docker run -d postgresql:latest

bash> docker run -d nginx:latest ...
Docker ระดับกลาง

การตรวจสอบขนาด image

  • ใช้คำสั่ง docker images
  • แสดงรายละเอียดของแต่ละ image รวมถึงขนาด
  • ตัวเลือกเพิ่มเติมจะครอบคลุมในภายหลัง

bash> docker images

REPOSITORY      TAG              SIZE
postgres        latest           448MB
postgres        15               442MB
apache/airflow  2.7.1-python3.9  1.4GB
alpine          latest           7.73MB
Docker ระดับกลาง

มาฝึกกันเถอะ!

Docker ระดับกลาง

Preparing Video For Download...