`data-container` con volúmenes nombrados o anónimos – ¿problemas conceptuales? (Discusión)

a) Volúmenes anónimos

Al usar contenedores de datos, puede usar volúmenes anónimos como este

version '2' services: consumer: volume_from: - data-container:rw data-container: image: cogniteev/echo command: echo 'Data Container' volume: - /var/www 

b) Volúmenes de nombre

o puede usar volúmenes nombrados como este

 version '2' services: consumer: volume_from: - data-container:rw data-container: image: cogniteev/echo command: echo 'Data Container' volume: - my-named-volume:/var/www volumes: my-named-volume: driver: local 

Suelo ir con b) y me gustaría discutir / explicar los problemas / fallas conceptuales de ambos. ¿Cuáles son los pros y los contras?

Los aspectos con los que podemos compararlos son / podrían ser:

  1. portabilidad
  2. capacidad de actualización del contenedor de datos (¿por qué alguna vez actualizar el contenedor?)
  3. Comience / pare (continúe) la compatibilidad?
  4. problemas de stack múltiple?
  5. eficiencia (reutilización del volumen)

Esta pregunta surgió du la discusión sobre esta pregunta https://stackoverflow.com/a/38984689/3625317

Respuesta corta: se prefieren los volúmenes de datos con nombre, los contenedores de datos ya no son necesarios, por lo que nunca debe usar volumes-from en ningún proyecto nuevo.

Su versión de volúmenes nombrados está fusionando un contenedor con nombre y datos, debería ser:

 version '2' services: web: image: my-web-image volumes: - my-named-volume:/var/www volumes: my-named-volume: driver: local 

Al combinar los dos, ha agregado una capa adicional de direccionamiento indirecto para llegar a su volumen nombrado, sin ningún beneficio adicional. Los volúmenes nombrados se crearon en 1.9 para replace los contenedores de datos, que en sí mismos eran un método algo pirateado para proporcionar datos persistentes. Las ventajas de los volúmenes con nombre sobre los contenedores de datos incluyen:

  • Su administración de datos es independiente de la administración de su contenedor, puede eliminar todos los contenedores en ejecución y aún así tener sus datos disponibles
  • Los datos se pueden almacenar en diferentes ubicaciones utilizando controlleres de volumen, lo que significa que puede ponerlos en nfs, un sistema de files distribuidos o incluso un directory persistente local.
  • Puede iniciar y detener cualquier contenedor en cualquier order sin dependencies entre contenedores
  • Cuando se crea por primera vez, un volumen nombrado recibirá una copy del sistema de files de image sobre el que se monta, idéntico al comportamiento de los contenedores de datos, lo que significa que es una transición perfecta (tenga en count que este no es el comportamiento de un volumen de host, aka bind mount)

Consulte también esta pregunta que también trata volúmenes nombrados frente a contenedores de datos y esta respuesta a otra pregunta similar. También tenemos una publicación de blog sobre esto de una empresa para la que trabajo.