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 /files
volumen 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 inspect
para 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 inspect
s 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).Volumes
desaparecieron y, enMounts
cambio, existen con una estructura diferente. Necesitamos trabajar un poco másrange
para 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 elcp
comando .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
tar
archivo:Por último, pero no menos importante, un ejemplo de cómo copiar un directorio del contenedor a un
tar.gz
archivo:fuente
docker cp
envía todo a través de la red. Es algo que desea evitar, especialmente si su volumen Docker ya es un volumen btrfs.docker cp
sería bueno.