Mở cổng với Dockerfile

Docker nâng cao

Mike Metzger

Data Engineer

Mở dịch vụ

  • Lệnh EXPOSE
  • Xác định cổng container dùng khi chạy
  • Có thể là <number>, <number>/tcp hoặc <number>/udp
    • Ví dụ: EXPOSE 80 hoặc EXPOSE 80/tcp
  • Cho phép nhiều mục
  • Dùng để ghi chú/tài liệu
Docker nâng cao

Dùng cờ -p / -P

  • Vẫn cần tùy chọn -p hoặc -P cho docker run để mở cổng ra ngoài container
  • Tùy chọn -P sẽ tự ánh xạ một cổng tạm thời tới cổng được expose. Cần dùng docker ps -a để xem cổng nào được ánh xạ.
  • Dùng -p<host port>:<container port> để chỉ định cổng cụ thể.
Docker nâng cao

Ví dụ EXPOSE

# Dockerfile
FROM python:3.11-slim
ENTRYPOINT ["python","-mhttp.server"]
# Thông báo cho Docker Engine
# cổng 8000 nên được mở
EXPOSE 8000
  • Tạo container từ image
    docker run pyserver
    
  • In trạng thái container
    docker ps -a
    
CONTAINER ID   IMAGE         ...   PORTS      NAMES
8c3d320255ae   pyserver      ...   8000/tcp   angry_chaum
Docker nâng cao

Làm cho cổng truy cập được

  • Tự ánh xạ cổng tạm thời từ host tới container
    docker run -P pyserver
    
docker ps -a
CONTAINER ID   IMAGE      ...   PORTS                     NAMES
6bb458ef25da   pyserver   ...   0.0.0.0:55001->8000/tcp   beautiful_lamarr
Docker nâng cao

Tìm cổng được mở

  • docker inspect cung cấp rất nhiều thông tin
    docker inspect <id>
    
"NetworkSettings": {
  "Bridge": "",
  "Ports": {
    "8000/tcp": [{
                   "HostIp": "0.0.0.0",
                   "HostPort": "55001"
                    }]
            },
...
Docker nâng cao

Ayo berlatih!

Docker nâng cao

Preparing Video For Download...