การเปิดใช้งานบริการเครือข่ายใน Docker

Docker ระดับกลาง

Mike Metzger

Data Engineering Consultant

บริการเครือข่าย

  • บริการเครือข่ายรับฟังบนพอร์ตที่กำหนด
  • โปรแกรมเดียวเท่านั้นที่สามารถรับฟังบน IP:port เดียวกันในเวลาเดียวกัน
    • ตัวอย่างเช่น 10.1.2.3:80 หมายถึงรับฟังบน 10.1.2.3 ที่พอร์ต 80
  • ลองนึกถึงการดีบักเว็บเซิร์ฟเวอร์หลายเวอร์ชันที่รับฟังบนพอร์ต 80
    • รันแอปพลิเคชันได้ครั้งละหนึ่งตัวเท่านั้น เนื่องจากรับฟังบนพอร์ตเดียวกัน
Docker ระดับกลาง

บริการแบบคอนเทนเนอร์

  • การห่อแอปพลิเคชันในคอนเทนเนอร์ทำให้แต่ละคอนเทนเนอร์รับฟังบนพอร์ตนั้นได้ (เนื่องจาก IP:port ต่างกัน แต่ละคอนเทนเนอร์มี IP ของตัวเอง)
  • รันคอนเทนเนอร์หลายตัวพร้อมกันได้
  • แต่จะเชื่อมต่อกับแอปพลิเคชันในคอนเทนเนอร์จากโฮสต์ได้อย่างไร?
Docker ระดับกลาง

Port mapping

  • คำตอบคือการใช้ port mapping หรือการส่งต่อ/แปลงพอร์ต
  • Port mapping รับการเชื่อมต่อที่ IP:port หนึ่งแล้วส่งต่อไปยัง IP:port อีกชุดโดยอัตโนมัติ
  • ในกรณีนี้ สามารถแมปพอร์ตที่ว่างบนโฮสต์ให้ชี้ไปยังพอร์ต 80 บนคอนเทนเนอร์ได้
  • Docker engine จัดการสิ่งนี้ได้โดยอัตโนมัติหากตั้งค่าไว้

ตัวอย่าง port mapping

Docker ระดับกลาง

การเปิดใช้งาน port mapping

  • ใช้คำสั่ง docker run พร้อมแฟล็ก -p เพื่อเปิดใช้งาน port mapping บนคอนเทนเนอร์
  • -p <host port>:<container port>
  • -p 5501:80
  • ใช้แฟล็ก -p หลายตัวสำหรับพอร์ตต่างๆ ได้
repl@host:~$ docker run -p 5501:80 nginx

repl@host:~$ docker ps -a
CONTAINER ID IMAGE ... PORTS NAMES 84266724ff47 nginx ... 0.0.0.0:5501->80/tcp, :::5501->80/tcp coiled_elgamal
Docker ระดับกลาง

มาฝึกกันเถอะ!

Docker ระดับกลาง

Preparing Video For Download...