Exposer des ports avec des Dockerfiles

Docker : niveau intermédiaire

Mike Metzger

Data Engineer

Exposer des services

  • Commande EXPOSE
  • Définit les ports utilisés par le conteneur à l'exécution
  • Peut être défini comme <number>, <number>/tcp ou <number>/udp
    • Par exemple EXPOSE 80 ou EXPOSE 80/tcp
  • Entrées multiples autorisées
  • Sert de documentation
Docker : niveau intermédiaire

Utiliser les options -p / -P

  • Nécessite toujours les options -p ou -P avec docker run pour rendre les ports accessibles hors du conteneur
  • L'option -P associe automatiquement un port éphémère aux ports exposés. Utilisez docker ps -a pour voir les mappages.
  • -p<port hôte>:<port conteneur> permet d'utiliser des ports spécifiques.
Docker : niveau intermédiaire

Exemple avec EXPOSE

# Dockerfile
FROM python:3.11-slim
ENTRYPOINT ["python","-mhttp.server"]
# Indiquer au moteur Docker que 
# le port 8000 doit être disponible
EXPOSE 8000
  • Créer un conteneur à partir de l'image
    docker run pyserver
    
  • Afficher l'état du conteneur
    docker ps -a
    
CONTAINER ID   IMAGE         ...   PORTS      NAMES
8c3d320255ae   pyserver      ...   8000/tcp   angry_chaum
Docker : niveau intermédiaire

Rendre les ports joignables

  • Mapper automatiquement un port temporaire de l'hôte vers le conteneur
    docker run -P pyserver
    
docker ps -a
CONTAINER ID   IMAGE      ...   PORTS                     NAMES
6bb458ef25da   pyserver   ...   0.0.0.0:55001->8000/tcp   beautiful_lamarr
Docker : niveau intermédiaire

Trouver les ports exposés

  • docker inspect fournit de nombreuses informations
    docker inspect <id>
    
"NetworkSettings": {
  "Bridge": "",
  "Ports": {
    "8000/tcp": [{
                   "HostIp": "0.0.0.0",
                   "HostPort": "55001"
                    }]
            },
...
Docker : niveau intermédiaire

Passons à la pratique !

Docker : niveau intermédiaire

Preparing Video For Download...