Estoy usando Docker para implementar algunos servicios en un servidor CentOS 6.4, y estoy tratando de descubrir cómo hacer una copia de seguridad de los datos que generan.
Por ejemplo, uno de los servicios es una aplicación web donde los usuarios pueden cargar archivos. Para este contenedor, tengo un /filesvolumen del que quiero hacer una copia de seguridad. Parece que los montajes de host están mal vistos, porque dicho montaje no es de ninguna manera portátil, como se dice en esta publicación de blog y en la documentación de Docker para volúmenes .
Sé por la misma publicación de blog que no necesito un montaje de host para acceder a los archivos en un volumen, puedo usar docker inspectpara averiguar dónde están los archivos.
Pero aquí está mi problema: estaba pensando en hacer una copia de seguridad solo de los dockerfiles necesarios para construir los contenedores y los volúmenes asociados con ellos. En el caso probable de que tenga que restaurar todo desde la copia de seguridad, ¿cómo haría para saber qué directorio de volumen corresponde a qué contenedor? La reconstrucción del contenedor hace que la identificación y la ruta del volumen cambien, por lo que necesitaría información adicional para que coincida. ¿Qué más, en todo caso, debería hacer una copia de seguridad para poder restaurar todo realmente?

docker inspects construido en templating este modo:VOLUME=$( docker inspect -f '{{index .Volumes "/path/in/container"}}' "${NAME}-data" ). Probablemente también sea aconsejable recordar a las personas que no esperen hacer una copia de seguridad de los archivos de esta manera mientras están en uso (por ejemplo, bases de datos).Volumesdesaparecieron y, enMountscambio, existen con una estructura diferente. Necesitamos trabajar un poco másrangepara encontrar el punto de montaje que nos interesaVOLUME=$(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/path/in/container" }}{{ .Source }}{{ end }}{{ end }}' "${NAME}-data")En el Docker más nuevo (probado en
1.9.1, build 9894698) puedes usar elcpcomando .Aquí hay un ejemplo de cómo copiar un directorio desde el contenedor al host:
Aquí hay un ejemplo de cómo copiar un directorio del contenedor a un
tararchivo:Por último, pero no menos importante, un ejemplo de cómo copiar un directorio del contenedor a un
tar.gzarchivo:fuente
docker cpenvía todo a través de la red. Es algo que desea evitar, especialmente si su volumen Docker ya es un volumen btrfs.docker cpsería bueno.