tag library latest images hub example dockers container docker docker-compose docker-networking

library - docker-compose: diferencia entre red y enlace



dockers images (1)

Estoy aprendiendo docker. Veo que esos dos términos me hacen confundir. Por ejemplo, aquí hay una ventana acoplable que define dos servicios redis y 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

Este archivo de creación de ventana docker-compose define una red puente llamada lognet y todos los servicios se conectarán a esta red. Según tengo entendido, esta acción hace que esos servicios puedan ver a otros. Entonces, ¿por qué el servicio de aplicaciones aún debe vincularse con el servicio redis en el caso anterior?

Gracias


Los enlaces han sido reemplazados por redes. Docker los describe como una característica heredada que debe evitar usar. Puede eliminar el enlace de forma segura y los dos contenedores podrán referirse entre sí por su nombre de servicio (o nombre de contenedor).

Con compose, los enlaces tienen un efecto secundario de crear una dependencia implícita. Debería reemplazarlo con una sección más explícita de depends_on para que la aplicación no intente ejecutarse sin o antes de que se inicie Redis.

Dejando de lado, no soy un fanático de la codificación de nombre de contenedor duro, a menos que esté seguro de que este es el único contenedor que existirá con ese nombre en el host y debe referirse a él desde la ventana acoplable cli por nombre. Sin el nombre del contenedor, docker-compose le dará un nombre menos intuitivo, pero también le dará un alias de redis en la red, que es exactamente lo que necesita para la red de contenedor a contenedor. Entonces el resultado final con estas sugerencias es:

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