Exposer des ports avec des Dockerfiles

Docker 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 permises
  • Sert de documentation
Docker 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 au(x) port(s) exposé(s). Utilisez docker ps -a pour voir les ports mappés.
  • -p<port hôte>:<port conteneur> permet de choisir des ports précis.
Docker intermédiaire

Exemple d'EXPOSE

# Dockerfile
FROM python:3.11-slim
ENTRYPOINT ["python","-mhttp.server"]
# Informer le 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 intermédiaire

Rendre les ports joignables

  • Associer automatiquement un port temporaire de l'hôte au 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 intermédiaire

Repérer les ports exposés

  • docker inspect fournit beaucoup d'information
    docker inspect <id>
    
"NetworkSettings": {
  "Bridge": "",
  "Ports": {
    "8000/tcp": [{
                   "HostIp": "0.0.0.0",
                   "HostPort": "55001"
                    }]
            },
...
Docker intermédiaire

Passons à la pratique !

Docker intermédiaire

Preparing Video For Download...