รูปปกบทความ

1. 🎯 ตอนที่ 5: คำสั่งพื้นฐาน (Docker CLI) ที่ใช้บ่อยในชีวิตประจำวัน

สวัสดีครับน้องๆ และเพื่อนๆ นักพัฒนาทุกคน จิบกาแฟกันให้ชุ่มคอแล้วมาลุยกันต่อครับ หลังจากที่เราได้เตรียม Environment และห้องครัว (Docker Desktop) ของเราพร้อมแล้วในตอนที่แล้ว วันนี้พี่จะพามาจับ “ตะหลิวและกระทะ” หรือก็คือคำสั่งพื้นฐานของ Docker (Docker CLI) ที่เราจะต้องใช้ทำมาหากินกันแทบทุกวันครับ

2. 📖 เปิดฉาก (The Hook)

พี่รู้ดีครับว่าสำหรับมือใหม่ที่ชินกับการคลิกเมาส์บนหน้าจอ GUI การต้องมานั่งพิมพ์คำสั่งบนหน้าจอสีดำๆ (Terminal) มันอาจจะดูน่ากลัวและชวนปวดหัวสุดๆ… พิมพ์ผิดตัวเดียวก็พังแล้ว! แต่เชื่อพี่เถอะครับว่า ในโลกของ DevOps และ CI/CD Pipelines การใช้ Command-Line Interface (CLI) คือ “เวทมนตร์” ที่ทรงพลังที่สุด มันรวดเร็ว ทำซ้ำได้ และเอาไปเขียนเป็น Script อัตโนมัติได้อย่างสมบูรณ์แบบ

ถ้าเราเปรียบ Docker เป็นร้านอาหารตามสั่ง คำสั่ง CLI เหล่านี้ก็เหมือนคำสั่งที่เราตะโกนบอกพ่อครัวนั่นเองครับ วันนี้พี่คัดมาให้เน้นๆ 6 คำสั่งหากิน ที่ใช้บ่อยที่สุด จำแค่ชุดนี้ได้ ก็สามารถเอาตัวรอดในการจัดการ Container ได้สบายๆ แล้วครับ!

3. 🧠 แก่นวิชา (Core Concepts)

สถาปัตยกรรมของ Docker แยกระหว่าง Docker Image (วัตถุดิบ/พิมพ์เขียว) และ Docker Container (อาหารที่ปรุงเสร็จ/แอปพลิเคชันที่กำลังรัน) อย่างชัดเจน ดังนั้นคำสั่งของเราก็จะแบ่งออกเป็น 2 กลุ่มหลักๆ เพื่อจัดการวงจรชีวิต (Lifecycle) ของมันครับ:

  1. การเตรียมวัตถุดิบ (Image Commands):

    • docker pull: ไปตลาดเพื่อดาวน์โหลด Image จาก Registry (เช่น Docker Hub) มาเก็บไว้ในเครื่อง
    • docker images: เปิดตู้เย็นดูว่าตอนนี้เรามี Image อะไรเก็บไว้บ้าง
  2. การปรุงอาหารและจัดการร้าน (Container Commands):

    • docker run: นำ Image มาสร้างและรันเป็น Container (เปรียบเหมือนการเอาพิมพ์เขียวมาสร้างบ้าน)
    • docker ps: เช็กดูว่าตอนนี้มี Container ตัวไหนกำลังทำงานอยู่บ้าง (ดูเตาแก๊สว่าผัดอะไรอยู่)
    • docker stop: สั่งหยุดการทำงานของ Container อย่างนุ่มนวล
    • docker rm: ลบ Container ที่หยุดทำงานแล้วทิ้งไปเพื่อคืนพื้นที่ (ล้างจาน)
รูปประกอบวงจรชีวิตของคำสั่ง Docker CLI

4. 💻 ร่ายมนต์คำสั่ง (Show me the Code/Commands)

มาดูรูปแบบการใช้งาน (Syntax) และตัวอย่างที่พี่ใช้รันจริงๆ ในโปรเจกต์กันครับ เปิด Terminal แล้วลองพิมพ์ตามได้เลย:

# 1. docker pull: ดาวน์โหลด Image จาก Docker Hub
# รูปแบบ: docker pull <image_name>:<tag>
docker pull nginx:latest
# "น้องปลาวาฬ ไปดึง Image ของ NGINX เวอร์ชันล่าสุด (latest) มาเก็บไว้ที่เครื่องพี่หน่อย"

# 2. docker images: ดูรายชื่อ Image ในเครื่อง
docker images
# "ขอดูหน่อยซิว่าในเครื่องเราตอนนี้ มีพิมพ์เขียวหรือวัตถุดิบอะไรพร้อมใช้บ้าง (จะแสดง Repository, Tag, Image ID และขนาด)"

# 3. docker run: สร้างและรัน Container ยอดฮิต!
# รูปแบบ: docker run [options] <image_name>
docker run -d -p 8080:80 --name my-web nginx:latest
# อธิบาย option สไตล์พี่สอนน้อง:
# -d (--detach): รันแบบ Background ทิ้งไว้เลย หน้าจอ Terminal เราจะได้ไม่ค้าง
# -p 8080:80: ทำ Port Mapping เอาพอร์ต 8080 ของเครื่องเรา (Host) ทะลุเข้าไปหาพอร์ต 80 ของ Container
# --name my-web: ตั้งชื่อให้ Container ตัวนี้ว่า "my-web" จะได้เรียกใช้ง่ายๆ ไม่ต้องจำ ID ยาวๆ

# 4. docker ps: ดู Container ที่กำลังรันอยู่
docker ps
# "มี Container ตัวไหนเปิดไฟทำงานอยู่บ้าง?"
docker ps -a
# "-a (all) คือขออนุญาตดูทั้งหมดเลยนะ รวมถึงตัวที่ Stop หรือ Exited ไปแล้วด้วย"

# 5. docker stop: หยุดการทำงานของ Container
docker stop my-web
# "หยุดรัน my-web อย่างนุ่มนวล (Docker จะส่งสัญญาณ SIGTERM ไปให้แอปพลิเคชันเตรียมตัวปิด)"

# 6. docker rm: ลบ Container ทิ้ง
docker rm my-web
# "ทุบบ้านทิ้ง! ลบ Container my-web ออกจากระบบเพื่อคืนพื้นที่" (หมายเหตุ: ต้อง Stop ก่อนถึงจะลบได้นะ)

5. 🛡️ เคล็ดลับจากคัมภีร์ลับ (Under the Hood / Pro-Tips)

สำหรับมือใหม่ มักจะมีข้อผิดพลาดคลาสสิกที่พี่เจอบ่อยๆ พี่ขอเอาเคล็ดลับระดับ Pro-Tips มาฝากเพื่อป้องกันการปวดหัวในอนาคตครับ:

  • ⚠️ ระวังความสับสนระหว่าง rm กับ rmi: ท่องไว้เลยครับว่า docker rm ใช้สำหรับลบ Container (ตัวบ้าน) ส่วน docker rmi ย่อมาจาก remove image ใช้ลบ Image (พิมพ์เขียว) ถ้าลบผิดตัวมันจะฟ้อง Error ตลอดครับ
  • 🧹 คาถาล้างบาง (Clean up Trick): เวลาเราทดสอบระบบเยอะๆ Container ที่ Stop แล้วจะค้างอยู่ในระบบเต็มไปหมดและกินพื้นที่ (Disk Space) ถ้าอยากลบ Container ที่หยุดทำงานแล้วทั้งหมดรวดเดียว พี่มักจะใช้ท่าคอมโบนี้ครับ: docker rm $(docker ps -a -q) หรือเวอร์ชันใหม่ใช้ docker container prune แค่นี้ก็สะอาดกริ๊บ!
  • ☠️ Stop vs Kill: การใช้ docker stop จะให้เวลาแอปพลิเคชันของเราประมาณ 10 วินาทีในการเคลียร์ตัวเองให้เรียบร้อย (Graceful Shutdown) แต่ถ้าบางครั้งแอปมันค้างหนักมาก สั่ง Stop แล้วไม่ยอมตาย เราสามารถใช้ docker kill (หรือ docker rm -f) ซึ่งจะเทียบเท่ากับการส่งสัญญาณ SIGKILL (ดึงปลั๊กออกทันที) ข้อมูลที่กำลัง Process อยู่อาจจะพังได้ ต้องระวังให้ดีครับ
  • 👻 ใช้แล้วทิ้งด้วย --rm: ถ้าเราแค่รัน Container ขึ้นมาเพื่อรัน Script ชั่วคราว หรือเทสต์อะไรแป๊บเดียว ให้เติม flag --rm เข้าไปในคำสั่ง docker run ด้วย (เช่น docker run --rm ubuntu /bin/bash) ทันทีที่เราออกจาก Container มันจะทำลายตัวเองทิ้ง (Delete) ให้เราอัตโนมัติ ไม่เป็นขยะรกเครื่องครับ

6. 🏁 บทสรุป (To be continued…)

เห็นไหมครับว่าคำสั่งของ Docker ไม่ได้น่ากลัวอย่างที่คิด รูปแบบคำสั่งถูกออกแบบมาให้จำง่ายและตรงไปตรงมามากๆ แค่เราเข้าใจวงจรชีวิตของ Image สู่ Container คำสั่งอย่าง pull, run, ps, และ rm ก็จะเป็นเรื่องกล้วยๆ เลยครับ พี่อยากให้น้องๆ ลองเปิด Terminal แล้วซ้อมพิมพ์คำสั่งพวกนี้ดูบ่อยๆ ให้ร่างกายมันจำ (Muscle Memory)

ในตอนต่อไป หลังจากที่เราเล่นกับ Image ของคนอื่นมาพอสมควรแล้ว เราจะมาสวมวิญญาณเป็น “ผู้สร้าง” กันบ้าง โดยพี่จะสอนวิธีเขียนสูตรอาหาร หรือที่เรียกกันว่า Dockerfile เพื่อแพ็กโค้ดของเราเองให้กลายเป็น Container Image พร้อมเอาไป Deploy ครับ เตรียมตัวสนุกกันต่อได้เลย!


ต้องการที่ปรึกษาด้านการวางระบบ Infrastructure, DevOps และ CI/CD ให้กับองค์กรของคุณ? ทีมงาน WP Solution พร้อมให้บริการออกแบบและวางระบบ Server/Cloud แบบครบวงจร ดูรายละเอียดบริการของเราได้ที่: www.wpsolution2017.com หรือพูดคุยปรึกษาเบื้องต้นได้ที่ Line: wisit.p