Administración de volúmenes de Docker utilizando Docker Compose

Administración de volúmenes de Docker utilizando Docker Compose

Propósito de los volúmenes de Docker

Los contenedores de Docker están destinados a ser un reemplazo para aplicaciones. Están destinados a ser desechables y fáciles de reemplazar. Esta propiedad es, de hecho, la piedra angular de muchas tuberías de CI/CD. Cuando se realiza un cambio, empujado a su repositorio de fuente que desencadena una cadena de eventos. Las imágenes de Docker se construyen, proban automáticamente y (a veces) incluso se implementan directamente en la producción, reemplazando las versiones más antiguas sin problemas.

Pero a menudo hay datos persistentes que deben conservarse entre las diferentes versiones de su aplicación. Los ejemplos incluyen bases de datos, archivos de configuración para sus aplicaciones, archivos de registro y credenciales de seguridad como claves API y certificados TLS.

Para permitir que todos estos datos persistan, utilizaremos volúmenes Docker que son solo partes del sistema de archivos de Docker Host (un directorio o un dispositivo de bloque formateado con un sistema de archivos) que se puede montar dentro de un contenedor en cualquier ubicación deseada del sistema de archivos del contenedor.

Configuración

Para asegurarnos de que todos estamos en la misma página, aquí está la versión de Docker Runtime y Docker-Compose que estoy usando:

  1. Docker versión 18.09.2, construir 6247962
  2. Docker-Compose versión 1.23.2, construir 1110Ad01
  3. COMPONE ARCHIVO Versión 3: funciona con 1.13.0 y superior

Ejemplo: alojamiento de un sitio web de Ghost CMS

Trabajar con composición es muy sencillo. Escribe un archivo YAML que describe su implementación y luego lo ejecuta con la implementación utilizando el Docker-Compose CLI. Comencemos con una implementación simple de CMS fantasma.

Cree un directorio llamado compositsamples y dentro de él cree un archivo llamado Docker-Compose.yaml

$ mkdir composes muestras
$ CD composes muestras
Contenido de Docker-Compose.Yaml:
Versión: "3.0 "
servicios:
web:
Imagen: Ghost: Último
Puertos:
- "2368: 2368"
Volúmenes:
- CMS-Content:/var/lib/fantasma/contenido
Volúmenes:
CMS-Content:

Este archivo de composición declara un solo servicio que es Web que ejecuta la última imagen de Ghost CMS del repositorio oficial de Docker Hub. El puerto expuesto es 2368 (más sobre esto en un poco más tarde) y un volumen es entonces un volumen llamado CMS-Content montado en/var/lib/fantasma/contenido que puede leer sobre su aplicación particular y sus matices buscando esas aplicaciones documentación. Por ejemplo, el puerto predeterminado de Ghost Container y el punto de montaje predeterminado para el contenido del sitio web/var/lib/fantasma/contenido lo mencionan la documentación oficial del contenedor.

Si está escribiendo una nueva aplicación propia, piense en todos los datos persistentes a los que necesitará acceso y, en consecuencia, establezca los puntos de montaje para sus volúmenes Docker.

Para probar que el volumen persistente funciona, intente esto:

  1. Abra un navegador e ingrese la IP de su host de Docker, es decir, http: // Dockerhostip: 2368/Ghost (o simplemente http: // localhost: 2368/fantasma) y cree una cuenta de administrador. Modificar una de las publicaciones preexistentes y guardar.
  2. Enumere todos los componentes de Docker que se ejecutan utilizando los comandos: Docker PS, Docker Network LS, Docker Volumen LS
  3. En el mismo directorio que su archivo de composición, ejecute el comando $ docker-compose hacia abajo y ahora puede enumerar todos los contenedores, red y volúmenes de Docker. Curiosamente, notará que, si bien el contenedor y la red creada por Docker-Compose se eliminan, el volumen de Docker aún está intacto.
  4. Ejecute Docker -Compose UP -D y notará que la publicación modificada es justo donde la dejó, incluso sus credenciales de inicio de sesión de administrador se pueden usar nuevamente, y no tiene que crear una nueva cuenta de administrador.
  5. Elimine las secciones con volumen de los Servicios: Sección Web: de la sección principal, y ahora si repite los tres pasos anteriores, notará que.

Sintaxis y verbosidad

La sintaxis para introducir un volumen usando Docker-Compose es bastante sencilla. Empiezas con algo similar a un contenedor y mencionas el nombre del volumen que desea montar dentro de él. Si no menciona un nombre, entonces puede optar por una sintaxis perezosa como a continuación:

Versión: "3.0 "
servicios:
web:
Imagen: Ghost: Último
Puertos:
- "2368: 2368"
Volúmenes:
- /var/lib/fantasma/contenido

Si desea ser un poco más detallado, deberá mencionar el volumen de Docker como una definición de nivel superior:

Versión: "3.0 "
servicios:
web:
Imagen: Ghost: Último
Puertos:
- "2368: 2368"
Volúmenes:
- CMS-Content:/var/lib/fantasma/contenido
## Definir que CMS-Content es de hecho un volumen.
Volúmenes:
CMS-Content:

Aunque la última versión requiere que escriba más, es más detallado. Elija el nombre relevante para sus volúmenes, para que sus colegas puedan entender lo que se ha hecho. Puede ir aún más lejos y mencionar el tipo de volumen (más sobre esto más adelante) y señalar la fuente y el objetivo.

Volúmenes:
- Tipo: volumen
Fuente: Datos CMS
objetivo:/var/lib/fantasma/contenido

Monturas de enlace

Los montajes de enlace son partes del sistema de archivos host que se pueden montar directamente dentro del contenedor Docker. Para introducir un montaje de encuadernación, simplemente mencione el directorio de host que desea compartir y el punto de montaje dentro del contenedor Docker donde debe montarse:

Volúmenes:
- /hogar//Projects/Ghost:/Var/Lib/Ghost/Content

Usé la ruta/hogar // proyectos/fantasma como un ejemplo, puede usar cualquier ruta de su anfitrión de Docker que desee, siempre que tenga acceso a ella, por supuesto.

También puede usar rutas relativas usando $ PWD o ~, pero eso puede conducir fácilmente a errores y desastres en los escenarios del mundo real en los que está colaborando con varios otros humanos con su propio entorno Linux. Por otro lado, a veces las rutas relativas son realmente más fáciles de manejar. Por ejemplo, si su repositorio git también se supone que es su montaje de encuadernación usando DOT (.) Simbolizar el directorio actual puede ser ideal.

Nuevos usuarios que clonan el repositorio y lo clonan en cualquier parte de su sistema de host, y ejecutan Docker -Compose Up -d y obtienen prácticamente el mismo resultado.

Si usa una sintaxis más detallada, esto es lo que contendrá su archivo de composición:

Volúmenes:
- Tipo: BIND
Fuente:/Home/User/Projects/Ghost
objetivo:/var/lib/fantasma/contenido

Conclusión

Organizar sus aplicaciones de manera que la aplicación esté separada de los datos puede ser muy útil. Los volúmenes son formas sanas de lograr eso. Siempre que estén respaldados y seguros, puede usar libremente usar los contenedores como entornos desechables, incluso en producción!

La actualización de una versión de la aplicación a la siguiente o usar diferentes versiones de su aplicación para pruebas A/B puede ser muy optimizada siempre que la forma en que se almacenan o se accede los datos es la misma para ambas versiones.