J'apprends le docker. Je vois que ces deux termes me rendent confus. Par exemple, voici un docker-compose qui définit deux services redis
et web-app
.
services:
redis:
container_name: redis
image: redis:latest
ports:
- "6379:6379"
networks:
- lognet
app:
container_name: web-app
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- ".:/webapp"
links:
- redis
networks:
- lognet
networks:
lognet:
driver: bridge
Cette docker-compose
Le fichier définit un réseau de pont nommé lognet et tous les services se connecteront à ce réseau. Si je comprends bien, cette action permet à ces services d'en voir d'autres. Alors pourquoi le service d'application doit toujours être lié au service redis dans le cas ci-dessus.
Merci
Les liens ont été remplacés par des réseaux. Docker les décrit comme fonctionnalité héritée que vous devez éviter d'utiliser. Vous pouvez supprimer le lien en toute sécurité et les deux conteneurs pourront se référer l'un à l'autre par leur nom de service (ou nom_conteneur).
Avec la composition, les liens ont pour effet secondaire de créer une dépendance implicite. Vous devez remplacer cela par une section depend_on plus explicite afin que l'application ne tente pas de s'exécuter sans ou avant le démarrage de redis.
En passant, je ne suis pas un fan du codage en dur container_name, sauf si vous êtes certain que c'est le seul conteneur qui existera avec ce nom sur l'hôte et que vous devez vous y référer depuis le docker cli par son nom. Sans le nom du conteneur, docker-compose lui donnera un nom moins intuitif, mais il lui donnera également un alias de redis sur le réseau, ce qui est exactement ce dont vous avez besoin pour la mise en réseau de conteneur à conteneur. Le résultat final avec ces suggestions est donc:
version: '2'
# do not forget the version line, this file syntax is invalid without it
services:
redis:
image: redis:latest
ports:
- "6379:6379"
networks:
- lognet
app:
container_name: web-app
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- ".:/webapp"
depends_on:
- redis
networks:
- lognet
networks:
lognet:
driver: bridge