Isoler puis relier
Chaque conteneur a son propre réseau isolé. Pour que l'API atteigne MongoDB, il faut les placer sur un même réseau Docker. Ensuite ils communiquent sans exposer de port vers l'extérieur.
Créer un réseau & y attacher
On crée un réseau bridge et on y lance les conteneurs avec --network.
docker network create fioul-net docker run -d --name fioul-mongo --network fioul-net mongo:7 docker run -d --name fioul-api --network fioul-net -p 8080:8080 fioul-api:1.0
La résolution par nom de conteneur
Sur un réseau Docker, un conteneur en joint un autre par son nom (Docker fournit un DNS interne). L'API n'utilise donc pas localhost mais le nom du service base.
# côté API (application.properties)
spring.data.mongodb.uri=mongodb://fioul-mongo:27017/fioul
localhost dans un conteneur désigne le conteneur lui-même, pas l'hôte ni les voisins. Entre conteneurs, on utilise le nom (fioul-mongo), pas localhost.Relier l'API et la base
Seule l'API publie un port vers l'extérieur (-p 8080:8080) ; la base reste privée sur le réseau interne, jointe par l'API via son nom.
Mets fioul-mongo et fioul-api sur fioul-net ; configure l'API avec mongodb://fioul-mongo:27017/fioul. La base n'est pas exposée à l'extérieur (plus sûr). Le chapitre 7 automatise tout ça avec Compose (qui crée le réseau tout seul).
- Les conteneurs sur un même réseau Docker se joignent par leur nom.
- Entre conteneurs, jamais
localhost— le nom du service. - On n'expose (
-p) que ce qui doit être public ; la base reste interne.