본문으로 건너뛰기

เนื้อหาภาษาไทย / 태국어 콘텐츠

시스템 가이드 검수 완료된 콘텐츠

Run Docker Container จาก Image

บทความนี้อธิบายวิธีการใช้คำสั่ง `docker run` เพื่อสร้างและรัน Docker Container จาก Image ที่สร้างไว้ก่อนหน้า โดยเน้นที่การใช้งาน option สำคัญ เช่น การ map port...

5. Run Docker Container จาก Image

หลังจากที่เราได้สร้าง Docker Image จาก Dockerfile ในบทความที่แล้ว ตอนนี้ถึงเวลาที่เราจะนำ Image นั้นมาใช้งานจริง โดยการ Run เป็น Docker Container ซึ่งเปรียบเสมือนการสร้าง instance ของ application ของเราที่ทำงานแยกจากระบบปฏิบัติการหลัก

docker run คืออะไร?

คำสั่ง docker run คือหัวใจหลักในการสร้างและเริ่มต้น Container จาก Image ที่เรามี โดยมีรูปแบบการใช้งานดังนี้:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

มาดูส่วนประกอบสำคัญของคำสั่งนี้:

  • docker run: คำสั่งหลักในการ Run Container
  • [OPTIONS]: ตัวเลือกต่างๆ ที่ใช้ปรับแต่งการทำงานของ Container เช่น การกำหนดชื่อ, Port Mapping, Environment Variables เป็นต้น
  • IMAGE: ชื่อ Image ที่เราต้องการใช้ในการสร้าง Container (เช่น my-php-app:latest)
  • [COMMAND]: คำสั่งที่จะรันภายใน Container เมื่อ Container เริ่มทำงาน (ถ้าไม่ระบุ จะใช้คำสั่งที่กำหนดไว้ใน Dockerfile)
  • [ARG...]: Argument ที่ส่งให้กับ Command

การ Run Container อย่างง่ายที่สุด

เริ่มต้นด้วยการ Run Container จาก Image ที่เราสร้างในบทความที่แล้ว (สมมติว่า Image ชื่อ my-php-app:latest)

docker run my-php-app:latest

คำสั่งนี้จะสร้างและ Run Container จาก Image my-php-app:latest โดยใช้ configuration default ที่กำหนดไว้ใน Dockerfile ถ้า Dockerfile ของเรามีการกำหนด Command ไว้ (เช่น การ start web server) Container ก็จะเริ่มทำงานตาม Command นั้นทันที

กรณีใช้งานจริง: ถ้า Dockerfile ของเรามีคำสั่ง CMD ["apache2ctl", "-D", "FOREGROUND"] Container จะเริ่มต้น Apache web server ภายใน Container ทันที

ข้อผิดพลาดที่พบบ่อย: ถ้าไม่มี Command ถูกกำหนดไว้ใน Dockerfile และเราไม่ได้ระบุ Command ใน docker run Container อาจจะ Run แล้ว Exit ทันที เพราะไม่มี process หลักให้ Container ทำงานต่อ

Port Mapping: เชื่อมต่อ Container กับโลกภายนอก

โดยปกติ Container จะทำงานแยกจากระบบปฏิบัติการหลัก ดังนั้นถ้า application ของเราต้องการรับ request จากภายนอก (เช่น web server ที่ต้องการรับ HTTP request) เราต้องทำการ Mapping Port จาก Host Machine (เครื่องที่เรากำลัง Run Docker) ไปยัง Port ภายใน Container

เราใช้ Option -p หรือ --publish ในคำสั่ง docker run เพื่อกำหนด Port Mapping โดยมีรูปแบบดังนี้:

docker run -p HOST_PORT:CONTAINER_PORT IMAGE
  • HOST_PORT: Port บน Host Machine ที่เราต้องการ Map
  • CONTAINER_PORT: Port ภายใน Container ที่ application ของเรากำลัง Listen
  • IMAGE: ชื่อ Image ที่เราต้องการใช้

ตัวอย่าง: สมมติว่า application PHP ของเรา (เช่น Apache web server) กำลัง Listen อยู่ที่ Port 80 ภายใน Container และเราต้องการให้สามารถเข้าถึงได้จาก Port 8080 บน Host Machine เราจะใช้คำสั่ง:

docker run -p 8080:80 my-php-app:latest

หลังจาก Run คำสั่งนี้ เราจะสามารถเข้าถึง application PHP ของเราได้โดยการเปิด browser และเข้า URL http://localhost:8080

กรณีใช้งานจริง: เราสามารถ Map หลาย Ports ได้พร้อมกัน เช่น:

docker run -p 8080:80 -p 33060:3306 my-php-app:latest

คำสั่งนี้จะ Map Port 8080 บน Host ไปยัง Port 80 ภายใน Container (สำหรับ web server) และ Map Port 33060 บน Host ไปยัง Port 3306 ภายใน Container (สำหรับ MySQL database)

ข้อผิดพลาดที่พบบ่อย: ถ้า Port ที่เราต้องการ Map บน Host Machine ถูกใช้งานอยู่แล้ว Docker จะไม่สามารถ Run Container ได้ และจะแสดง Error Message เราต้องเลือก Port อื่นที่ว่างอยู่ หรือหยุด process ที่กำลังใช้งาน Port นั้นอยู่

Environment Variables: ปรับแต่ง Application โดยไม่ต้อง Build Image ใหม่

Environment Variables (ตัวแปรสภาพแวดล้อม) คือตัวแปรที่เราสามารถกำหนดค่าได้ในขณะที่ Run Container โดยไม่ต้องแก้ไข Code ใน application หรือ Build Image ใหม่ ซึ่งมีประโยชน์มากในการปรับแต่ง configuration ของ application เช่น Database Connection String, API Key, หรือ Debug Mode

เราใช้ Option -e หรือ --env ในคำสั่ง docker run เพื่อกำหนด Environment Variables โดยมีรูปแบบดังนี้:

docker run -e VARIABLE_NAME=VALUE IMAGE
  • VARIABLE_NAME: ชื่อของ Environment Variable
  • VALUE: ค่าของ Environment Variable
  • IMAGE: ชื่อ Image ที่เราต้องการใช้

ตัวอย่าง: สมมติว่า application PHP ของเราต้องการ Environment Variable ชื่อ DB_HOST เพื่อกำหนด hostname ของ database server เราจะใช้คำสั่ง:

docker run -e DB_HOST=mysql my-php-app:latest

ภายใน application PHP เราสามารถเข้าถึงค่าของ Environment Variable DB_HOST ได้โดยใช้ function getenv('DB_HOST')

กรณีใช้งานจริง: เราสามารถกำหนด Environment Variables หลายตัวได้พร้อมกัน:

docker run -e DB_HOST=mysql -e DB_USER=root -e DB_PASSWORD=secret my-php-app:latest

ข้อผิดพลาดที่พบบ่อย: ถ้า Environment Variable ที่เรากำหนดชื่อไม่ตรงกับที่ application PHP คาดหวัง Application อาจจะทำงานผิดพลาด หรือไม่สามารถเชื่อมต่อกับ database ได้ ตรวจสอบให้แน่ใจว่าชื่อ Environment Variable ถูกต้อง

การตั้งชื่อ Container

โดยปกติ Docker จะสุ่มสร้างชื่อให้กับ Container ที่เรา Run แต่เราสามารถกำหนดชื่อ Container เองได้โดยใช้ Option --name

docker run --name my-php-container my-php-app:latest

การตั้งชื่อ Container จะช่วยให้เราสามารถอ้างอิง Container ได้ง่ายขึ้น เช่น ในการ Stop, Start, หรือ Remove Container

Run Container แบบ Detached Mode (Background)

โดยปกติเมื่อเรา Run Container ด้วยคำสั่ง docker run Terminal จะถูกผูกไว้กับ Container นั้น ถ้าเราปิด Terminal Container ก็จะถูก Stop ไปด้วย เราสามารถ Run Container แบบ Detached Mode ได้โดยใช้ Option -d หรือ --detach

docker run -d my-php-app:latest

เมื่อเรา Run Container แบบ Detached Mode Docker จะ Run Container ใน Background และแสดง Container ID ให้เราทราบ

กรณีใช้งานจริง: การ Run web server หรือ database server ใน Detached Mode จะทำให้ application ของเราทำงานต่อเนื่องได้ แม้ว่าเราจะปิด Terminal

สรุป

ในบทความนี้เราได้เรียนรู้วิธีการ Run Docker Container จาก Image โดยใช้คำสั่ง docker run พร้อมทั้ง Option ต่างๆ ที่สำคัญ เช่น Port Mapping (-p), Environment Variables (-e), การตั้งชื่อ Container (--name), และการ Run Container แบบ Detached Mode (-d) การเข้าใจและใช้งานคำสั่ง docker run อย่างคล่องแคล่วเป็นสิ่งสำคัญในการพัฒนาและ Deploy application PHP ด้วย Docker

ในบทความต่อไป เราจะมาเรียนรู้เรื่อง Docker Compose ซึ่งเป็นเครื่องมือที่ช่วยให้เราสามารถจัดการ Multi-Container Application ได้อย่างง่ายดาย

Office.in.th Custom Service

이 구조를 바탕으로 시스템을 개발하거나 맞춤 변경하고 싶으신가요?

Office.in.th는 엔터프라이즈 웹 애플리케이션, API 연동, 공공/민간 업무 관리 시스템을 설계·개발하며 장기 지원을 제공합니다.

소프트웨어 개발 서비스 보기