Docker คืออะไร? Container อธิบายสำหรับคนที่ไม่ใช่นักพัฒนา
Docker คือเครื่องมือที่แพ็กแอปพร้อมทุกอย่างที่ต้องใช้ในการรัน ได้แก่ เวอร์ชันของภาษาที่ถูกต้อง ไลบรารี เครื่องมือระบบ และการตั้งค่า ให้เป็นหน่วยมาตรฐานเรียกว่า container Container ทำงานเหมือนกันบนแล็ปท็อปของนักพัฒนา เซิร์ฟเวอร์ทดสอบ หรือโฮสต์บนคลาวด์ ซึ่งช่วยแก้ปัญหาคลาสสิก "แต่มันทำงานได้บนเครื่องของฉัน" สูตรสำหรับสร้าง container คือไฟล์ข้อความสั้นๆ เรียกว่า Dockerfile
ทำไม Docker จึงสำคัญเมื่อสร้างแอปด้วย AI
หากแอปของคุณมีแบ็กเอนด์ เช่น API ใน Python, Node, C# หรือ Java แอปต้องรันบนที่ที่มีซอฟต์แวร์ที่ถูกต้องติดตั้งอยู่ Docker เป็นวิธีที่พบบ่อยที่สุดในการทำให้สิ่งนี้ทำซ้ำได้
- การ deploy แบ็กเอนด์ โฮสต์หลายแห่ง รวมถึง Mythex deploy แบ็กเอนด์โดยสร้าง container จาก Dockerfile ใน Mythex การขอ "C# Web API" หรือ "แบ็กเอนด์ Java" จะได้แอปพร้อม Dockerfile และ Publish จะ build image และ deploy (API backends)
- การย้ายออกจากแพลตฟอร์ม หากคุณส่งออกแอปที่สร้างด้วย AI Dockerfile ช่วยให้รันบนโฮสต์อื่นได้ง่ายขึ้นมาก ดูวิธีส่งออกและโฮสต์แอปที่สร้างด้วย AI เอง
- การทำงานร่วมกับนักพัฒนา นักพัฒนาที่เข้าร่วมโปรเจกต์ของคุณเริ่มทั้งแอปได้ด้วยคำสั่งหนึ่งหรือสองคำสั่ง แทนที่จะต้องใช้เวลาทั้งวันติดตั้งสิ่งต่างๆ
ตัวอย่างเปรียบเทียบในชีวิตประจำวัน: ตู้คอนเทนเนอร์ขนส่ง
ก่อนมีตู้คอนเทนเนอร์ขนส่งมาตรฐาน สินค้าถูกขนขึ้นเรือทีละชิ้น ทั้งกระสอบ ถัง และลัง และท่าเรือแต่ละแห่งจัดการต่างกัน ตู้เหล็กมาตรฐานเปลี่ยนสิ่งนั้น: แพ็กครั้งเดียว และเรือ เครน รถไฟ หรือรถบรรทุกใดก็ขนได้โดยไม่ต้องสนใจว่าข้างในคืออะไร
Docker ทำแบบเดียวกันกับซอฟต์แวร์:
- Dockerfile คือใบรายการบรรจุและคำแนะนำ
- Image คือตู้ที่บรรจุและปิดผนึกแล้ว
- Container ที่กำลังรัน คือกล่องนั้นเมื่อถูกนำไปใช้งานบนเรือ ในที่นี้คือเซิร์ฟเวอร์
- Docker Engine คือเครนและเรือ คือซอฟต์แวร์บนเซิร์ฟเวอร์ที่รู้วิธีรัน container ใดก็ได้
Docker ทำงานอย่างไร
| ชิ้นส่วน | คืออะไร |
|---|---|
| Dockerfile | ไฟล์ข้อความที่มีคำแนะนำทีละขั้นตอนในการสร้าง image |
| Image | แพ็กเกจอ่านอย่างเดียว: พื้นฐานระบบปฏิบัติการ รันไทม์ ไลบรารี และโค้ดของคุณ |
| Container | อินสแตนซ์ที่กำลังรันของ image ซึ่งแยกจากแอปอื่นบนเครื่องเดียวกัน |
| Registry | ที่เก็บและแชร์ image เช่น Docker Hub หรือ registry ของผู้ให้บริการคลาวด์ |
| Docker Engine | บริการเบื้องหลังที่สร้าง image และรัน container ฟรีและเป็นโอเพนซอร์ส |
| Docker Desktop | แอปสำหรับ Mac, Windows และ Linux ที่รวม engine พร้อมอินเทอร์เฟซกราฟิก |
Container กับเครื่องเสมือน: เครื่องเสมือนทำตัวเหมือนคอมพิวเตอร์แยกทั้งเครื่องพร้อมระบบปฏิบัติการของตัวเอง จึงหนักและเริ่มช้า Container ใช้เคอร์เนลของระบบปฏิบัติการของโฮสต์ร่วมกันและแยกเฉพาะแอปและไฟล์ของมัน จึงมักเริ่มภายในไม่กี่วินาทีและใช้หน่วยความจำน้อยกว่ามาก Container หลายตัวสามารถรันคู่กันบนเซิร์ฟเวอร์เดียวได้
ตัวอย่างการทำงาน: API ของ Python ขนาดเล็ก
สมมติว่าตัวสร้างแอปด้วย AI สร้างแบ็กเอนด์ FastAPI ด้วย Python สำหรับแอปจอง Dockerfile อาจเป็นแบบนี้:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
ทีละบรรทัด:
| บรรทัด | ทำอะไร |
|---|---|
FROM python:3.12-slim | เริ่มจาก image ทางการที่มี Python 3.12 ติดตั้งอยู่แล้ว |
WORKDIR /app | ทำงานในโฟลเดอร์ /app ภายใน container |
COPY requirements.txt . และ RUN pip install ... | คัดลอกรายการไลบรารีและติดตั้ง |
COPY . . | คัดลอกโค้ดของแอปเข้าไป |
EXPOSE 8000 | ระบุว่าแอปฟังที่พอร์ต 8000 |
CMD [...] | คำสั่งที่เริ่มเว็บเซิร์ฟเวอร์เมื่อ container รัน |
เป็นภาษาธรรมดา: "เริ่มจาก Python 3.12 ติดตั้งไลบรารีที่อยู่ใน requirements.txt คัดลอกโค้ดเข้าไป แล้วเริ่มเว็บเซิร์ฟเวอร์ที่พอร์ต 8000"
จากนั้นนักพัฒนา (หรือแพลตฟอร์มโฮสติ้ง) รันสองคำสั่ง:
docker build -t booking-api .
docker run -p 8000:8000 booking-api
คำสั่งแรก build image และตั้งชื่อว่า booking-api คำสั่งที่สองเริ่ม container และเชื่อมพอร์ต 8000 บนเครื่องกับพอร์ต 8000 ภายใน container ตอนนี้ API กำลังทำงานอยู่ ในแบบเดียวกับที่จะทำงานบนเซิร์ฟเวอร์ใดก็ตามที่มี Docker
สิ่งที่ไม่อยู่ใน image: รหัสผ่านและ API key สิ่งเหล่านั้นถูกส่งเข้ามาตอนเริ่ม container ในฐานะ environment variables เพื่อให้ image เดียวกันรันได้ทั้งในการทดสอบและ production โดยมีการตั้งค่าต่างกัน
คำศัพท์สำคัญ
| คำศัพท์ | ความหมาย |
|---|---|
| Container | แพ็กเกจของแอปและ dependencies ที่แยกออกมาและกำลังรัน |
| Image | แม่แบบที่ใช้เริ่ม container |
| Base image | จุดเริ่มต้นในบรรทัด FROM ของ Dockerfile เช่น python:3.12-slim หรือ node:22 |
| Layer | ทุกขั้นตอนใน Dockerfile เพิ่ม layer ที่ถูก cache ไว้ ทำให้ build ซ้ำเร็วขึ้น |
| Port mapping | การเชื่อมพอร์ตบนโฮสต์กับพอร์ตภายใน container |
| Volume | พื้นที่เก็บข้อมูลที่คงอยู่เมื่อ container ถูกแทนที่ container เองใช้แล้วทิ้งได้ |
| Docker Compose | ไฟล์ที่อธิบาย container หลายตัวที่รันร่วมกัน เช่น API และฐานข้อมูล |
| Kubernetes | ระบบสำหรับรัน container จำนวนมากบนเซิร์ฟเวอร์จำนวนมาก แอปเล็กส่วนใหญ่ไม่ต้องใช้ |
ความเข้าใจผิดที่พบบ่อย
- "Docker คือเครื่องเสมือน" มันเบากว่า เพราะ container ใช้เคอร์เนลของโฮสต์ร่วมกัน
- "ข้อมูลที่บันทึกไว้ในไฟล์ของ container ปลอดภัย" Container ถูกออกแบบให้ทิ้งแล้วแทนที่ได้ ข้อมูลใดที่ต้องคงอยู่ เช่น ข้อมูลผู้ใช้และไฟล์อัปโหลด ต้องอยู่ในฐานข้อมูล ที่เก็บไฟล์ หรือ volume
- "ใส่ secrets ไว้ใน Dockerfile ได้เพราะเป็นส่วนตัว" Image ถูกแชร์และ push ไปยัง registry ให้ส่ง secrets ตอนรันแทน
- "Docker ทำให้แอปปลอดภัย" การแยกช่วยได้ แต่ container ที่รันซอฟต์แวร์เก่าพร้อมการตั้งค่าที่อ่อนแอก็ยังเสี่ยงอยู่
- "ทุกแอปต้องใช้ Docker" เว็บสแตติกหรือฟรอนต์เอนด์ง่ายๆ มักโฮสต์เป็นไฟล์ธรรมดา ไม่มี container เลย
- "Docker Desktop ฟรีสำหรับทุกคน" Engine ฟรี แต่ Docker Desktop ต้องมีการสมัครสมาชิกแบบเสียเงินสำหรับบริษัทที่ใหญ่กว่า ตามข้อกำหนดของ Docker
สิ่งที่ควรถามตัวสร้างแอปด้วย AI ของคุณ
- "แอปนี้ต้องใช้ Dockerfile ไหม ถ้าใช่ อธิบายแต่ละบรรทัดเป็นภาษาอังกฤษง่ายๆ"
- "ใช้ base image ทางการที่มีขนาดเล็ก และกำหนดเวอร์ชันของภาษาให้ตายตัว"
- "เก็บ secrets ออกจาก image อ่านจาก environment variables ตอนรัน"
- "ตรวจว่าไฟล์อัปโหลดและข้อมูลถูกเก็บไว้ในฐานข้อมูลหรือที่เก็บไฟล์ ไม่ใช่ภายใน container"
- "เพิ่มไฟล์ Docker Compose เพื่อให้นักพัฒนารันฟรอนต์เอนด์ API และฐานข้อมูลในเครื่องด้วยคำสั่งเดียว"
- "เพิ่ม health-check endpoint เพื่อให้โฮสต์บอกได้ว่า API กำลังทำงานอยู่หรือไม่"
Docker ใน Mythex
คุณไม่จำเป็นต้องติดตั้งหรือรัน Docker เพื่อใช้ Mythex โปรเจกต์ของคุณทำงานในแซนด์บ็อกซ์คลาวด์ส่วนตัว และเมื่อคุณขอแบ็กเอนด์ที่ต้องใช้ container เช่น C#, Java หรือบริการ Node หรือ Python แบบกำหนดเอง Mythex จะเขียนแอปพร้อม Dockerfile ให้ดูตัวอย่างในแซนด์บ็อกซ์ และ deploy เมื่อคุณเผยแพร่ โดยไม่ต้องตั้งค่าโฮสติ้งเอง (วิธีเลือกเทคโนโลยี) ใน Pro คุณส่งออกโปรเจกต์หรือซิงก์ไปยัง GitHub และนำ Dockerfile ไปด้วยได้ สำหรับการทำงานร่วมกันของฟรอนต์เอนด์และแบ็กเอนด์ ดูฟรอนต์เอนด์กับแบ็กเอนด์
คำถาม
Docker คืออะไรแบบง่ายๆ?
Docker คือเครื่องมือที่แพ็กแอปพร้อมทุกอย่างที่ต้องใช้ในการรัน เช่น รันไทม์ของภาษา ไลบรารี และการตั้งค่า ให้เป็นหน่วยมาตรฐานเรียกว่า container Container ทำงานเหมือนกันบนแล็ปท็อป เซิร์ฟเวอร์ทดสอบ หรือโฮสต์บนคลาวด์
Docker image กับ container ต่างกันอย่างไร?
Image คือแม่แบบที่แพ็กไว้และอ่านได้อย่างเดียว ประกอบด้วยแอปและ dependencies ที่สร้างจาก Dockerfile ส่วน container คือสำเนาที่กำลังทำงานของ image คุณสามารถเริ่ม container จำนวนมากจาก image เดียวได้
Docker คือเครื่องเสมือน (virtual machine) ไหม?
ไม่ใช่ เครื่องเสมือนจำลองคอมพิวเตอร์ทั้งเครื่องพร้อมระบบปฏิบัติการของตัวเอง ส่วน container ใช้เคอร์เนลของระบบปฏิบัติการของเครื่องโฮสต์ร่วมกันและแยกเฉพาะแอป ทำให้เริ่มทำงานเร็วกว่าและใช้หน่วยความจำน้อยกว่า
Docker ฟรีไหม?
Docker Engine ซึ่งเป็นแกนหลักที่รัน container ฟรีและเป็นโอเพนซอร์ส ณ เดือนกันยายน 2026 ข้อกำหนดของ Docker ระบุว่า Docker Desktop ฟรีสำหรับโปรเจกต์โอเพนซอร์สที่ไม่ใช่เชิงพาณิชย์ และสำหรับบริษัทที่มีพนักงานน้อยกว่า 250 คนและรายได้ต่อปีน้อยกว่า 10 ล้านดอลลาร์ บริษัทที่ใหญ่กว่าต้องมีการสมัครสมาชิกแบบเสียเงิน
ต้องเรียน Docker ก่อนจึงจะสร้างแอปด้วย AI ได้ไหม?
โดยทั่วไปไม่จำเป็น ตัวสร้างแอปด้วย AI หลายตัวจัดการ container ให้คุณ การรู้ว่า Dockerfile คืออะไรช่วยให้เข้าใจวิธีแพ็กแบ็กเอนด์ และช่วยให้คุณรันหรือโฮสต์แอปที่ส่งออกไปยังที่อื่นได้