IS
ISSARAPONG
System
🇹🇭 ภาษาไทย

เริ่มต้นใช้งาน Docker

เรียนรู้วิธีการติดตั้งและใช้งาน Docker ตั้งแต่พื้นฐาน ครอบคลุมการสร้าง Container, Image, Docker Compose และคำสั่งที่จำเป็นสำหรับนักพัฒนา

Issarapong1 พฤษภาคม 25674 นาที

เริ่มต้นใช้งาน Docker

Docker เป็นแพลตฟอร์ม Containerization ที่ช่วยให้นักพัฒนาสามารถแพ็กเกจแอปพลิเคชันพร้อมกับ Dependencies ทั้งหมดไว้ใน Container เดียว ทำให้สามารถรันได้บนทุกระบบที่มี Docker ติดตั้ง

Docker คืออะไร?

Docker เป็นเครื่องมือที่ช่วยให้สามารถสร้าง, ส่ง, และรันแอปพลิเคชันใน Container ได้ Container คือสภาพแวดล้อมที่แยกออกจากกัน (Isolated Environment) ที่มีทุกอย่างที่แอปพลิเคชันต้องการเพื่อทำงาน ไม่ว่าจะเป็นโค้ด, Runtime, Library และ Config

ความแตกต่างระหว่าง Container กับ Virtual Machine

คุณสมบัติContainerVirtual Machine
ขนาดเล็ก (MB)ใหญ่ (GB)
เวลาเริ่มวินาทีนาที
ทรัพยากรใช้น้อยใช้มาก
OSใช้ร่วมกันแยกกัน

การติดตั้ง Docker

บน Ubuntu/Debian

# อัปเดต package index
sudo apt update

# ติดตั้ง dependencies
sudo apt install -y ca-certificates curl gnupg lsb-release

# เพิ่ม Docker GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# เพิ่ม Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# ติดตั้ง Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# เพิ่ม user เข้า docker group (ไม่ต้องใช้ sudo)
sudo usermod -aG docker $USER

บน macOS

ดาวน์โหลดและติดตั้ง Docker Desktop for Mac จากเว็บไซต์ Docker

ตรวจสอบการติดตั้ง

docker --version
docker run hello-world

คำสั่ง Docker พื้นฐาน

จัดการ Image

# ดาวน์โหลด Image จาก Docker Hub
docker pull nginx

# แสดง Image ที่มีอยู่
docker images

# ลบ Image
docker rmi nginx

# ค้นหา Image บน Docker Hub
docker search ubuntu

จัดการ Container

# รัน Container
docker run nginx

# รัน Container แบบ background (detached mode)
docker run -d nginx

# รัน Container พร้อมตั้งชื่อ
docker run -d --name my-nginx nginx

# รัน Container พร้อม port mapping
docker run -d -p 8080:80 --name my-nginx nginx

# แสดง Container ที่กำลังทำงาน
docker ps

# แสดง Container ทั้งหมด (รวมที่หยุดแล้ว)
docker ps -a

# หยุด Container
docker stop my-nginx

# เริ่ม Container อีกครั้ง
docker start my-nginx

# ลบ Container
docker rm my-nginx

# เข้าไปใน Container
docker exec -it my-nginx bash

ดู Log

# ดู log ของ Container
docker logs my-nginx

# ดู log แบบ real-time
docker logs -f my-nginx

# ดู 50 บรรทัดล่าสุด
docker logs --tail 50 my-nginx

การสร้าง Dockerfile

Dockerfile คือไฟล์ที่ใช้สร้าง Docker Image ของเราเอง

ตัวอย่าง Dockerfile สำหรับ Node.js

# ใช้ base image ที่มี Node.js
FROM node:18-alpine

# ตั้ง working directory
WORKDIR /app

# คัดลอก package files
COPY package*.json ./

# ติดตั้ง dependencies
RUN npm install --production

# คัดลอกโค้ดทั้งหมด
COPY . .

# เปิด port 3000
EXPOSE 3000

# คำสั่งเริ่มต้นแอปพลิเคชัน
CMD ["node", "server.js"]

Build Image

# Build image จาก Dockerfile
docker build -t my-node-app .

# Build พร้อม tag เวอร์ชัน
docker build -t my-node-app:1.0 .

# รัน image ที่ build แล้ว
docker run -d -p 3000:3000 my-node-app

Docker Compose

Docker Compose ช่วยให้จัดการหลาย Container พร้อมกันได้ง่ายด้วยไฟล์ docker-compose.yml

ตัวอย่าง docker-compose.yml

version: '3.8'

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - api

  api:
    build: ./api
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=db
    depends_on:
      - db

  db:
    image: postgres:15
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=your_secure_password_here
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

คำสั่ง Docker Compose

# เริ่มต้น services ทั้งหมด
docker compose up -d

# หยุด services ทั้งหมด
docker compose down

# ดู logs ของทุก service
docker compose logs -f

# Scale service
docker compose up -d --scale api=3

# Build และ restart
docker compose up -d --build

Docker Volume

Volume ใช้สำหรับเก็บข้อมูลที่ต้องการให้คงอยู่แม้ Container จะถูกลบ

# สร้าง volume
docker volume create my-data

# รัน Container พร้อม mount volume
docker run -d -v my-data:/app/data my-app

# แสดง volumes ที่มีอยู่
docker volume ls

# ลบ volume
docker volume rm my-data

Docker Network

# สร้าง network
docker network create my-network

# รัน Container ใน network เดียวกัน
docker run -d --network my-network --name app1 my-app
docker run -d --network my-network --name app2 my-app

# แสดง networks
docker network ls

# ดูรายละเอียด network
docker network inspect my-network

เคล็ดลับการใช้งาน Docker

ทำความสะอาดระบบ

# ลบ Container ที่หยุดแล้วทั้งหมด
docker container prune

# ลบ Image ที่ไม่ได้ใช้
docker image prune

# ลบ Volume ที่ไม่ได้ใช้
docker volume prune

# ทำความสะอาดทุกอย่างพร้อมกัน
docker system prune -a

ตรวจสอบทรัพยากร

# ดูการใช้ทรัพยากรของ Container
docker stats

# ดูข้อมูลโดยละเอียดของ Container
docker inspect my-nginx

เครื่องมือที่เกี่ยวข้อง

  • System Monitor — มอนิเตอร์ประสิทธิภาพระบบแบบเรียลไทม์
  • System Info — ข้อมูลระบบและเบราว์เซอร์โดยละเอียด