คำสั่ง Docker และ Docker Compose ที่ใช้บ่อย
รวมคำสั่ง Docker และ Docker Compose ที่ใช้บ่อยที่สุด ครอบคลุมตั้งแต่ image, container, network, volume ไปจนถึงการ cleanup พร้อมตัวอย่างจริง

ศิริชัย ธีรภัทรสกุล
นักออกแบบและพัฒนาเว็บไซต์อิสระ
เคยเปิด Google ค้นหาคำสั่ง Docker ซ้ำๆ ทุกครั้งที่นึกไม่ออกบ้างไหมครับ?
ผมก็เป็นแบบนั้นเหมือนกัน โดยเฉพาะคำสั่งที่ไม่ได้ใช้บ่อยนัก อย่างเช่นการดู IP ของ container หรือการลบ image ทั้งหมดพร้อมกัน พอนานๆ ใช้ทีก็ต้องนั่งค้นใหม่ทุกที
บทความนี้ผมรวบรวมคำสั่ง Docker และ Docker Compose ที่ใช้งานจริงบ่อยๆ ไว้ในที่เดียว ตั้งแต่การจัดการ image, container, network ไปจนถึงการ cleanup เพื่อคืนพื้นที่ disk ครับ เก็บไว้ใช้อ้างอิงได้เลย คำสั่งที่รวมไว้นี้คือสิ่งที่ผมใช้จริงในงานทุกวันครับ
คำสั่ง Docker พื้นฐาน
ตรวจสอบเวอร์ชัน
คำสั่งแรกที่ควรรู้คือการตรวจว่า Docker ติดตั้งอยู่และเวอร์ชันอะไรครับ
docker -v
โหลด Image จาก Docker Hub
Docker Hub คือคลังเก็บ image สาธารณะ ใครก็สามารถดึงมาใช้ได้ฟรีครับ
docker pull <image_name>:<tag>
# ตัวอย่าง
docker pull nginx:latest
docker pull node:18
docker pull mysql:8.0
ถ้าไม่ระบุ tag ระบบจะดึงเวอร์ชัน
latestมาให้อัตโนมัติครับ
Build Image จาก Dockerfile
ใช้เมื่อต้องการสร้าง image ของตัวเองจาก Dockerfile ที่เขียนไว้
docker build -t <image_name>:<tag> .
# ตัวอย่าง
docker build -t myapp:1.0 .
docker build -t myapp:latest -f Dockerfile.prod . # ระบุไฟล์ Dockerfile
ดูรายการ Image ในเครื่อง
docker images
# หรือ
docker image ls
ลบ Image
docker rmi <image_name> # ลบแบบระบุชื่อ
docker rmi -f <image_name> # Force ลบแม้มี container ใช้อยู่
docker rmi -f $(docker images -a -q) # ลบ image ทั้งหมด
Push Image ขึ้น Registry
ใช้เมื่อต้องการแชร์ image หรือ deploy ขึ้น server ครับ
docker tag <image_name> <registry>/<image_name>:<tag>
docker push <registry>/<image_name>:<tag>
# ตัวอย่าง push ขึ้น Docker Hub
docker tag myapp:1.0 myusername/myapp:1.0
docker push myusername/myapp:1.0
คำสั่งจัดการ Container
สร้างและรัน Container
คำสั่ง docker run คือคำสั่งที่ใช้บ่อยที่สุดครับ ถ้าไม่มี image อยู่ในเครื่อง มันจะโหลดจาก Docker Hub ให้อัตโนมัติเลย
docker run [options] <image_name>:<tag>
# ตัวอย่างใช้งานจริง
docker run --name myweb -p 8080:80 -v /myweb:/var/www/html -d nginx:latest
Options ที่ใช้บ่อย:
| Option | ความหมาย |
|---|---|
--name | กำหนดชื่อ container |
-d | รันแบบ background (detached mode) |
-p | map port เช่น -p 8080:80 (host:container) |
-v | mount volume เช่น -v /host/path:/container/path |
-e | กำหนด environment variable เช่น -e MYSQL_ROOT_PASSWORD=secret |
--network | ระบุ network ที่ใช้ (default: bridge) |
--rm | ลบ container อัตโนมัติเมื่อหยุดทำงาน |
-it | เปิด interactive terminal |
ดูรายการ Container
docker ps # ดูเฉพาะ container ที่รันอยู่
docker ps -a # ดูทั้งหมด รวมถึงที่หยุดทำงานแล้ว
Start / Stop / Restart Container
docker start <container_name> # เริ่มการทำงาน
docker stop <container_name> # หยุดการทำงาน (graceful)
docker kill <container_name> # หยุดทันที (force)
docker restart <container_name> # restart
หยุด container ทั้งหมดพร้อมกัน:
docker stop $(docker ps -a -q)
ลบ Container
docker rm <container_name> # ลบแบบระบุชื่อ
docker rm -f <container_name> # Force ลบแม้กำลังทำงานอยู่
docker rm $(docker ps -a -q) # ลบทั้งหมด
docker rm $(docker ps -q -f status=exited) # ลบเฉพาะที่หยุดทำงานแล้ว
เข้าไปใน Container (Exec)
คำสั่งนี้ใช้บ่อยมากเวลา debug ครับ
docker exec -it <container_name> bash
# หรือถ้า container นั้นไม่มี bash
docker exec -it <container_name> sh
ถ้าแค่ต้องการรันคำสั่งเดียว ไม่ต้อง interactive:
docker exec <container_name> <command>
# ตัวอย่าง
docker exec mydb mysql -u root -p # เข้า MySQL ใน container
Copy ไฟล์ระหว่าง Host กับ Container
docker cp <container_name>:/path/in/container /local/path # จาก container มา host
docker cp /local/path <container_name>:/path/in/container # จาก host ไป container
ดู Log
docker logs <container_name>
docker logs -f <container_name> # Follow log แบบ real-time
docker logs --tail 100 <container_name> # ดูแค่ 100 บรรทัดล่าสุด
ดูการใช้ Resource (CPU, Memory)
docker stats # ดูทุก container
docker stats <container_name> # ดูเฉพาะ container ที่ระบุ
ดูรายละเอียด Container
docker inspect <container_name>
# ดู IP ของทุก container พร้อมกัน
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
คำสั่ง Network & Volume
จัดการ Network
docker network ls # ดูรายการ network ทั้งหมด
docker network create <network_name> # สร้าง network ใหม่ (default: bridge)
docker network inspect <network_name> # ดูรายละเอียด network
docker network connect <network_name> <container> # เพิ่ม container เข้า network
docker network rm <network_name> # ลบ network
จัดการ Volume
Volume ใช้เก็บข้อมูลที่ต้องการให้คงอยู่แม้ container ถูกลบครับ เช่น database
docker volume ls # ดูรายการ volume ทั้งหมด
docker volume create <volume_name> # สร้าง volume ใหม่
docker volume inspect <volume_name> # ดูรายละเอียด volume
docker volume rm <volume_name> # ลบ volume
docker volume prune # ลบ volume ที่ไม่ได้ใช้ทั้งหมด
คำสั่ง Docker Compose
Docker Compose คือ tool ที่ช่วยจัดการ container หลายตัวพร้อมกันผ่านไฟล์ docker-compose.yml ครับ แทนที่จะต้องพิมพ์คำสั่ง docker run ยาวๆ ทีละตัว
ลองนึกภาพถ้าโปรเจกต์มี container 5 ตัว ทั้ง web server, database, cache, queue, และ worker — Docker Compose จะช่วยให้เราสั่งรันทุกอย่างด้วยคำสั่งเดียวครับ
Build Container
docker-compose build # build ทั้งหมด
docker-compose build <service_name> # build เฉพาะ service
docker-compose -f <yml_name> build # ระบุไฟล์ yml เอง
รัน Container
docker-compose up # รันแบบ foreground (เห็น log)
docker-compose up -d # รันแบบ background
docker-compose up --build # build แล้วรันพร้อมกัน
docker-compose up --force-recreate --build # rebuild ใหม่ทั้งหมด (เมื่อเปลี่ยน config)
docker-compose -f <yml_name> up # ระบุไฟล์ yml
เทคนิค: ใช้
--force-recreate --buildเมื่อแก้ไขdocker-compose.ymlหรือ Dockerfile แล้วต้องการให้ rebuild ใหม่จริงๆ ไม่ใช้ cache เก่าครับ
Start / Stop / Restart
docker-compose start # เริ่มการทำงาน (หลังจาก stop)
docker-compose start <service_name> # เฉพาะ service ที่ระบุ
docker-compose stop # หยุดการทำงาน
docker-compose stop <service_name> # เฉพาะ service ที่ระบุ
docker-compose restart # restart ทั้งหมด
docker-compose restart <service_name> # เฉพาะ service ที่ระบุ
หยุดและลบ Container
docker-compose down # หยุด + ลบ container และ network
docker-compose down -v # หยุด + ลบ container, network และ volume ด้วย
docker-compose down --rmi all # หยุด + ลบทั้ง container, network และ image
ข้อควรระวัง:
docker-compose down -vจะลบ volume ด้วย ข้อมูล database จะหายหมด ระวังให้ดีครับ
ดูรายการ Service
docker-compose ps # ดูสถานะ service ทั้งหมด
ดู Log
docker-compose logs # ดู log ทั้งหมด
docker-compose logs -f # Follow log แบบ real-time
docker-compose logs <service_name> # ดู log เฉพาะ service
docker-compose logs -f <service_name> # Follow log เฉพาะ service
Exec เข้าไปใน Service
docker-compose exec <service_name> bash
docker-compose exec <service_name> sh # กรณีไม่มี bash
ดู Config ที่ compile แล้ว
docker-compose config # แสดง config จริงที่ Docker Compose จะใช้ รวม env vars
คำสั่ง Cleanup & Maintenance
เมื่อใช้ Docker ไปสักพัก disk จะเต็มได้ง่ายมากครับ เพราะ image เก่าๆ และ cache สะสมไว้เยอะ
ดูพื้นที่ที่ Docker ใช้
ผมแนะนำให้รันคำสั่งนี้ก่อนเสมอครับ เพื่อดูว่า Docker กินพื้นที่ไปกับอะไรบ้าง
docker system df # ภาพรวม
docker system df -v # ละเอียดทุก layer
ลบ Resource ที่ไม่ได้ใช้
docker system prune # ลบ container, network, cache ที่ไม่ได้ใช้ (ไม่ลบ image)
docker system prune -a # ลบทุกอย่างรวมถึง image ที่ไม่ได้ใช้งาน
docker image prune # ลบเฉพาะ image ที่ไม่มี tag (dangling images)
docker container prune # ลบเฉพาะ container ที่หยุดทำงานแล้ว
docker network prune # ลบเฉพาะ network ที่ไม่ได้ใช้
docker volume prune # ลบเฉพาะ volume ที่ไม่ได้ใช้
⚠️ คำเตือน:
docker system prune -aค่อนข้างอันตรายครับ ควรตรวจให้มั่นใจก่อนว่า container ที่ต้องการรักษาไว้กำลังรันอยู่ เพราะ container ที่หยุดอยู่จะถูกลบทั้งหมด
สรุป
คำสั่งทั้งหมดที่รวบรวมมานี้คือสิ่งที่ผมใช้จริงในงานพัฒนาเว็บและจัดการ server ครับ ไม่ว่าจะเป็นการ setup environment สำหรับโปรเจกต์ใหม่ debug container ที่มีปัญหา หรือทำความสะอาด disk เมื่อพื้นที่ใกล้เต็ม
หวังว่าคงมีประโยชน์ ในการพัฒนาโปรเจกต์ครับ และต้องการความช่วยเหลือด้านการทำเว็บไซต์ หรือหาคนพัฒนาระบบเฉพาะทาง ทักมาคุยได้เลยนะครับ
ติดต่อปรึกษาฟรี ทาง LINE @codemotive หากสนใจจ้างงานผมมี รับเขียนโปรแกรมพัฒนาระบบเฉพาะทาง (Custom Development) ยินดีบริการครับผม
