การเปิดพอร์ตด้วย Dockerfile

Docker ระดับกลาง

Mike Metzger

Data Engineer

การเปิดเผยบริการ

  • คำสั่ง EXPOSE
  • กำหนดพอร์ตที่คอนเทนเนอร์จะใช้งานขณะรัน
  • ระบุได้เป็น <number>, <number>/tcp หรือ <number>/udp
    • เช่น EXPOSE 80 หรือ EXPOSE 80/tcp
  • ระบุได้หลายรายการ
  • ใช้เป็นวิธีบอกข้อมูลเชิงเอกสาร
Docker ระดับกลาง

การใช้แฟล็ก -p / -P

  • ยังต้องใช้ตัวเลือก -p หรือ -P กับ docker run เพื่อให้พอร์ตเข้าถึงได้จากภายนอกคอนเทนเนอร์
  • ตัวเลือก -P จะแมปพอร์ตชั่วคราวไปยังพอร์ตที่เปิดไว้โดยอัตโนมัติ ต้องใช้ docker ps -a เพื่อดูพอร์ตที่ถูกแมป
  • การใช้ -p<host port>:<container port> ช่วยให้กำหนดพอร์ตที่ต้องการได้
Docker ระดับกลาง

ตัวอย่างการใช้ EXPOSE

# Dockerfile
FROM python:3.11-slim
ENTRYPOINT ["python","-mhttp.server"]
# Let the Docker engine know 
# port 8000 should be available
EXPOSE 8000
  • สร้างคอนเทนเนอร์จากอิมเมจ
    docker run pyserver
    
  • ดูสถานะของคอนเทนเนอร์
    docker ps -a
    
CONTAINER ID   IMAGE         ...   PORTS      NAMES
8c3d320255ae   pyserver      ...   8000/tcp   angry_chaum
Docker ระดับกลาง

ทำให้พอร์ตเข้าถึงได้

  • แมปพอร์ตชั่วคราวจากโฮสต์ไปยังคอนเทนเนอร์โดยอัตโนมัติ
    docker run -P pyserver
    
docker ps -a
CONTAINER ID   IMAGE      ...   PORTS                     NAMES
6bb458ef25da   pyserver   ...   0.0.0.0:55001->8000/tcp   beautiful_lamarr
Docker ระดับกลาง

ค้นหาพอร์ตที่เปิดไว้

  • docker inspect ให้ข้อมูลได้มาก
    docker inspect <id>
    
"NetworkSettings": {
  "Bridge": "",
  "Ports": {
    "8000/tcp": [{
                   "HostIp": "0.0.0.0",
                   "HostPort": "55001"
                    }]
            },
...
Docker ระดับกลาง

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

Docker ระดับกลาง

Preparing Video For Download...