Esta publicación funciona a través de estas dos opciones comunes; volúmenes de datos y contenedores de volúmenes de datos. Teniendo en cuenta los comandos involucrados en la copia de seguridad, restauración y migración de dichos volúmenes de datos. Esta es la publicación cuatro en Docker que sigue a Docker: administración y redes de daemon (3). Regrese y lea la última mitad de esa publicación para ver cómo conectar en red los contenedores para que puedan comunicarse correctamente de un lado a otro, si es necesario.
1 – Creación de volúmenes de datos
Un “volumen de datos” es un directorio marcado dentro de un contenedor que existe para contener datos persistentes o comúnmente compartidos. La asignación de estos volúmenes se realiza al crear un nuevo contenedor.
1 – Creación de volúmenes de datos2 – Creación de volúmenes de datos de host3 – Montaje de archivos de host individuales4 – Creación de contenedores de volúmenes de datos dedicados5 – Copia de seguridad y restauración de volúmenes de datos6 – Problemas de volúmenes y contenedores de datos
Todos los datos que ya están presentes como parte de la imagen de Docker en un directorio de volumen de destino se transfieren al nuevo contenedor y no se pierden. Sin embargo, esto no es cierto cuando se monta un directorio de host local (que se trata más adelante) ya que los datos están cubiertos temporalmente por el nuevo volumen. Puede agregar un volumen de datos a un contenedor usando el indicador -v junto con el comando crear o ejecutar. Puede usar –v varias veces para montar varios volúmenes de datos. El siguiente comando creará un volumen de datos dentro de un nuevo contenedor en el directorio /webapp . Los volúmenes de datos son muy útiles ya que, una vez designados y creados, se pueden compartir e incluir como parte de otros contenedores. También es importante tener en cuenta que los cambios en los volúmenes de datos no se incluyen cuando actualiza una imagen, pero a la inversa, los volúmenes de datos persistirán incluso si se elimina el contenedor. Esta preservación se debe al hecho de que los volúmenes de datos deben persistir independientemente del ciclo de vida de un contenedor. A su vez, esto también significa que Docker nunca recoge la basura volúmenes que ya no están en uso por un contenedor.
2 – Creación de volúmenes de datos de host
En su lugar, puede montar un directorio desde el host de su daemon Docker en un contenedor; es posible que haya visto esto usado una o dos veces en las publicaciones anteriores. Montar un directorio de host puede ser útil para realizar pruebas. Por ejemplo, puede montar el código fuente dentro de un contenedor. Luego, cambie el código fuente y vea su efecto en la aplicación en tiempo real. El directorio en el host debe especificarse como una ruta absoluta y, si el directorio no existe, Docker lo creará automáticamente. El siguiente comando de ejemplo monta el directorio de host /src/webapp en el contenedor en el directorio /opt/webapp . Algunas reglas y comportamientos internos para este proceso son:
El directorio del contenedor de destino siempre debe tomar una ruta completa absoluta del sistema de archivos. El directorio de origen del host puede ser una ruta absoluta o un valor de nombre. Si la ruta del contenedor de destino ya existe dentro de la imagen del contenedor, el montaje del directorio del host se superpone pero no elimina el contenido de destino. Una vez que se elimina el montaje, se puede volver a acceder al contenido de destino.
Los volúmenes de Docker se montan de forma predeterminada como un modo dual de lectura y escritura, pero puede configurarlos para que se monten como solo lectura si lo desea. Aquí, el mismo directorio /src/webapp está vinculado nuevamente, pero la opción extra :ro hace que el montaje sea de solo lectura.
3 – Montaje de archivos de host individuales
El indicador -v usado hasta ahora puede apuntar a un solo archivo en lugar de directorios completos de la máquina host. Esto se hace mapeando el archivo específico en cada lado del contenedor. Un excelente ejemplo interactivo de esto que crea un nuevo contenedor y lo coloca en un shell de bash con su historial de bash del host, es el siguiente: Además, cuando salga del contenedor, la versión host del archivo tendrá los comandos escritos desde el interior del contenedor, escritos en el archivo .bash_history.
4 – Creación de contenedores de volumen de datos dedicados
Una práctica popular con el uso compartido de datos de Docker es crear un contenedor dedicado que contenga todos sus recursos de datos compartibles persistentes, montando los datos dentro de él en otros contenedores una vez creados y configurados.
Este ejemplo tomado de la documentación de Docker utiliza la imagen de entrenamiento postgres SQL como base para el contenedor de volumen de datos.
El indicador –volumes-from se utiliza para montar el volumen /data-store dentro de otros contenedores:
Este proceso se repite para nuevos contenedores adicionales:
Tenga en cuenta que puede usar varios –volumes-from flags en un comando para combinar volúmenes de datos de varios otros contenedores de datos dedicados.
Una idea alternativa es montar los volúmenes de cada contenedor subsiguiente al siguiente, en lugar de que el contenedor dedicado original se vincule a los nuevos.
Esto forma una cadena que comenzaría usando:
Recuerde que si elimina contenedores que montan volúmenes, el almacén de volúmenes y sus datos no se eliminarán. Docker lo conserva.
Para eliminar completamente un volumen del sistema de archivos, debe ejecutar:
Donde
Volúmenes colgantes
Los “volúmenes colgantes” se refieren a volúmenes de contenedores a los que ya no hace referencia un contenedor.
Afortunadamente, hay un comando para enumerar todos los volúmenes extraviados en un sistema.
Para eliminar un volumen que ya no se necesita, utilice:
Donde
5 – Copia de seguridad y restauración de volúmenes de datos
¿Cómo se mantienen los volúmenes de datos cuando se trata de cosas como copias de seguridad, restauración y migración? Bueno, aquí hay una solución que se ocupa de estas necesidades al mostrar cómo puede lograr esto con un contenedor de datos dedicado. Para hacer una copia de seguridad de un volumen: Así es como funciona el comando anterior: Nos queda una copia de seguridad del volumen /data-store en el host local. Desde aquí puede restaurar el volumen de la forma que desee. Para restaurar en un nuevo contenedor, ejecute: A continuación, extraiga el contenido del archivo de copia de seguridad en el volumen de datos del nuevo contenedor: Ahora el nuevo contenedor está en funcionamiento con los archivos del volumen /data-store original.
6 – Problemas de volumen y contenedor de datos
Volúmenes huérfanos: anteriormente denominados volúmenes colgantes. Estos son los volúmenes sobrantes sin seguimiento que no se eliminan del sistema una vez que se elimina/elimina un contenedor. Seguridad: además de los permisos habituales de archivo de Unix y la capacidad de establecer privilegios de solo lectura o lectura y escritura. Los volúmenes de Docker o los contenedores de datos no tienen seguridad adicional. Integridad de los datos : compartir datos mediante volúmenes y contenedores de datos no proporciona ningún nivel de protección de la integridad de los datos. Las funciones de protección de datos aún no están integradas en Docker, es decir, instantáneas de datos, replicación automática de datos, copias de seguridad automáticas, etc. Por lo tanto, la administración de datos debe ser manejada por el administrador o el propio contenedor. Almacenamiento externo : el diseño actual no tiene en cuenta la capacidad de usar un volumen de Docker que se extiende de un host a otro. Deben estar en el mismo host.
Parece que aquí se ha cubierto una gran cantidad de información, pero en realidad solo se han explorado dos ideas. La de los volúmenes de datos singulares y la del contenedor de datos independiente preferente. También hay nuevas actualizaciones de Docker en el horizonte, como siempre, por lo que es de esperar que algunos de los problemas planteados aquí se resuelvan pronto. La próxima publicación sobre Docker cubre la creación de imágenes usando Dockerfiles, y también con Docker Compose. Esta publicación de blog se está volviendo cada vez más desactualizada a medida que pasa el tiempo, ¡sería mejor consultar la documentación oficial de Docker para este tipo de cosas!