Docker Basics for Beginners DevOps

Docker Basics for Beginners

📅 2026-02-09 | โดย อ.บอม กิตติทัศน์ เจริญพนาสิทธิ์ — SiamCafe.net Since 1997

Docker Basics for Beginners คืออะไร / ทำไมถึงสำคัญ

น้องๆ หลายคนอาจจะเคยได้ยินคำว่า "Docker" แต่ยังไม่รู้ว่ามันคืออะไร ทำงานยังไง แล้วทำไมถึงสำคัญในโลกของการพัฒนาซอฟต์แวร์ยุคปัจจุบัน สมัยผมทำร้านเน็ตฯ เนี่ย ถ้ามี Docker นะ ชีวิตจะง่ายขึ้นเยอะเลย!

Docker เปรียบเสมือนกล่องคอนเทนเนอร์ (Container) ที่บรรจุทุกอย่างที่โปรแกรมเราต้องการไว้ข้างใน ไม่ว่าจะเป็นโค้ด, ไลบรารี, หรือ Dependencies ต่างๆ ทำให้เรามั่นใจได้ว่าโปรแกรมเราจะทำงานได้เหมือนกันทุกที่ ไม่ว่าจะบนเครื่องเรา, บนเซิร์ฟเวอร์, หรือบน Cloud

ทำไมถึงสำคัญน่ะเหรอ? เพราะมันแก้ปัญหา "ทำงานบนเครื่องฉันได้ แต่บนเครื่องเธอไม่ได้" ได้อย่างหมดจด! แถมยังช่วยให้การ Deploy โปรแกรมง่ายและรวดเร็วขึ้นเยอะมากๆ

พื้นฐานที่ต้องรู้

ก่อนจะไปลุย Docker กันจริงๆ เรามาปูพื้นฐานกันก่อนนิดหน่อยนะ จะได้ไม่งง

Image คืออะไร?

Image คือ Template หรือพิมพ์เขียวของ Container ของเรา เหมือนกับที่เรามีไฟล์ .iso สำหรับลง Windows นั่นแหละ Docker Image จะเก็บทุกอย่างที่จำเป็นสำหรับการรันโปรแกรมของเรา

Container คืออะไร?

Container คือ Instance ที่รันอยู่ของ Image เปรียบเหมือนการที่เราลง Windows จากไฟล์ .iso Container แต่ละอันจะเป็นอิสระต่อกัน ไม่ก้าวก่ายกัน

Dockerfile คืออะไร?

Dockerfile คือ Script ที่ใช้ในการสร้าง Image มันจะบอก Docker ว่าเราต้องการอะไรบ้างใน Image ของเรา เช่น OS, Library, หรือไฟล์ต่างๆ ที่เราต้องการ

วิธีใช้งาน / เริ่มต้นยังไง

เอาล่ะ! มาถึงขั้นตอนการใช้งาน Docker กันบ้าง บอกเลยว่าง่ายกว่าที่คิดเยอะ!

ขั้นตอนปฏิบัติจริง

1. ติดตั้ง Docker

ขั้นตอนแรกก็คือการติดตั้ง Docker Desktop บนเครื่องของเรา สามารถดาวน์โหลดได้จากเว็บไซต์ทางการของ Docker เลย ติดตั้งเสร็จแล้วก็เปิดโปรแกรมขึ้นมา

2. สร้าง Dockerfile

สร้างไฟล์ชื่อ `Dockerfile` ใน Directory โปรเจกต์ของเรา แล้วใส่คำสั่งต่างๆ ลงไป ตัวอย่าง Dockerfile สำหรับโปรแกรม Node.js:


# Use an official Node.js runtime as a parent image
FROM node:16

# Set the working directory in the container
WORKDIR /app

# Copy the package.json and package-lock.json files to the working directory
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy the rest of the application code to the working directory
COPY . .

# Expose port 3000 to the outside world
EXPOSE 3000

# Define the command to run the application
CMD ["npm", "start"]

3. Build Image

เปิด Terminal หรือ Command Prompt แล้ว cd เข้าไปใน Directory ที่มี Dockerfile จากนั้นรันคำสั่ง:


docker build -t my-node-app .

คำสั่งนี้จะสร้าง Image ชื่อ `my-node-app` จาก Dockerfile ใน Directory ปัจจุบัน

4. Run Container

เมื่อ Image ถูกสร้างเสร็จแล้ว เราก็สามารถรัน Container จาก Image นั้นได้โดยใช้คำสั่ง:


docker run -p 3000:3000 my-node-app

คำสั่งนี้จะรัน Container จาก Image `my-node-app` และ Map Port 3000 บนเครื่องเราไปยัง Port 3000 ใน Container

เท่านี้โปรแกรม Node.js ของเราก็จะรันอยู่ใน Container แล้ว! ลองเข้า Browser แล้วพิมพ์ `localhost:3000` ดูได้เลย

เปรียบเทียบกับทางเลือกอื่น

Docker ไม่ใช่ทางเลือกเดียวในการทำ Containerization นะ ยังมีทางเลือกอื่นๆ อีกมากมาย เช่น Virtual Machines (VMs) แต่ละทางเลือกก็มีข้อดีข้อเสียแตกต่างกัน

สมัยก่อนตอนผมทำร้านเน็ตฯ เนี่ย ใช้ VMs เป็นหลักเลย แต่พอมี Docker แล้ว ชีวิตง่ายขึ้นเยอะมากๆ VMs มันหนัก กิน Resource เยอะ Docker มันเบากว่าเยอะ

Feature Docker Virtual Machines (VMs)
Resource Usage Lightweight Heavyweight
Startup Time Fast Slow
Isolation Process-level Full OS
Portability Excellent Good
Overhead Low High

จากตารางจะเห็นได้ว่า Docker มีข้อดีหลายอย่างเหนือ VMs โดยเฉพาะเรื่อง Resource Usage และ Startup Time ทำให้ Docker เป็นทางเลือกที่น่าสนใจสำหรับ Modern Application Development

ถ้าอยากอ่านบทความเกี่ยวกับ IT ดีๆ เพิ่มเติม ลองแวะไปดูที่ SiamCafe Blog ได้เลยนะ

หวังว่าบทความนี้จะเป็นประโยชน์สำหรับน้องๆ ที่เริ่มต้นเรียนรู้ Docker นะครับ ถ้ามีคำถามอะไรเพิ่มเติม ถามมาได้เลย!

อย่าลืมแวะมาอ่านบทความอื่นๆ ที่ SiamCafe Blog นะครับ มีเนื้อหา IT ที่น่าสนใจอีกเยอะเลย!

Best Practices / เคล็ดลับจากประสบการณ์

เอาล่ะน้องๆ มาถึงส่วนสำคัญแล้ว นี่คือสิ่งที่พี่บอมอยากจะแชร์จากประสบการณ์จริง สมัยผมทำร้านเน็ต SiamCafe เนี่ย เจอปัญหาจุกจิกเยอะมาก การใช้ Docker ให้ดี มันไม่ใช่แค่รัน container ได้นะ มันต้องทำให้มัน "อยู่รอด" ในระยะยาวด้วย

หลักๆ เลยคือเรื่อง Image Management, Resource Management, และ Security พี่จะลงรายละเอียดในหัวข้อถัดไปนะ

3-4 เทคนิคที่ใช้ได้จริง

1. ใช้ .dockerignore ให้เป็น

น้องๆ รู้ไหมว่าทุกครั้งที่เรา build Docker image ไฟล์ทั้งหมดใน directory จะถูกส่งเข้าไปใน Docker daemon ก่อน แล้วค่อยเริ่ม build image ถ้าเรามีไฟล์ที่ไม่จำเป็นเยอะๆ เช่น log file, node_modules (ถ้าเราไม่ได้ build frontend ใน Docker), หรือพวกไฟล์ .git มันจะทำให้ build ช้ามาก

วิธีแก้ก็ง่ายๆ สร้างไฟล์ .dockerignore ขึ้นมา แล้วใส่พวกไฟล์หรือ directory ที่เราไม่ต้องการลงไป


node_modules
.git
*.log

เหมือนตอนเรา push code ขึ้น git เลยใช่ไหมล่ะ

2. Multi-Stage Builds

สมัยก่อนตอนผมทำเว็บด้วย PHP นะ เวลา deploy ทีไฟล์เยอะแยะเต็มไปหมด แถมต้องมีพวก dependency ต่างๆ บน server เยอะแยะ Docker ช่วยลดปัญหาตรงนี้ได้เยอะ แต่ก็ต้องทำให้ถูกวิธี

Multi-Stage Builds คือการที่เราใช้หลาย FROM ใน Dockerfile เดียว แต่ละ FROM ก็คือ stage แต่ละ stage สามารถมี dependencies ที่ต่างกันได้ สุดท้ายเราก็ copy เฉพาะสิ่งที่จำเป็นจาก stage สุดท้ายไปยัง image ที่เราจะ deploy


FROM node:16 as builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html

ในตัวอย่างนี้ เราใช้ node image เพื่อ build frontend แล้ว copy เฉพาะไฟล์ build ไปใส่ใน nginx image ทำให้ image สุดท้ายมีขนาดเล็ก

3. Resource Limits

เคยไหมรัน container แล้วมันกิน resource จนเครื่องแฮงค์? ผมเคย! สมัยก่อนร้านเน็ตเครื่องลูกข่ายชอบค้างเพราะ process นึงกิน CPU เต็ม 100% Docker ช่วยเราจำกัด resource ที่แต่ละ container ใช้ได้

เราสามารถจำกัด CPU, Memory, และ IO ได้ตอนรัน container ด้วย flag ต่างๆ เช่น --cpus, --memory, --memory-swap


docker run --cpus="0.5" --memory="512m" my-image

แบบนี้ container จะใช้ CPU ไม่เกิน 50% และ memory ไม่เกิน 512MB ลองปรับใช้ดูนะ

4. Security Scanning

เรื่องความปลอดภัยสำคัญมาก! ยิ่งถ้าเราเอา Docker image จาก public registry มาใช้ เราต้องเช็คให้ดีว่ามันมีช่องโหว่หรือเปล่า

มี tools หลายตัวที่ช่วย scan Docker image ได้ เช่น Trivy, Clair พวกนี้จะช่วย detect vulnerability ใน image ของเรา

ลองใช้ tools เหล่านี้เป็นประจำเพื่อความปลอดภัยของระบบ

FAQ คำถามที่พบบ่อย

Docker Compose คืออะไร?

Docker Compose คือ tool ที่ช่วยให้เรา define และ run multi-container application ได้ง่ายขึ้น แทนที่เราจะต้องรัน docker run หลายๆ command เราสามารถ define ทุกอย่างในไฟล์ docker-compose.yml แล้วรัน docker-compose up ครั้งเดียว

มันเหมือนเป็น script ที่ช่วยจัดการ container หลายๆ ตัวพร้อมๆ กัน

Docker Hub คืออะไร?

Docker Hub คือ public registry ที่เก็บ Docker image เหมือนเป็น App Store ของ Docker เลย เราสามารถ push image ของเราขึ้นไป หรือ pull image ของคนอื่นมาใช้ได้

แต่ต้องระวังเรื่อง security ด้วยนะ! เช็ค image ให้ดีก่อนเอามาใช้

Docker กับ Virtual Machine ต่างกันยังไง?

Virtual Machine (VM) คือการจำลอง hardware ทั้งเครื่องขึ้นมา ทำให้ VM มีขนาดใหญ่ กิน resource เยอะ แต่ Docker จะ share kernel ของ host OS ทำให้ Docker มีขนาดเล็กกว่า และ start เร็วกว่า

เปรียบเทียบง่ายๆ VM เหมือนเรามีคอมพิวเตอร์ทั้งเครื่อง แต่ Docker เหมือนเรามีแค่โปรแกรมที่รันบนคอมพิวเตอร์

ทำไม Docker ถึงสำคัญสำหรับ DevOps?

Docker ช่วยให้เรา package application พร้อมกับ dependencies ทั้งหมด ทำให้การ deploy ง่ายขึ้น และ consistent ไม่ว่าจะ deploy ที่ไหน Docker ก็จะ run เหมือนกัน

มันช่วยลดปัญหา "It works on my machine" ได้อย่างมาก

สรุป

Docker เป็นเครื่องมือที่ทรงพลังมากสำหรับ DevOps แต่การใช้งานให้ได้ผลดีต้องอาศัยความเข้าใจและประสบการณ์ หวังว่าบทความนี้จะเป็นประโยชน์กับน้องๆ นะครับ ถ้ามีคำถามอะไรเพิ่มเติม ถามมาได้เลย!

อย่าลืมไปอ่าน SiamCafe Blog นะ มีบทความดีๆ อีกเยอะเลย

สำหรับใครที่สนใจเรื่องการเทรด iCafeForex ก็มีคอร์สสอนนะครับ