🐳 Docker
Docker เป็นแพลตฟอร์มสำหรับการรันแอปพลิเคชันในคอนเทนเนอร์ที่แยกออกจากกัน ชีทโกงนี้รวมคำสั่งสำหรับการทำงานกับอิมเมจ คอนเทนเนอร์ เครือข่าย วอลุ่ม รวมถึง Docker Compose และ Swarm
📦 คำสั่งพื้นฐาน
| คำสั่ง | ตัวอย่าง | คำอธิบาย | 
|---|---|---|
| docker | คำสั่งหลักของ Docker CLI ที่ใช้รันคำสั่งย่อยและจัดการคอนเทนเนอร์ อิมเมจ เครือข่าย และวอลุ่ม | |
| docker version | แสดงเวอร์ชัน Docker ที่ติดตั้ง (client และ server) ใช้ตรวจสอบการติดตั้ง | |
| docker version --format '{{.Client.APIVersion}}' | แสดงเฉพาะเวอร์ชัน API ของ Docker client | |
| docker version --format '{{.Server.Version}}' | แสดงเฉพาะเวอร์ชัน Docker server (Engine) | |
| docker version --format '{{json .}}' | ส่งออกข้อมูลเวอร์ชันเต็มในรูปแบบ JSON | |
| docker system info | แสดงข้อมูลทั่วไปของระบบ Docker: จำนวนคอนเทนเนอร์ อิมเมจ และทรัพยากร | |
| docker info | แสดงข้อมูล Docker: เวอร์ชัน เครือข่าย จำนวนคอนเทนเนอร์และอิมเมจ | |
| docker info --format '{{json .}}' | ส่งออกข้อมูลในรูปแบบ JSON — เหมาะสำหรับระบบอัตโนมัติ | |
| docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM' | แสดงจำนวน CPU และหน่วยความจำทั้งหมด | |
| docker info --format '{{.Driver}}' | แสดง storage driver ที่ Docker ใช้งาน | |
| docker image pull | ดาวน์โหลดอิมเมจจาก Docker Hub หรือ registry อื่น คอนเทนเนอร์ไม่สามารถรันได้หากไม่มีอิมเมจ | |
| docker pull ubuntu | ดาวน์โหลดอิมเมจ Ubuntu ล่าสุด | |
| docker pull nginx:alpine | ดาวน์โหลดอิมเมจ Nginx ที่มีขนาดเล็ก (Alpine Linux) | |
| docker pull redis:7 | ดาวน์โหลดอิมเมจ Redis เวอร์ชัน 7 | |
| docker container run | สร้างและรันคอนเทนเนอร์ใหม่จากอิมเมจ | |
| docker run -it ubuntu bash | รัน Ubuntu พร้อม Bash แบบ interactive | |
| docker run -d nginx | รัน Nginx ในโหมดเบื้องหลัง (detached) | |
| docker run -p 8080:80 nginx | รัน Nginx และผูกพอร์ต 80 ของคอนเทนเนอร์กับพอร์ต 8080 ของโฮสต์ | |
| docker container ls | แสดงรายการคอนเทนเนอร์ที่กำลังทำงาน | |
| docker ps | แสดงเฉพาะคอนเทนเนอร์ที่กำลังรัน | |
| docker ps -a | แสดงคอนเทนเนอร์ทั้งหมด รวมถึงที่หยุดแล้ว | |
| docker ps --format '{{.Names}}' | แสดงเฉพาะชื่อคอนเทนเนอร์ | |
| docker container start | เริ่มคอนเทนเนอร์ที่หยุดไว้ | |
| docker start container_name | เริ่มคอนเทนเนอร์ตามชื่อ | |
| docker start $(docker ps -aq) | เริ่มคอนเทนเนอร์ทั้งหมด | |
| docker start -ai container_name | เริ่มคอนเทนเนอร์และเข้า terminal แบบ interactive | |
| docker container stop | หยุดคอนเทนเนอร์ที่กำลังทำงาน | |
| docker stop container_name | หยุดคอนเทนเนอร์ตามชื่อ | |
| docker stop $(docker ps -q) | หยุดคอนเทนเนอร์ทั้งหมดที่กำลังรัน | |
| docker stop -t 5 container_name | หยุดคอนเทนเนอร์โดยให้เวลา 5 วินาทีในการปิด process | |
| docker container restart | รีสตาร์ทคอนเทนเนอร์ | |
| docker restart container_name | รีสตาร์ทคอนเทนเนอร์ที่กำหนด | |
| docker restart $(docker ps -q) | รีสตาร์ทคอนเทนเนอร์ทั้งหมดที่กำลังทำงาน | |
| docker restart -t 10 container_name | รีสตาร์ทคอนเทนเนอร์โดยหน่วงเวลา 10 วินาที | |
| docker container rm | ลบคอนเทนเนอร์ | |
| docker rm container_name | ลบคอนเทนเนอร์ที่หยุดแล้ว | |
| docker rm $(docker ps -aq) | ลบคอนเทนเนอร์ทั้งหมดที่หยุด | |
| docker rm -f container_name | บังคับลบคอนเทนเนอร์ที่กำลังทำงาน | |
| docker image ls | แสดงรายการอิมเมจที่ดาวน์โหลดแล้ว | |
| docker images | แสดงอิมเมจทั้งหมดในโฮสต์ | |
| docker images -a | แสดงอิมเมจทั้งหมด รวมชั้นกลาง (intermediate layers) | |
| docker images --format '{{.Repository}}:{{.Tag}}' | แสดงเฉพาะชื่อและ tag ของอิมเมจ | |
| docker image rm | ลบอิมเมจหนึ่งหรือหลายอิมเมจจาก local storage | |
| docker rmi test1:latest | ลบอิมเมจที่มี tag  | |
| docker rmi 1a2b3c4d5e6f | ลบอิมเมจตาม ID | |
| docker rmi $(docker images -q) | ลบอิมเมจทั้งหมด (โปรดระวัง!) | 
🔁 การจัดการคอนเทนเนอร์
| คำสั่ง | ตัวอย่าง | คำอธิบาย | 
|---|---|---|
| docker container exec | รันคำสั่งภายในคอนเทนเนอร์ที่กำลังทำงาน | |
| docker exec -it container bash | เปิด bash shell แบบ interactive ภายในคอนเทนเนอร์ชื่อ  | |
| docker exec container ls /app | รันคำสั่ง  | |
| docker exec -d container touch /tmp/testfile | รันคำสั่งในคอนเทนเนอร์ในโหมด detached (ไม่ต้องรอ) | |
| docker container logs | ดู log ของคอนเทนเนอร์ | |
| docker logs container | แสดง log ทั้งหมดของคอนเทนเนอร์  | |
| docker logs -f container | ติดตาม log แบบเรียลไทม์ | |
| docker logs --tail 50 container | แสดง log 50 บรรทัดล่าสุด | |
| docker inspect | ดึงข้อมูล JSON แบบละเอียดเกี่ยวกับคอนเทนเนอร์หรืออิมเมจ | |
| docker inspect container | แสดงรายละเอียดของคอนเทนเนอร์  | |
| docker inspect --format '{{.NetworkSettings.IPAddress}}' container | แสดง IP address ของคอนเทนเนอร์ | |
| docker container stats | แสดงสถิติการใช้งานทรัพยากรของคอนเทนเนอร์แบบเรียลไทม์ | |
| docker stats | แสดง CPU หน่วยความจำ เครือข่าย และดิสก์ของทุกคอนเทนเนอร์ | |
| docker stats container_name | แสดงเฉพาะคอนเทนเนอร์ที่เลือก | |
| docker stats --no-stream | แสดง snapshot เพียงครั้งเดียวแล้วออก | |
| docker container rename | เปลี่ยนชื่อคอนเทนเนอร์ | |
| docker rename old_name new_name | เปลี่ยนชื่อคอนเทนเนอร์จาก  | |
| docker container cp | คัดลอกไฟล์ระหว่างคอนเทนเนอร์กับโฮสต์ | |
| docker cp container:/src/file.txt ./file.txt | คัดลอกไฟล์จากคอนเทนเนอร์ไปยังโฮสต์ปัจจุบัน | |
| docker cp ./config.yaml container:/app/config.yaml | คัดลอกไฟล์จากโฮสต์ไปยังคอนเทนเนอร์ | |
| docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR" | stream ไฟล์ log จากคอนเทนเนอร์แล้วกรองบรรทัดที่มี “ERROR” โดยไม่บันทึกลงดิสก์ | |
| docker container top | แสดง process ที่กำลังทำงานภายในคอนเทนเนอร์ | |
| docker top container | แสดง process ของคอนเทนเนอร์ชื่อ  | |
| docker container pause | หยุด (pause) process ทั้งหมดในคอนเทนเนอร์ | |
| docker pause container | หยุดคอนเทนเนอร์  | |
| docker container unpause | resume คอนเทนเนอร์ที่ถูก pause | |
| docker unpause container | resume คอนเทนเนอร์  | |
| docker container update | อัปเดตการตั้งค่าคอนเทนเนอร์โดยไม่ต้องรีสตาร์ท | |
| docker update --memory 500m container | จำกัดการใช้หน่วยความจำของคอนเทนเนอร์ไว้ที่ 500 MB | 
🧱 อิมเมจและ Dockerfile
| คำสั่ง | ตัวอย่าง | คำอธิบาย | 
|---|---|---|
| docker buildx build | สร้างอิมเมจ Docker จาก Dockerfile | |
| docker build -t my_image . | สร้างอิมเมจชื่อ  | |
| docker build -t my_image:1.0 . | สร้างอิมเมจที่มี tag  | |
| docker build --no-cache -t my_image . | สร้างอิมเมจโดยไม่ใช้ cache | |
| docker container commit | สร้างอิมเมจจากสถานะปัจจุบันของคอนเทนเนอร์ | |
| docker commit container my_img:v1 | สร้างอิมเมจ  | |
| docker commit -m "Added config" container my_img:v2 | สร้างอิมเมจพร้อม commit message | |
| docker commit -a "John Doe" container my_img:latest | สร้างอิมเมจโดยกำหนด author | |
| docker image tag | เพิ่มหรือเปลี่ยน tag ของอิมเมจ | |
| docker tag my_image myrepo/my_image:latest | เพิ่ม tag สำหรับ push ไปยัง registry  | |
| docker tag my_image:1.0 my_image:stable | สร้าง tag  | |
| docker tag my_image my_image:backup | เพิ่ม tag  | |
| docker image push | push อิมเมจไปยัง Docker Hub หรือ registry อื่น | |
| docker push myrepo/my_image:latest | push อิมเมจที่มี tag  | |
| docker push myrepo/my_image:1.0 | push อิมเมจที่มี tag  | |
| docker push myrepo/my_image | push อิมเมจด้วย tag เริ่มต้น  | |
| docker login | ยืนยันตัวตนกับ Docker Hub หรือ registry อื่น | |
| docker login | กรอก username และ password สำหรับ Docker Hub | |
| docker login myregistry.local:5000 | เข้าสู่ระบบ registry ส่วนตัว | |
| docker login -u username -p password | เข้าสู่ระบบด้วย username และ password (ไม่แนะนำ) | |
| docker logout | ออกจากระบบ Docker Hub หรือ registry อื่น | |
| docker logout | ออกจาก Docker Hub | |
| docker logout myregistry.local:5000 | ออกจาก registry ส่วนตัว | |
| HEALTHCHECK | คำสั่ง Dockerfile สำหรับตรวจสอบสุขภาพของคอนเทนเนอร์อัตโนมัติ | |
| HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1 | เพิ่ม health check เพื่อตรวจสอบบริการทุก 30 วินาที | |
| docker inspect --format='{{json .State.Health}}' container_name | ตรวจสอบ healthcheck status ของคอนเทนเนอร์ที่กำลังทำงาน | 
🔌 เครือข่ายและวอลุ่ม
| คำสั่ง | ตัวอย่าง | คำอธิบาย | 
|---|---|---|
| docker network ls | แสดงรายการ Docker networks ทั้งหมด | |
| docker network ls | แสดง Docker networks ที่สร้างทั้งหมด | |
| docker network ls --filter driver=bridge | แสดงเฉพาะ network ที่ใช้ driver  | |
| docker network ls --format '{{.Name}}' | แสดงเฉพาะชื่อ network | |
| docker network create | สร้าง Docker network ใหม่ | |
| docker network create my_net | สร้าง network ชื่อ  | |
| docker network create --driver bridge my_bridge_net | สร้าง network ด้วย driver  | |
| docker network create --subnet=192.168.10.0/24 my_custom_net | สร้าง network พร้อม subnet ที่กำหนดเอง | |
| docker network connect | เชื่อมต่อคอนเทนเนอร์เข้ากับ network | |
| docker network connect my_net container | เชื่อมต่อคอนเทนเนอร์ชื่อ  | |
| docker network connect --alias db_net my_net container | เชื่อมต่อด้วย alias  | |
| docker network disconnect | ยกเลิกการเชื่อมต่อคอนเทนเนอร์จาก network | |
| docker network disconnect my_net container | ยกเลิกการเชื่อมต่อคอนเทนเนอร์  | |
| docker volume ls | แสดงรายการ Docker volumes ทั้งหมด | |
| docker volume ls | แสดง Docker volumes ทั้งหมด | |
| docker volume ls --filter dangling=true | แสดง volumes ที่ไม่ได้ใช้งาน | |
| docker volume create | สร้าง Docker volume ใหม่ | |
| docker volume create my_vol | สร้าง volume ชื่อ  | |
| docker volume create --driver local --opt type=tmpfs my_tmp_vol | สร้าง volume ชั่วคราวด้วย tmpfs | |
| docker volume inspect | แสดงรายละเอียดเกี่ยวกับ volume | |
| docker volume inspect my_vol | แสดงรายละเอียดของ volume  | |
| docker volume rm | ลบ volume หนึ่งหรือหลายอัน | |
| docker volume rm my_vol | ลบ volume ชื่อ  | |
| docker volume rm $(docker volume ls -qf dangling=true) | ลบ volumes ที่ไม่ได้ใช้งานทั้งหมด | 
🧩 ปลั๊กอินของ Docker
| คำสั่ง | ตัวอย่าง | คำอธิบาย | 
|---|---|---|
| docker plugin ls | แสดงปลั๊กอิน Docker ที่ติดตั้งแล้ว | |
| docker plugin ls | แสดงปลั๊กอินทั้งหมดและสถานะ | |
| docker plugin install | ติดตั้งปลั๊กอิน Docker จาก registry | |
| docker plugin install vieux/sshfs | ติดตั้งปลั๊กอิน SSHFS volume | |
| docker plugin install store/weaveworks/net-plugin:latest_release | ติดตั้งปลั๊กอินเครือข่าย Weave | |
| docker plugin disable | ปิดการใช้งานปลั๊กอินที่ติดตั้งแล้ว | |
| docker plugin disable vieux/sshfs | ปิดการใช้งานปลั๊กอิน SSHFS | |
| docker plugin enable | เปิดใช้งานปลั๊กอินที่ถูกปิดไว้ | |
| docker plugin enable vieux/sshfs | เปิดใช้งานปลั๊กอิน SSHFS | |
| docker plugin rm | ลบปลั๊กอิน Docker | |
| docker plugin rm vieux/sshfs | ลบปลั๊กอิน SSHFS | 
📋 Docker Compose
| คำสั่ง | ตัวอย่าง | คำอธิบาย | 
|---|---|---|
| docker compose up | เริ่มคอนเทนเนอร์ที่กำหนดไว้ใน docker-compose.yml | |
| docker compose up | เริ่มบริการทั้งหมดในไดเรกทอรีปัจจุบันแบบ interactive | |
| docker compose up -d | เริ่มบริการในโหมดเบื้องหลัง (detached) | |
| docker compose up --build | build อิมเมจก่อนเริ่มบริการ | |
| docker compose down | หยุดและลบคอนเทนเนอร์ เครือข่าย และวอลุ่มที่สร้างโดย up | |
| docker compose down | หยุดบริการทั้งหมดและลบ resource ที่เกี่ยวข้อง | |
| docker compose down --volumes | ลบวอลุ่มที่สร้างโดย Compose ด้วย | |
| docker compose down --rmi all | ลบอิมเมจที่สร้างโดย Compose ด้วย | |
| docker compose logs | ดู log ของบริการทั้งหมดหรือบริการที่เลือก | |
| docker compose logs | แสดง log ของทุกบริการ | |
| docker compose logs -f | ติดตาม log แบบเรียลไทม์ | |
| docker compose logs web | แสดง log ของบริการ  | |
| docker compose exec | รันคำสั่งในคอนเทนเนอร์บริการที่กำลังทำงาน | |
| docker compose exec web bash | เข้าสู่ bash shell ภายในบริการ  | |
| docker compose exec db ls /var/lib/postgresql | รันคำสั่ง  | |
| docker compose exec -d worker touch /tmp/done | รันคำสั่งในคอนเทนเนอร์  | |
| docker compose build | สร้างหรือ build อิมเมจบริการใหม่ | |
| docker compose build | build อิมเมจทั้งหมดใน  | |
| docker compose build web | build อิมเมจเฉพาะของบริการ  | |
| docker compose build --no-cache | build อิมเมจโดยไม่ใช้ cache | |
| docker compose ps | แสดงสถานะของบริการและคอนเทนเนอร์ | |
| docker compose ps -a | แสดงคอนเทนเนอร์ทั้งหมด รวมถึงที่หยุดแล้ว | |
| docker compose ps --services | แสดงเฉพาะชื่อบริการ | |
| docker compose pull | ดาวน์โหลด/อัปเดตอิมเมจบริการจาก registry | |
| docker compose pull web | pull อิมเมจเฉพาะบริการ  | |
| docker compose pull --ignore-pull-failures | ทำการ pull ต่อไปแม้บางอิมเมจจะล้มเหลว | |
| docker compose restart | รีสตาร์ทบริการทั้งหมดหรือที่เลือก | |
| docker compose restart db | รีสตาร์ทบริการ  | |
| docker compose restart -t 10 | รีสตาร์ทบริการพร้อม timeout 10 วินาที | |
| docker compose config | แสดงการตั้งค่า Compose สุดท้ายในรูปแบบ YAML | |
| docker compose config --services | แสดงรายการบริการทั้งหมด | |
| docker compose config --volumes | แสดงรายการวอลุ่มที่กำหนด | |
| docker compose start | เริ่มบริการที่หยุดไว้โดยไม่สร้างคอนเทนเนอร์ใหม่ | |
| docker compose start web | เริ่มบริการ  | |
| docker compose start db api | เริ่มหลายบริการพร้อมกัน | |
| docker compose stop | หยุดบริการโดยไม่ลบคอนเทนเนอร์ | |
| docker compose stop web | หยุดบริการ  | |
| docker compose stop -t 5 | หยุดบริการพร้อม timeout 5 วินาที | 
📤 การส่งออกและนำเข้า
| คำสั่ง | ตัวอย่าง | คำอธิบาย | 
|---|---|---|
| docker image save | บันทึกอิมเมจ Docker หนึ่งหรือหลายอันเป็นไฟล์ tar เพื่อใช้ในการนำเข้าหรือถ่ายโอนในภายหลัง | |
| docker save -o image.tar my_img:tag | บันทึกอิมเมจ Docker เป็นไฟล์ tar | |
| docker save my_image > my_image.tar | วิธีอื่นในการบันทึกอิมเมจเป็นไฟล์ | |
| docker save -o redis_latest.tar redis:latest | บันทึกอิมเมจ Redis ที่กำหนดลงไฟล์ | |
| docker image load | โหลดอิมเมจ Docker จากไฟล์ tar ที่บันทึกไว้ก่อนหน้า | |
| docker load < image.tar | โหลดอิมเมจจากไฟล์ tar | |
| docker load --input redis_latest.tar | โหลดอิมเมจโดยระบุไฟล์ผ่านพารามิเตอร์ | |
| docker load --quiet < my_image.tar | โหลดอิมเมจโดยไม่แสดง progress | |
| docker container export | ส่งออกไฟล์ระบบของคอนเทนเนอร์เป็นไฟล์ tar โดยไม่มีประวัติอิมเมจหรือ metadata | |
| docker export container > file.tar | ส่งออกไฟล์ระบบคอนเทนเนอร์เป็น archive | |
| docker export my_container > my_container_fs.tar | ส่งออกคอนเทนเนอร์ตามชื่อ | |
| docker export -o container_fs.tar container_id | ส่งออกโดยใช้ Container ID พร้อม flag  | |
| docker image import | สร้างอิมเมจใหม่จากไฟล์ tar ของไฟล์ระบบ | |
| docker import file.tar new_img | นำเข้าไฟล์ archive เป็นอิมเมจ Docker ใหม่ | |
| docker import https://example.com/image.tar my_new_image | นำเข้าอิมเมจโดยตรงจาก URL | |
| docker import - my_image < file.tar | นำเข้าจาก standard input | 
🧹 การล้างข้อมูลและการวินิจฉัย
| คำสั่ง | ตัวอย่าง | คำอธิบาย | 
|---|---|---|
| docker system df | แสดงการใช้งานดิสก์ของ Docker: volumes, images, containers และ build cache | |
| docker system df -v | ผลลัพธ์แบบละเอียดพร้อมข้อมูลของแต่ละอิมเมจ คอนเทนเนอร์ และวอลุ่ม | |
| docker system df --format '{{json .}}' | ส่งออกข้อมูลในรูปแบบ JSON | |
| docker system prune | ลบข้อมูลที่ไม่ได้ใช้งานของ Docker ทั้งหมด: คอนเทนเนอร์ที่หยุดแล้ว เครือข่ายที่ไม่ได้ใช้งาน อิมเมจที่ไม่ถูกอ้างอิง และ build cache | |
| docker system prune -a | ลบอิมเมจที่ไม่ได้ใช้งานรวมถึง intermediate ones | |
| docker system prune --volumes | ลบวอลุ่มที่ไม่ได้ใช้งานพร้อม resource อื่น ๆ | |
| docker image prune | ลบอิมเมจ Docker ที่ไม่ได้ใช้งาน รวมถึงชั้นที่ dangling | |
| docker image prune -a | ลบอิมเมจทั้งหมดที่ไม่ได้ใช้งานรวมถึง dangling | |
| docker image prune --filter "until=24h" | ลบอิมเมจที่เก่ากว่า 24 ชั่วโมง | |
| docker container prune | ลบคอนเทนเนอร์ที่หยุดแล้วตาม filter หรือทั้งหมดหากไม่กำหนด | |
| docker container prune --filter "until=24h" | ลบคอนเทนเนอร์ที่หยุดแล้วและมีอายุมากกว่า 24 ชั่วโมง | |
| docker container prune --force | ลบโดยไม่ต้องยืนยัน | 
🐝 Docker Swarm
| คำสั่ง | ตัวอย่าง | คำอธิบาย | 
|---|---|---|
| docker swarm init | เริ่มต้นคลัสเตอร์ Docker Swarm ใหม่บนโหนดปัจจุบัน | |
| docker swarm init --advertise-addr 192.168.1.100 | เริ่มต้นคลัสเตอร์โดยระบุ IP address | |
| docker swarm init --listen-addr 0.0.0.0:2377 | เริ่มต้นพร้อมระบุพอร์ตสำหรับรับการเชื่อมต่อ | |
| docker service create | สร้างบริการใหม่ในคลัสเตอร์ Swarm | |
| docker service create --name nginx nginx | สร้างบริการ Nginx ใน Swarm | |
| docker service create --replicas 3 --name web webserver | สร้างบริการพร้อม replicas จำนวน 3 | |
| docker service create --name redis --publish 6379:6379 redis | สร้างบริการพร้อมการแมปพอร์ต | |
| docker stack deploy | ดีพลอย stack ของบริการไปยังคลัสเตอร์ Swarm ตามไฟล์ Compose | |
| docker stack deploy -c docker-compose.yml mystack | ดีพลอย stack จากไฟล์ compose | |
| docker stack deploy --with-registry-auth -c compose.yml mystack | ดีพลอยพร้อมการส่งต่อข้อมูลรับรอง registry | |
| docker stack deploy -c swarm-compose.yml mystack | ใช้ไฟล์ compose ทางเลือกสำหรับ stack | |
| docker stack rm | ลบ stack หนึ่งหรือหลายอันออกจากคลัสเตอร์ Swarm | |
| docker stack rm mystack | ลบ stack  | |
| docker stack rm | ลบ stack ทั้งหมด (ไม่แนะนำ) | |
| docker stack rm mystack && docker swarm leave --force | ลบ stack และออกจาก Swarm | 
💼 การใช้งาน Docker ขั้นสูง
🚀 คำสั่ง Docker ระดับมืออาชีพ
| คำสั่ง | ตัวอย่าง | คำอธิบาย | 
|---|---|---|
| docker buildx | เครื่องมือ build อิมเมจขั้นสูงแทน docker buildรองรับ multi-platform, cache, การ build ขนาน และการส่งออกหลายรูปแบบ เหมาะสำหรับ CI/CD และการพัฒนาข้ามแพลตฟอร์ม | |
| docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi . | สร้างอิมเมจ multi-platform (ARM และ x86 พร้อมกัน) | |
| docker buildx build --load -t localimg . | สร้างอิมเมจและโหลดเข้าสู่ cache ของ Docker Engine ภายในเครื่อง | |
| docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest . | สร้างและ push อิมเมจ multi-platform ไปยัง registry | |
| docker context | จัดการ Docker contexts สำหรับทำงานกับ remote หรือหลาย environment ทำให้สามารถสลับระหว่าง local และ remote Docker Engines ได้อย่างรวดเร็ว | |
| docker context create myremote --docker "host=ssh://user@host" | สร้าง context สำหรับเชื่อมต่อไปยังโฮสต์ Docker ระยะไกล | |
| docker context use myremote | สลับไปยัง context ระยะไกล | |
| docker context ls | แสดง contexts ที่มีอยู่และ context ที่ใช้งานอยู่ | |
| docker system events | ฟัง events ของ Docker แบบเรียลไทม์ พร้อมกรองตามชนิด event (เช่น การเริ่มคอนเทนเนอร์) เหมาะสำหรับการมอนิเตอร์และระบบอัตโนมัติ | |
| docker events --filter 'event=start' | แสดงเฉพาะ event ของการเริ่มคอนเทนเนอร์ | |
| docker events --since 1h --until 10m | แสดง events ตั้งแต่ 1 ชั่วโมงที่แล้วจนถึง 10 นาทีที่แล้ว | |
| docker events --filter 'type=network' | แสดงเฉพาะ events ที่เกี่ยวข้องกับเครือข่าย | |
| docker events --filter 'image=nginx' | แสดง events ที่เกี่ยวข้องกับอิมเมจ  | |
| docker container update | เปลี่ยนการจำกัดทรัพยากรและการตั้งค่าของคอนเทนเนอร์ที่กำลังทำงานโดยไม่ต้องรีสตาร์ท | |
| docker update --cpus 2 --memory 1g my_container | จำกัดการใช้งานที่ 2 CPU และ RAM 1 GB | |
| docker update --restart unless-stopped my_container | ตั้งค่านโยบาย auto-restart เป็น  | |
| docker update --pids-limit 200 my_container | จำกัดจำนวน process ไม่เกิน 200 | |
| docker container diff | แสดงการเปลี่ยนแปลงไฟล์ระบบของคอนเทนเนอร์เมื่อเทียบกับอิมเมจต้นฉบับ ใช้สำหรับดีบักและตรวจสอบ | |
| docker diff my_container | แสดงการเปลี่ยนแปลงไฟล์ระบบทั้งหมดในคอนเทนเนอร์ | |
| docker diff my_container | grep '^A' | แสดงเฉพาะไฟล์ที่ถูกเพิ่ม ( | |
| docker image history | แสดงประวัติชั้นของอิมเมจ: คำสั่ง build, ขนาดของแต่ละชั้น และเวลาที่สร้าง เหมาะสำหรับการปรับแต่งและตรวจสอบ | |
| docker history my_image | แสดงประวัติชั้นของอิมเมจ | |
| docker history --no-trunc my_image | แสดงคำสั่ง build แบบเต็มโดยไม่ตัด | |
| docker history --format "{{.CreatedBy}}: {{.Size}}" my_image | ส่งออกเฉพาะคำสั่ง build และขนาดชั้น | 
🛠 แนวทางและระบบอัตโนมัติที่เป็นประโยชน์
- ลดขนาดอิมเมจ 
 ใช้ base images เช่น- alpineหรือ- scratchเพื่อขนาดเล็กที่สุด
 เพื่อลดชั้น คุณสามารถใช้- --squashระหว่างการ build (ต้องเปิด experimental features)
 ลบไฟล์ชั่วคราวและ cache ภายในชั้นเดียว:- RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
- ลดจำนวนชั้น 
 รวมคำสั่งไว้ใน- RUNเดียวเพื่อลดจำนวนชั้นและขนาดอิมเมจสุดท้าย:- RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
- เพิ่มประสิทธิภาพการ build Dockerfile 
 ใช้ multi-stage builds เพื่อเก็บเฉพาะไฟล์ที่จำเป็นในอิมเมจสุดท้าย
 คัดลอกและติดตั้ง dependencies ก่อน จากนั้นจึงคัดลอกโค้ด — ช่วยปรับ cache ของชั้นและเร่งการ build
- แยก secrets และ configs 
 อย่าเก็บไฟล์- .env, API keys หรือใบรับรองส่วนตัวในอิมเมจ
 ควรใช้สำหรับการกำหนดค่า:- docker secret(ใน Swarm)
 
- environment variables (-e VAR=valueหรือ.env)
 
- external volumes สำหรับ configs 
 
- Secrets ตอน build (BuildKit) 
 สำหรับส่ง secrets อย่างปลอดภัยระหว่าง build ให้ใช้ flag- --secret:- docker buildx build --secret id=mysecret,src=./secret.txt .- ใน Dockerfile secret จะอยู่ที่ - /run/secrets/mysecret:- RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret- 🛡 สิ่งนี้ช่วยป้องกันไม่ให้ secrets ถูกเก็บในชั้นอิมเมจ 
- Rootless Docker 
 การรัน Docker โดยไม่ใช้สิทธิ์ root ช่วยเพิ่มความปลอดภัยและลดความเสี่ยงต่อโฮสต์
 วิธีเปิดใช้งาน:- dockerd-rootless-setuptool.sh install export PATH=/usr/bin:$PATH- ตรวจสอบ: - docker info | grep Rootless- ⚠ ฟีเจอร์บางอย่าง (เช่น การ forward พอร์ต <1024) จะไม่สามารถใช้งานได้ 
- สแกนอิมเมจหาช่องโหว่ 
 ใช้เครื่องมือในตัว:- docker scan my_image- หรือ CLI ใหม่: - docker scout cves my_image- ช่วยตรวจหาช่องโหว่ใน base images และ dependencies 
- จำกัดการใช้ทรัพยากร 
 จำกัดคอนเทนเนอร์ด้วยหน่วยความจำ CPU และจำนวน process:- docker run --memory=512m --cpus="1.5" --pids-limit=200 myimage- ป้องกันไม่ให้คอนเทนเนอร์ใช้ทรัพยากรมากเกินไป 
 คุณยังสามารถจำกัด I/O ได้:- docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimage- เหมาะสำหรับคอนเทนเนอร์ที่ไม่ควรโหลดระบบดิสก์มากเกินไป 
- การล้างข้อมูลอัตโนมัติ 
 ลบอิมเมจ คอนเทนเนอร์ วอลุ่ม และเครือข่ายที่ไม่ได้ใช้งานเป็นประจำ:- docker system prune -af --volumes- ⚠ โปรดระวัง: คำสั่งนี้จะลบ resource ที่ไม่ได้ใช้งานทั้งหมด - หากต้องการลบแบบเลือกใช้: - docker image prune --filter "until=24h"
- การผสานกับ CI/CD 
 ฝังการ build, test และ deploy ใน GitHub Actions, GitLab CI, Jenkins pipelines
 ตัวอย่างขั้นตอนใน GitHub Actions:- - run: docker build -t myapp:${GITHUB_SHA} . - run: docker push myapp:${GITHUB_SHA}
- การบันทึกและมอนิเตอร์ 
 เชื่อม logging drivers (- --log-driver) เข้ากับระบบส่วนกลาง: ELK, Loki, Splunk
 ใช้ Prometheus + cAdvisor สำหรับ metrics ของคอนเทนเนอร์
- การดีพลอยใน Production 
 แยก config สำหรับ development และ production โดยใช้- docker-compose.override.yml
 สำหรับ high availability และ scaling ใช้:- Docker Swarm
 
- Kubernetes 
 
- Docker Swarm
🐞 การดีบักและการโปรไฟล์คอนเทนเนอร์ Docker
| คำสั่ง | ตัวอย่าง | คำอธิบาย | 
|---|---|---|
| docker container exec | รันคำสั่งภายในคอนเทนเนอร์ที่กำลังทำงาน เพื่อเข้าถึงแบบ interactive หรือรัน process ในสภาพแวดล้อมแยก | |
| docker exec -it my_container bash | เริ่ม terminal (bash) แบบ interactive ภายในคอนเทนเนอร์ | |
| docker exec -it my_container sh | เริ่ม shell ขั้นต่ำในคอนเทนเนอร์ (ถ้า bash ไม่มี) | |
| docker exec my_container ls /app | รันคำสั่งภายในคอนเทนเนอร์โดยไม่ใช้โหมด interactive | |
| docker container logs | แสดง log ของคอนเทนเนอร์ที่เลือก ช่วยดูผลลัพธ์และ event ที่เกี่ยวข้องกับการทำงานเพื่อวินิจฉัยและมอนิเตอร์ | |
| docker logs -f --tail 100 my_container | ดู 100 บรรทัดล่าสุดของ log แบบเรียลไทม์ | |
| docker logs my_container | แสดง log ทั้งหมดของคอนเทนเนอร์ | |
| docker logs --since 1h my_container | แสดง log ใน 1 ชั่วโมงที่ผ่านมา | |
| docker inspect | ส่งออกข้อมูลรายละเอียดของ object Docker (คอนเทนเนอร์ อิมเมจ เครือข่าย ฯลฯ) ในรูปแบบ JSON รวมถึงการตั้งค่าและสถานะ | |
| docker inspect my_container | ดูข้อมูล JSON เต็มของคอนเทนเนอร์ | |
| docker inspect --format '{{.State.Pid}}' my_container | แสดง PID ของ process หลักในโฮสต์ | |
| docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container | แสดง IP address ของคอนเทนเนอร์ | |
| nsenter(withstrace) | ยูทิลิตี้ Linux สำหรับเข้า namespaces ของ process อื่น (ที่นี่คือคอนเทนเนอร์) ใช้ร่วมกับ straceเพื่อติดตาม system calls ภายในคอนเทนเนอร์ | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1 | เข้า namespaces ของคอนเทนเนอร์และติดตาม system calls ของ process 1 | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash | เปิด bash shell ภายใน namespaces ของคอนเทนเนอร์ | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp | ดูพอร์ตที่เปิดอยู่ในคอนเทนเนอร์ | |
| tcpdump(inside container) | เครื่องมือบรรทัดคำสั่งสำหรับดักจับและวิเคราะห์ทราฟฟิกเครือข่าย ใช้ในคอนเทนเนอร์เพื่อตรวจสอบปัญหา วิเคราะห์แพ็กเก็ต และมอนิเตอร์การเชื่อมต่อ | |
| docker exec -it my_container tcpdump -i any | ดักจับและวิเคราะห์ทราฟฟิกในคอนเทนเนอร์ | |
| docker exec -it my_container tcpdump -nn port 80 | ดักจับทราฟฟิกเฉพาะพอร์ต 80 | |
| docker exec -it my_container tcpdump -w /tmp/dump.pcap | บันทึกทราฟฟิกลงไฟล์เพื่อตรวจสอบภายหลัง | |
| docker container stats | แสดง metrics การใช้ทรัพยากรปัจจุบัน (CPU หน่วยความจำ เครือข่าย ดิสก์) ของคอนเทนเนอร์หนึ่งหรือหลายอันแบบเรียลไทม์ | |
| docker stats my_container | แสดงการใช้ CPU หน่วยความจำ เครือข่าย และดิสก์แบบเรียลไทม์ | |
| docker stats | แสดงสถิติของคอนเทนเนอร์ทั้งหมด | |
| docker stats --no-stream | ส่งออกสถิติครั้งเดียวแล้วออก | |
| docker container top | แสดงรายการ process ที่กำลังทำงานภายในคอนเทนเนอร์ คล้ายกับ psใน Linux เพื่อวิเคราะห์การทำงาน | |
| docker top my_container | แสดง process ที่ทำงานในคอนเทนเนอร์ | |
| docker top my_container aux | ใช้รูปแบบ output อื่น เช่น  | |
| docker top my_container -eo pid,cmd | แสดงเฉพาะ PID และคำสั่งของ process | |
| docker diff | แสดงการเปลี่ยนแปลงไฟล์ระบบของคอนเทนเนอร์เมื่อเทียบกับอิมเมจฐาน เช่น ไฟล์ที่เพิ่ม เปลี่ยน หรือถูกลบ | |
| docker diff my_container | แสดงการเปลี่ยนแปลงไฟล์ระบบทั้งหมด | |
| docker diff my_container | grep '^A' | แสดงเฉพาะไฟล์ที่ถูกเพิ่ม ( | |
| docker diff my_container | grep '^C' | แสดงเฉพาะไฟล์ที่ถูกเปลี่ยน ( | |
| docker cp | คัดลอกไฟล์และไดเรกทอรีระหว่างคอนเทนเนอร์กับโฮสต์ เพื่อแลกเปลี่ยนข้อมูลและสำรอง | |
| — | — | — | 
| docker cp my_container:/path/to/file ./file | คัดลอกไฟล์จากคอนเทนเนอร์ไปยังโฮสต์ | |
| docker cp ./config.yaml my_container:/app/config.yaml | คัดลอกไฟล์จากโฮสต์เข้าไปในคอนเทนเนอร์ | |
| docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR" | คัดลอก log file และกรองบรรทัด error โดยไม่บันทึกลงดิสก์ | 
💡 สำหรับการดีบักขั้นสูง คุณสามารถใช้
nsenter,strace,tcpdump,gdbและเครื่องมือระดับต่ำอื่น ๆ
💼 การใช้งาน Docker Compose ขั้นสูง
🚀 คำสั่ง Docker Compose ระดับมืออาชีพ
| คำสั่ง | ตัวอย่าง | คำอธิบาย | 
|---|---|---|
| docker compose up | เริ่มและจัดการวงจรชีวิตของ services ที่กำหนดจากไฟล์ docker-compose.yml พร้อมความสามารถในการรันเบื้องหลัง | |
| docker compose up -d web db | รันเฉพาะ services  | |
| docker compose up --build | rebuild อิมเมจก่อนเริ่ม services | |
| docker compose up --remove-orphans | ลบคอนเทนเนอร์ที่ไม่ได้ถูกกำหนดไว้ในไฟล์ compose ปัจจุบัน | |
| docker compose build | สร้างอิมเมจสำหรับ services ตามที่อธิบายไว้ใน compose file พร้อมการควบคุม cache และการ build แบบขนาน | |
| docker compose build --no-cache | rebuild อิมเมจทั้งหมดโดยไม่ใช้ cache | |
| docker compose build --parallel | build services ทั้งหมดพร้อมกันเพื่อเร่งความเร็ว | |
| docker compose build web | build อิมเมจเฉพาะสำหรับ service  | |
| docker compose pull | ดาวน์โหลดอิมเมจเวอร์ชันล่าสุดจาก registry สำหรับทุก services หรือ services ที่เลือก | |
| docker compose pull | pull อิมเมจสำหรับทุก services | |
| docker compose pull db | pull อิมเมจเฉพาะ service  | |
| docker compose pull --ignore-pull-failures | ทำงานต่อแม้เกิด error ระหว่างการ pull | |
| docker compose restart | รีสตาร์ททุก services หรือที่เลือกโดยไม่สร้างคอนเทนเนอร์ใหม่ | |
| docker compose restart | รีสตาร์ท services ทั้งหมดในโปรเจกต์ปัจจุบัน | |
| docker compose restart worker | รีสตาร์ทเฉพาะ service  | |
| docker compose restart web db | รีสตาร์ทหลาย services พร้อมกัน | |
| docker compose exec | รันคำสั่งภายใน service container ที่กำลังทำงาน พร้อมโหมด interactive ที่เลือกได้ | |
| docker compose exec db psql -U user -d database | รัน psql ภายใน service container  | |
| docker compose exec web sh | เปิด shell ภายในคอนเทนเนอร์  | |
| docker compose exec api curl http://localhost:8080 | รันคำสั่ง curl request จาก service container  | |
| docker compose config | ส่งออกการตั้งค่า Compose สุดท้าย โดยคำนึงถึงไฟล์และ environment variables ทั้งหมด | |
| docker compose config | แสดงการตั้งค่าที่ merge แล้วในรูปแบบ YAML | |
| docker compose config --services | แสดงรายการ services ทั้งหมด | |
| docker compose config --environment | แสดง environment variables ที่ services ใช้งาน | |
| docker compose watch | รีสตาร์ท services อัตโนมัติเมื่อมีการแก้ไข source file เหมาะสำหรับการพัฒนา | |
| docker compose watch | เริ่มการเฝ้าดูไฟล์และรีสตาร์ท services เมื่อมีการเปลี่ยนแปลง | |
| docker compose events | stream events ของ Compose: การเริ่ม หยุด และอัปเดต services | |
| docker compose events --json | รับ events ในรูปแบบ JSON | |
| docker compose rm | ลบคอนเทนเนอร์ของ services ที่หยุดแล้ว | |
| docker compose rm web db | ลบคอนเทนเนอร์ของ services  | |
| docker compose pause | หยุดการทำงานของ services | |
| docker compose pause api | หยุด service  | |
| docker compose unpause | ทำงานต่อ services ที่ถูกหยุด | |
| docker compose unpause api | ทำงานต่อ service  | |
| docker compose create | สร้างคอนเทนเนอร์โดยไม่เริ่มรัน | |
| docker compose create web db | สร้างคอนเทนเนอร์สำหรับ  | |
| docker compose images | แสดงรายการอิมเมจที่ services ใช้ | |
| docker compose images | แสดงอิมเมจของทุก services | |
| docker compose top | แสดง process ที่กำลังรันภายใน service containers | |
| docker compose top web | แสดง process ภายในคอนเทนเนอร์ของ service  | 
🛠 แนวทางและระบบอัตโนมัติที่เป็นประโยชน์กับ Docker Compose
- การแยกสภาพแวดล้อม (Environment Separation) 
 ใช้ไฟล์- docker-compose.override.ymlแยกต่างหากสำหรับ environment ต่าง ๆ —- development,- staging,- productionสิ่งนี้ช่วยแยกการตั้งค่าและหลีกเลี่ยงความขัดแย้ง
 คุณยังสามารถรวมไฟล์ config หลายไฟล์โดยใช้ flag- -f:- docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d- ใช้ไฟล์ - .envที่แตกต่าง (- .env.dev,- .env.prodเป็นต้น) เพื่อจัดการ environment variables
- การเก็บ Secrets อย่างปลอดภัย 
 อย่าใส่ข้อมูลสำคัญ (passwords, tokens) โดยตรงใน Compose file ให้ใช้:- ไฟล์ .envสำหรับ environment variables (ไฟล์.envไม่ถูกเข้ารหัสและไม่ควร commit ไปยัง repo สาธารณะ)
 
- docker secretและ- docker configสำหรับจัดการ secrets และ configs อย่างปลอดภัยใน Docker Swarm
 
- external volumes สำหรับไฟล์ configs ที่มี secrets
 
- ระบบจัดการ secrets ภายนอก (เช่น HashiCorp Vault, AWS Secrets Manager) 
 
- ไฟล์ 
- ลำดับการเริ่มต้นด้วย - depends_onและ- healthcheck
 เพื่อให้ services รอ dependencies พร้อมก่อน:- services: db: image: postgres healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s retries: 5 api: image: my_api depends_on: db: condition: service_healthy
- ลด Downtime ระหว่างการอัปเดต 
 ก่อนอัปเดต services ให้รัน:- docker compose pull && docker compose up -d --remove-orphans- option - -dจะรันคอนเทนเนอร์ในเบื้องหลัง และ- --remove-orphansจะลบคอนเทนเนอร์ที่ไม่ถูกกำหนดไว้ใน configs
 หากต้องการหยุดและลบคอนเทนเนอร์เก่าอย่างสมบูรณ์:- docker compose down --remove-orphans- สิ่งนี้ทำให้มั่นใจว่าอิมเมจใหม่ถูกโหลดและคอนเทนเนอร์ที่ไม่ได้ใช้งานถูกลบโดยไม่เกิด downtime 
- Hot Code Reloading สำหรับการพัฒนา 
 ใช้- volumesเพื่อติดตั้งไดเรกทอรี local เข้าในคอนเทนเนอร์ สิ่งนี้ช่วยให้โค้ดเปลี่ยนแปลงมีผลทันทีโดยไม่ต้อง rebuild อิมเมจ
 ควรระวังปัญหาสิทธิ์ไฟล์และ caching ของระบบไฟล์ โดยเฉพาะบน Windows และ macOS เพื่อลดปัญหาประสิทธิภาพ
- Hot Code Reloading โดยไม่ใช้ Volumes (Compose 2.22+) - develop: watch: - path: ./src action: sync target: /app
- การบันทึก Log แบบศูนย์กลางของ Services 
 เปลี่ยนเส้นทาง log ของคอนเทนเนอร์ไปยังระบบมอนิเตอร์และรวบรวม log เช่น ELK Stack, Loki, Prometheus และ Fluentd เพื่อการวิเคราะห์และแจ้งเตือน
 ใช้ Docker logging drivers (- --log-driver) เพื่อเปิดใช้งานการเก็บ log แบบศูนย์กลาง
 กำหนด logging drivers สำหรับคอนเทนเนอร์ใน Compose:- services: api: image: my_api logging: driver: "json-file" options: max-size: "10m" max-file: "3"
- การรีสตาร์ท Services อัตโนมัติ 
 กำหนด restart policy ในไฟล์- docker-compose.yml:- restart: unless-stopped- นโยบายอื่น ๆ ได้แก่: - no— ไม่รีสตาร์ทอัตโนมัติ (ค่าเริ่มต้น)
 
- always— รีสตาร์ทคอนเทนเนอร์เสมอ
 
- on-failure— รีสตาร์ทเมื่อเกิดข้อผิดพลาด (อาจกำหนดจำนวน retry ได้)
 - ใน production ค่า - unless-stoppedเป็นตัวเลือกที่เหมาะสมที่สุดเพื่อความทนทาน
 สิ่งนี้ช่วยให้ services กู้คืนอัตโนมัติหลังจากล้มเหลวหรือ host reboot
- โปรไฟล์ของ Services 
 อนุญาตให้รันเฉพาะกลุ่มของ services:- services: db: image: postgres profiles: ["backend"] web: image: nginx profiles: ["frontend"]- เพื่อรันเฉพาะ frontend profile: - docker compose --profile frontend up
🐞 การดีบักและโปรไฟล์ Services ใน Docker Compose
| คำสั่ง | ตัวอย่าง | คำอธิบาย | 
|---|---|---|
| docker compose exec | รันคำสั่งภายใน service ที่กำลังทำงาน เพื่อเข้าถึงคอนเทนเนอร์หรือรัน process แยก | |
| docker compose exec web sh | เปิด shell ภายใน service container  | |
| docker compose exec db psql -U user -d database | รันคำสั่ง psql ภายใน service container  | |
| docker compose logs | ดู log ของ service สำหรับการวินิจฉัยและมอนิเตอร์ | |
| docker compose logs -f db | ดู log ของ service  | |
| docker compose logs --tail=50 api | แสดง log 50 บรรทัดล่าสุดของ service  | |
| docker compose logs --since=1h web | แสดง log ของ service  | |
| docker inspect | ดูข้อมูลรายละเอียดเกี่ยวกับคอนเทนเนอร์ที่รัน service | |
| docker inspect $(docker compose ps -q web) | รับ JSON ที่มีรายละเอียดของ service container  | |
| docker container stats | ติดตามการใช้ทรัพยากรของคอนเทนเนอร์ที่รัน services | |
| docker stats $(docker compose ps -q worker) | ติดตาม CPU หน่วยความจำ และทรัพยากรอื่น ๆ ของ service container  | |
| docker compose run --rm | รันคอนเทนเนอร์ชั่วคราวพร้อมการตั้งค่าของ service ใช้สำหรับดีบัก | |
| docker compose run --rm web sh | เริ่มคอนเทนเนอร์แบบ one-off สำหรับ service  | |
| docker container cp | คัดลอกไฟล์ระหว่าง host และ container | |
| docker cp $(docker compose ps -q db):/dump.sql ./dump.sql | คัดลอกไฟล์จาก service container  | 
💡 เพื่อความสะดวกในการดีบัก setup แบบ multi-service ที่ซับซ้อน ใช้
docker compose run --rmเพื่อรันคอนเทนเนอร์แยกที่มี network และ volumes ที่จำเป็นโดยไม่กระทบ services หลัก
📚 แหล่งข้อมูลเพิ่มเติม
🚫 การละเว้นไฟล์ด้วย .dockerignore
เพิ่มไฟล์และโฟลเดอร์ลงใน .dockerignore ที่ไม่ควรถูกรวมในอิมเมจเพื่อลดขนาดและเร่งความเร็วในการ build:
node_modules/
*.log
.env⚡ ทำให้คำสั่งง่ายขึ้นด้วย Aliases
คุณสามารถสร้าง alias สำหรับคำสั่งที่ใช้บ่อยเพื่อรันได้เร็วขึ้น:
alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"🧠 เคล็ดลับ: คำแนะนำในการใช้งาน Docker
- อย่าพยายามจำทุกอย่าง — ใช้ docker --helpหรือdocker <command> --helpเพื่อดูคำสั่ง
 
- ฝึกฝนอย่างสม่ำเสมอและทดลองกับโปรเจกต์ง่าย ๆ
 
- ตรวจสอบขนาดอิมเมจและลบไฟล์ที่ไม่จำเป็นผ่าน - .dockerignore
🌐 ลิงก์ที่เป็นประโยชน์
📘 เอกสาร Docker อย่างเป็นทางการ — คู่มือและข้อมูลอ้างอิงที่ครอบคลุมในทุกหัวข้อ:
https://docs.docker.com/
📙 ชีทโกง Docker — ชีทโกง Docker อย่างเป็นทางการ:
https://dockerlabs.collabnix.com/docker/cheatsheet/
📗 Docker Hub — อิมเมจและ registries:
https://hub.docker.com/