กลับไปหน้าบทความ
บันทึกนักพัฒนา

คำสั่ง Docker และ Docker Compose ที่ใช้บ่อย

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

ศิริชัย ธีรภัทรสกุล

ศิริชัย ธีรภัทรสกุล

นักออกแบบและพัฒนาเว็บไซต์อิสระ
1 มิถุนายน 2569·ใช้เวลาอ่าน 8 นาที
คำสั่ง Docker และ Docker Compose ที่ใช้บ่อย

เคยเปิด 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)
-pmap port เช่น -p 8080:80 (host:container)
-vmount 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) ยินดีบริการครับผม

DockerDocker ComposeDevOpsCommand LineContainer
ศิริชัย ธีรภัทรสกุล

เกี่ยวกับผู้เขียน

ศิริชัย ธีรภัทรสกุล

นักออกแบบและพัฒนาเว็บไซต์อิสระ นอกจากการพัฒนาเว็บแล้ว ยังมีความเชี่ยวชาญในการให้คำปรึกษาด้าน IT และการออกแบบ UX/UI

อยากปรับเว็บให้ได้ผลลัพธ์ แต่ไม่รู้จะเริ่มยังไง?

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

ส่งไอเดียให้ผมช่วยประเมิน (ฟรี)

* ปรึกษาผ่าน LINE Official ของเรา — ไม่มีข้อผูกมัดใดๆ