Después de leer los documentos, me encontré algo confundido sobre la mejor manera de administrar datos productivos de aplicaciones / servicios.
Parece que hay 3 opciones:
- Simplemente asigne el volumen al directorio del host (es decir,
-v
argumento paradocker run
) - Crear una imagen de contenedor de docker para datos (es decir, contenedor separado y
--volumes-from
) - Crear un volumen acoplable (es decir
docker volume create
)
Ahora, parece que la práctica aceptada es la opción # 2, pero luego me pregunto cuál es el propósito de # 3.
Especialmente, ¿cómo maneja correctamente estos escenarios docker volume
y es mejor usar un contenedor de volumen de datos o esto para cada situación?
- Necesita datos de la aplicación en un volumen separado y / o nivel de almacenamiento en su servidor
- Copia de seguridad
- Restaurando datos
btrfs scrub
para encontrar y corregir archivos dañados. No estoy seguro de cómo funciona el material dockerizado, pero supongo que no protege contra la descomposición de datos, por lo que siempre necesito una restauración completa si ocurre algo malo en lugar de simplemente restaurar archivos individuales. Otro pensó que agrega otra capa de abstracción, por lo que ralentiza aún más la lectura y escritura de archivos. De alguna manera no veo las ventajas de # 2 y # 3, pero no tengo experiencia con Docker, por lo que esto podría cambiar.Respuestas:
Creo que # 2 y # 3 son más o menos lo mismo, la principal diferencia es que no hay un contenedor detenido con # 3 (es, literalmente, solo un volumen con nombre). Por ejemplo, puede crear un volumen con nombre y hacer de manera similar lo que haría con # 2 en su
-v
lugar.Crea un volumen con nombre:
Monte y escriba algunos datos en ese volumen desde un contenedor:
Luego puede montar ese mismo
test
volumen en otro contenedor y leer los datos:La ventaja aquí es que el volumen no desaparecerá accidentalmente si elimina el contenedor de solo datos. Ahora lo gestionas con el
docker volume
subcomando.También abre las posibilidades para los controladores de volumen en el futuro para que pueda hacer volúmenes compartidos entre hosts (es decir, volúmenes nombrados a través de NFS). Ejemplos de esto podrían ser Flocker y Convoy . Según su punto de vista específico sobre cómo mover o respaldar datos, Convoy tiene subcomandos específicos para respaldar datos y permite el almacenamiento en NFS o EBS externos a su host.
Por esta razón, creo que la forma más nueva de la escuela (Docker 1.9+) es usar un volumen con nombre en lugar de un contenedor de solo datos.
fuente
the volume won't accidentally disappear if you remove the data-only container
. ¿Podrías dar más detalles? Gracias.A partir de Docker 1.9, se prefiere crear volúmenes con nombre con la API de volúmenes (
docker volume create --name mydata
) en lugar de un contenedor de volumen de datos. A partir de febrero de 2016, la documentación de los volúmenes de Docker está lamentablemente desactualizada. La gente de Docker sugiere que los Contenedores de Volumen de Datos " ya no se consideran un patrón recomendado ", "los volúmenes con nombre deberían poder reemplazar los volúmenes de solo datos en la mayoría (si no todos) los casos " y " no hay razón que pueda ver para usar contenedores de solo datos ".fuente