ปัญหา: "มันรันได้ในเครื่องของผมนะ"
Docker ช่วย "แช่แข็ง" สภาพแวดล้อมทั้งหมดเพื่อให้ทุกคนรันได้ผลลัพธ์เดียวกัน
"สูตรอาหาร" หรือชุดคำสั่งในการสร้าง Image
ไฟล์ที่พร้อมรัน (Read-only) ที่รวมโค้ดและ Library ไว้แล้ว
Image ที่กำลังรันอยู่ (Runtime instance)
FROM: เลือก Python เวอร์ชันที่ต้องการ
WORKDIR: กำหนดโฟลเดอร์ทำงานใน Container
COPY: คัดลอกโค้ดและไฟล์ข้อมูลเข้าไป
RUN: ติดตั้ง Library ผ่าน pip
CMD: คำสั่งเริ่มต้น (เช่นรัน Jupyter หรือ script)
Personal Learning Tip: ให้ AI ช่วยระบุเวอร์ชันของ Library ที่เสถียรที่สุดสำหรับโปรเจกต์
pandas==2.1.0
scikit-learn==1.3.0
pycaret==3.1.0
matplotlib==3.8.0
*ระบุเวอร์ชันเสมอ (Pinning) เพื่อป้องกันโมเดลพังในอนาคตเมื่อ Library อัปเดต*
เพื่อให้ AI Agent สามารถอ่านและเข้าใจ Image ได้ทันที เราจะใช้ **MCP Metadata** ในรูปของ Docker Label [1]:
# การใส่ Metadata ตามมาตรฐาน MCP [1]
LABEL org.mcp.context.model="RandomForest"
LABEL org.mcp.context.dataset="Pima Indians Diabetes"
LABEL org.mcp.context.metrics='{"accuracy": 0.89, "f1": 0.85}'
LABEL org.mcp.context.author="StudentID-12345"
# ตรวจสอบ Metadata หลัง Build:
$ docker inspect --format='{ {json .Config.Labels} }' my-image
RamaLama ใช้ OCI containers เพื่อจัดการและ Serve โมเดล AI ในเครื่อง [6]
โมเดลหรือโค้ดจากภายนอกอาจแฝง Malware หรือช่องโหว่ในการเข้าถึงไฟล์ในเครื่อง
รันแบบ rootless และใช้ read-only volume mount เพื่อไม่ให้โค้ดแก้ไขไฟล์ Host ได้ [4]
"Reproducibility ต้องมาคู่กับ Security"
ในคาบ Lab 2 ชั่วโมง เราจะลงมือปฏิบัติจริงดังนี้:
*พร้อมแล้วไปที่ Laboratory Slide แผ่นแรกกันเลย!*
ในงานวิทยาการข้อมูล เราไม่ควรเก็บชุดข้อมูลขนาดใหญ่ไว้ใน Image โดยตรง [1]:
ใช้ YAML file เพื่อนิยามและรันบริการหลายอย่างพร้อมกัน [4]:
ข้ามไฟล์ที่ไม่จำเป็น เช่น .git, __pycache__, หรือไฟล์ข้อมูลดิบขนาดใหญ่ เพื่อลดขนาด Image [1].
Copy เฉพาะ requirements.txt และรัน pip install ก่อน Copy โค้ดทั้งหมด เพื่อให้ Build ครั้งต่อไปเร็วขึ้น [5].
รัน Container โดยไม่ใช้สิทธิ์ Root เพื่อความปลอดภัยสูงสุด (Security-first) [2, 6].
สร้างสภาพแวดล้อมที่ทำซ้ำได้ (Reproducible) และฝัง Context ผ่าน MCP
Scikit-Learn Pipeline จากสัปดาห์ที่ 8 [7]
Docker Image ที่มี MCP Metadata ฝังอยู่ [8]
สร้างไฟล์ requirements.txt เพื่อระบุเวอร์ชันที่แน่นอนของโมดูล [5]:
*Tip: ใช้คำสั่ง `pip freeze > requirements.txt` ใน venv เพื่อดึงรายการปัจจุบันออกมา [9]*
# ใช้ base image ที่เหมาะสม
FROM python:3.9-slim
# ตั้งค่าโฟลเดอร์ทำงาน
WORKDIR /ml_app
# ติดตั้ง dependencies (Layer caching)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# คัดลอกโค้ดและโมเดล (.pkl)
COPY . .
เพิ่มคำสั่ง LABEL เพื่อให้ AI Agent เข้าใจบริบทของ Image นี้ [7, 8]:
*การฝัง Metadata ช่วยให้ระบบอัตโนมัติสามารถตรวจสอบประสิทธิภาพได้โดยไม่ต้องรันโค้ด*
# สร้าง Image พร้อมระบุ Tag
$ docker build -t my-ml-project:v1 .
# ตรวจสอบว่า Metadata ถูกฝังลงไปจริงหรือไม่
$ docker inspect my-ml-project:v1
ให้นักศึกษาแคปเจอร์หน้าจอผลลัพธ์จาก docker inspect เพื่อใส่ในรายงาน [10].
กิจกรรมจับคู่ (Pair Testing):
docker save my-image > project.tar*หากรันได้ผลไม่ตรงกัน ให้ใช้ AI ช่วยวิเคราะห์หาสาเหตุ (เช่น เวอร์ชันไฟล์ข้อมูลดิบต่างกัน)*
สัปดาห์หน้า: เริ่มต้นใช้งาน Agent Development Kit (ADK) [7]