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:
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:
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
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.