WHAT IS A DOCKER ?
Development
สมมติว่าคุณได้พัฒนา Application ในเครื่องคอมพิวเตอร์ของคุณ เเละนั่นก็ทำงานได้ดี ไม่ได้มีปัญหาเเต่อย่างใด

Production
แต่พอ Deploy ขึ้น Production กลับพบปัญหาที่ไม่เคยเจอใน Development เช่น การตั้งค่าที่ไม่สอดคล้อง, Dependency ที่ขาดหาย, หรือ Environment ที่แตกต่างกัน ส่งผลให้ Application ไม่ทำงานอย่างที่ควรจะเป็น

จึงเป็นที่มาของคำว่า มันทำงานได้ในเครื่องผม (It works on my machine) ซึ่งเป็นคำที่นักพัฒนาใช้บ่อยเมื่อเจอปัญหาใน Production เพราะระบบในเครื่อง Development ของพวกเขาไม่มีปัญหา แต่ใน Production ที่มี Environment ต่างออกไป กลับไม่สามารถทำงานได้อย่างถูกต้อง
Docker พระเอกของเราที่มาช่วยแก้ปัญหานี้อย่างมีประสิทธิภาพโดยนำเสนอแนวคิดของ Containerization ซึ่งช่วยลดความซับซ้อนในการพัฒนาและ Deploy Application ดังนี้
-
สร้าง Environment ที่เสถียรและเหมือนกัน Docker ใช้ Container ที่เก็บทุกอย่างที่ Application ต้องการ (Code, Libraries, Dependencies) ไว้ในแพ็คเกจเดียวกัน ทำให้มั่นใจได้ว่า Environment ในเครื่อง Development และ Production จะเหมือนกัน
-
แยกส่วนและปรับแต่งง่าย แต่ละ Service (เช่น Database, Backend, Frontend) สามารถรันใน Container แยกกัน ช่วยลดปัญหา Dependency Conflict ระหว่าง Services
-
การจัดการง่าย Docker มีเครื่องมืออย่าง Docker Compose ที่ช่วยกำหนด Configuration ของหลาย Container ได้ในไฟล์เดียว เช่น docker-compose.yml ทำให้การตั้งค่าระบบใน Development และ Production ทำได้ง่ายและเหมือนกัน
Docker ทำงานอย่างไร?
Docker ใช้ Docker Engine เพื่อสร้างและรัน Container คือ Lightweight Virtual Environment ที่แชร์ Kernel กับ Host OS แต่แยกกันในระดับ Process และ File System โดยใช้ Image เป็นตัวต้นแบบของ Container ซึ่งสร้างจาก Dockerfile ที่ระบุขั้นตอนการติดตั้ง Application
แตกต่างจาก VM อย่างไร?
Aspect | Docker (Container) | Virtual Machine (VM) |
---|---|---|
ทรัพยากร | ใช้ทรัพยากรน้อยกว่า (แชร์ Kernel) | ใช้ทรัพยากรมาก (OS แต่ละ VM แยกกัน) |
Startup Time | เร็วมาก (ไม่กี่วินาที) | ช้ากว่า (ต้อง Boot OS แต่ละ VM) |
Isolation | ระดับ Process และ File System | ระดับ Hardware |
ประสิทธิภาพ | ดีกว่า (ไม่มี Overhead ของ OS) | มี Overhead ของ Hypervisor |
Container คืออะไร?
Container เป็นหัวใจสำคัญของ Docker ที่ทำให้การพัฒนาและการ Deploy Application มีประสิทธิภาพและความยืดหยุ่น เรามาลงรายละเอียดเกี่ยวกับ Container เพื่อเข้าใจให้ลึกขึ้น
Container คือ หน่วยการทำงานแบบพกพา ที่เก็บทุกสิ่งที่จำเป็นต่อการรัน Application
- Source Code
- Dependencies (Libraries, Frameworks)
- Runtime (เช่น Python, Node.js, Java)
- การตั้งค่า (Configuration Files, Environment Variables)
ทุกอย่างที่อยู่ใน Container จะทำงานแยกจาก Host OS และจาก Container อื่น ๆ
ตัวอย่าง Use Case ของ Container
- Development Environment สร้าง Environment เดียวกันในเครื่องนักพัฒนาและ Production
- Microservices ใช้ Container ในการแยกแต่ละ Service เช่น API, Database, Frontend
- CI/CD Pipelines ใช้ Container สำหรับการ Build และ Test Application แบบอัตโนมัติ
- Scaling ใช้ Container ร่วมกับ Kubernetes เพื่อ Scale Application ได้อย่างยืดหยุ่น
เรามาลอง Build Application และ Run ใน Docker
ต่อไปเราจะ Build Application และ Run ใน Docker โดยใช้ Go และ Go Fiber ที่มีความชัดเจนและเข้าใจง่ายกันนะครับ
ตัวอย่างโค้ด Go Fiber - Hello World API
package main import ( "log" "github.com/gofiber/fiber/v2" ) func main() { // สร้าง Fiber App app := fiber.New() // สร้าง API Endpoint app.Get("/api/:name", func(c *fiber.Ctx) error { name := c.Params("name") return c.JSON(fiber.Map{ "message": "Hello, " + name + "!", }) }) // เริ่มเซิร์ฟเวอร์ที่ Port 3000 log.Println("Server is running on http://localhost:3000") log.Fatal(app.Listen(":3000")) }
-
Dockerfile เราจะสร้าง Image โดยใช้ Dockerfile ซึ่งระบุขั้นตอนการติดตั้งและตั้งค่า Application
Dockerfile# Stage 1: Build Stage FROM golang:1.22.5 AS builder # Set the Current Working Directory inside the container WORKDIR /app # Copy go.mod and go.sum files to the workspace COPY go.mod go.sum ./ # Download dependencies RUN go mod download # Copy the rest of the application files COPY . . # Build the Go application #RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main . # Build the Go application for ARM64 architecture RUN CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o main . # Stage 2: Run Stage FROM alpine:latest # Install SSL certificates to support HTTPS (optional but recommended) RUN apk --no-cache add ca-certificates # Set the Current Working Directory inside the container WORKDIR /app # Copy the compiled binary from the build stage COPY --from=builder /app/main . # Expose the port the application runs on EXPOSE 3000 # Command to run the executable CMD ["./main"]
-
สร้าง Docker Image
Bashdocker build -t go-fiber-app .
-
Run Container
Bashdocker run -p 3000:3000 -d go-fiber-app
-
ทดสอบ
Bashcurl http://localhost:3000/api/noah
-
ผลลัพธ์
Json{ "message": "Hello, noah!" }
-
ขยายเพิ่มเติม
Bash#ดูสถานะของ Container docker ps #หยุดการทำงานของ Container docker stop <container_id> #ลบ Container ที่ไม่ใช้งาน docker rm <container_id> #folder structure #app # |- go.mod # |- go.sum # |- main.go # |- Dockerfile
Docker และ Cloud Services
Docker และ Cloud Services เป็นเทคโนโลยีที่มีบทบาทสำคัญในวงการ IT และซอฟต์แวร์ในปัจจุบันและอนาคต เนื่องจากการผสานกันของทั้งสองทำให้เกิดความคล่องตัวและประสิทธิภาพในการพัฒนาและจัดการแอปพลิเคชันในหลายมิติ
บทบาทของ Cloud Service
Cloud Providers อย่าง AWS, Google Cloud, Microsoft Azure, และอื่นๆ ได้พัฒนาเครื่องมือและบริการที่สนับสนุน Docker โดยเฉพาะ เช่น
- Container Orchestration Services เช่น AWS ECS, Google Kubernetes Engine (GKE), Azure Kubernetes Service (AKS) เพื่อจัดการและ Scale Container
- Serverless Containers บริการอย่าง AWS Fargate และ Google Cloud Run ช่วยให้สามารถรัน Containers โดยไม่ต้องจัดการ Infrastructure
- Integrated CI/CD Pipelines เช่น AWS CodePipeline, Azure DevOps, หรือ Google Cloud Build ที่สามารถทำงานร่วมกับ Docker ได้โดยตรง
แนวโน้มในอนาคต
- Multi-Cloud Strategy Docker และ Kubernetes จะช่วยให้การย้ายและรันแอปพลิเคชันข้าม Cloud Providers ง่ายขึ้น ลดความเสี่ยงจากการผูกติดกับ Cloud เดียว (Vendor Lock-in)
- Edge Computing Docker จะมีบทบาทสำคัญใน Edge Computing ซึ่งช่วยนำแอปพลิเคชันไปประมวลผลใกล้กับผู้ใช้มากขึ้น เช่น IoT และ 5G
- Hybrid Cloud การผสมผสานระหว่าง On-premise และ Cloud Services จะกลายเป็นมาตรฐานใหม่ โดย Docker จะช่วยให้การจัดการแอปพลิเคชันทั้งสองฝั่งราบรื่น
- Serverless Containers แนวคิด Serverless จะรวมเข้ากับ Containers มากขึ้น โดยนักพัฒนาสามารถโฟกัสที่โค้ด โดยไม่ต้องกังวลเกี่ยวกับ Infrastructure
- Security Enhancement บริการด้านความปลอดภัย เช่น การ Scan Container Images และ Runtime Security จะกลายเป็นมาตรฐาน
สรุปส่งท้าย
Docker ช่วยแก้ปัญหา “It works on my machine” ด้วยการสร้าง Environment ที่เสถียรและใช้ทรัพยากรอย่างมีประสิทธิภาพ และช่วยปรับปรุงกระบวนการพัฒนาและ Deploy Application ให้เร็วและง่ายขึ้น
Docker และ Cloud Services เป็นคู่หูที่สมบูรณ์แบบสำหรับการพัฒนาและ Deploy แอปพลิเคชันในยุคปัจจุบัน ด้วยความสามารถในการ Scale, ยืดหยุ่น และลดความซับซ้อนของการจัดการ Infrastructure การผสานทั้งสองเทคโนโลยีช่วยผลักดันธุรกิจให้ก้าวสู่ยุคดิจิทัลได้อย่างมั่นคง ในอนาคต Docker จะยังคงเป็นหัวใจสำคัญของการพัฒนาและการจัดการระบบที่มีความซับซ้อนสูง โดยเฉพาะในโลกของ Hybrid Cloud และ Edge Computing