Docker Run
What is Docker Run?
คำสั่ง docker run เป็นคำสั่งหลักที่มีหน้าที่ในการ “สร้างและเริ่มกระบวนการทำงาน” (Instantiate and Start) ของ Container จาก Image ที่กำหนด
ในกรณีที่ Image ดังกล่าวยังไม่ถูกติดตั้งในระบบ (Local Host) Docker จะทำการดาวน์โหลด (Pull) จาก Registry มาให้โดยอัตโนมัติ คำสั่งนี้มักถูกใช้งานควบคู่กับ Option ต่างๆ เพื่อกำหนดพฤติกรรมของ Container เช่น การตั้งชื่อ (Naming), การจัดสรรพอร์ต (Port Mapping) หรือรูปแบบการประมวลผล (Execution Mode)
Basic Commands
Run (Foreground)
การรัน Container ในโหมดพื้นฐาน โดยระบบจะแสดงผลลัพธ์ (Logs/Output) ทางหน้าจอ Terminal ทันที และเมื่อกระบวนการภายในทำงานเสร็จสิ้น Container จะยุติการทำงานโดยอัตโนมัติ
- ความเหมาะสม: สำหรับการทดสอบ (Testing) หรือการสั่งงานแบบครั้งเดียวจบ (One-off task)
docker run hello-worldRun (Detached)
การรัน Container ในโหมดเบื้องหลัง (Background Mode) โดยใช้ Option -d เพื่อให้ Container ทำงานต่อเนื่องโดยไม่ยึดครองหน้าจอ Terminal
- ความเหมาะสม: สำหรับการรัน Service ที่ต้องทำงานตลอดเวลา เช่น Web Server หรือ Database
- การใช้งานร่วม: ใช้คู่กับ -p เพื่อเชื่อมต่อ Port ระหว่าง Host และ Container
# docker run -d -p <host_port>:<container_port> <image_name>
docker run -d -p 8080:80 nginxRun (Interactive)
การรัน Container พร้อมขอสิทธิ์ในการเข้าถึง Terminal ภายใน (Interactive Shell) โดยใช้ Option -it
- -i (Interactive): เปิดรับ Input จากผู้ใช้งาน
- -t (Pseudo-TTY): จำลองหน้าจอ Terminal
# docker run -it <image_name> <command_shell>
docker run -it ubuntu bashKey Parameters
Container Management
--name การกำหนดชื่อเรียกเฉพาะ (Identifier) ให้แก่คอนเทนเนอร์ เพื่อความสะดวกในการอ้างอิงและบริหารจัดการ แทนการใช้ Container ID ที่เป็นรหัสสุ่มจากระบบ
--rm การสั่งให้ระบบลบคอนเทนเนอร์โดยอัตโนมัติ (Automatic Removal) ทันทีที่สิ้นสุดการทำงาน เพื่อลดความซ้ำซ้อนและรักษาทรัพยากรภายในเครื่อง
--restart การกำหนดนโยบายการเริ่มต้นการทำงานใหม่ (Restart Policy) เพื่อรับประกันความต่อเนื่องของบริการ เช่น การเริ่มทำงานใหม่โดยอัตโนมัติเมื่อเกิดข้อผิดพลาดหรือเมื่อระบบ Reboot
Operational Modes
-d (Detached Mode) การสั่งให้คอนเทนเนอร์ประมวลผลในรูปแบบ Background Process ซึ่งช่วยให้ผู้ใช้สามารถใช้งานหน้าจอ Terminal หลักต่อไปได้โดยไม่ถูกยึดครองพื้นที่ประมวลผล
-it (Interactive & TTY): การเปิดใช้โหมดตอบโต้และการจำลอง Terminal (Pseudo-TTY) เพื่อสร้างช่องทางการเชื่อมต่อให้ผู้ใช้สามารถส่งคำสั่งเข้าไปยังคอนเทนเนอร์ได้โดยตรง
Networking & Connectivity
-p (Port Mapping): การเชื่อมโยงพอร์ตสื่อสารระหว่างเครื่องแม่ข่าย (Host) และคอนเทนเนอร์ เพื่อเปิดช่องทางให้เครือข่ายภายนอกสามารถเข้าถึงบริการที่ทำงานอยู่ภายในได้
--network การระบุเครือข่ายเสมือนที่ต้องการให้คอนเทนเนอร์เชื่อมต่อ เพื่อจัดการโครงสร้างพื้นฐานด้านการสื่อสารและความปลอดภัยระหว่างบริการ (Microservices)
Storage & Configuration
-v (Volume Mounting): การเชื่อมต่อพื้นที่จัดเก็บข้อมูลจากเครื่องแม่ข่ายเข้ากับคอนเทนเนอร์ เพื่อรองรับการจัดเก็บข้อมูลแบบถาวร (Data Persistence) ป้องกันข้อมูลสูญหายเมื่อคอนเทนเนอร์ถูกลบ
-e (Environment Variables): การประกาศค่าตัวแปรสภาพแวดล้อมภายในคอนเทนเนอร์ เพื่อใช้ในการตั้งค่าคอนฟิกูเรชัน (Configuration) ของแอปพลิเคชันให้เหมาะสมกับสภาพแวดล้อมที่ใช้งาน