🐳 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 (with strace) |
ยูทิลิตี้ 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-orphansoption
-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/