Eksponowanie portów w Dockerfile

Docker średnio zaawansowany

Mike Metzger

Data Engineer

Eksponowanie usług

  • Polecenie EXPOSE
  • Określa porty używane przez kontener w czasie działania
  • Można podać jako <number>, <number>/tcp lub <number>/udp
    • Np. EXPOSE 80 lub EXPOSE 80/tcp
  • Dozwolone jest wiele wpisów
  • Służy jako metoda dokumentacji
Docker średnio zaawansowany

Flagi -p / -P

  • Nadal wymaga użycia opcji -p lub -P w docker run, aby porty były dostępne poza kontenerem
  • Opcja -P automatycznie mapuje efemeryczny port na eksponowany port. Należy użyć docker ps -a, aby zobaczyć mapowania.
  • Użycie -p<port hosta>:<port kontenera> pozwala na określenie konkretnych portów.
Docker średnio zaawansowany

Przykład EXPOSE

# Dockerfile
FROM python:3.11-slim
ENTRYPOINT ["python","-mhttp.server"]
# Let the Docker engine know 
# port 8000 should be available
EXPOSE 8000
  • Utwórz kontener z obrazu
    docker run pyserver
    
  • Wyświetl stan kontenera
    docker ps -a
    
CONTAINER ID   IMAGE         ...   PORTS      NAMES
8c3d320255ae   pyserver      ...   8000/tcp   angry_chaum
Docker średnio zaawansowany

Udostępnianie portów

  • Automatyczne mapowanie tymczasowego portu hosta na kontener
    docker run -P pyserver
    
docker ps -a
CONTAINER ID   IMAGE      ...   PORTS                     NAMES
6bb458ef25da   pyserver   ...   0.0.0.0:55001->8000/tcp   beautiful_lamarr
Docker średnio zaawansowany

Znajdowanie eksponowanych portów

  • docker inspect dostarcza wiele informacji
    docker inspect <id>
    
"NetworkSettings": {
  "Bridge": "",
  "Ports": {
    "8000/tcp": [{
                   "HostIp": "0.0.0.0",
                   "HostPort": "55001"
                    }]
            },
...
Docker średnio zaawansowany

Czas na ćwiczenia!

Docker średnio zaawansowany

Preparing Video For Download...