Volúmenes y almacenamiento de la información en contenedores
Clase 10 de 48 • Curso de Arquitectura de Aplicaciones con Docker 2018
Contenido del curso
Contenedores: ¿Qué son?
- 1

Contenedores: Qué son y cómo encajan con DevOps
08:35 min - 2

Ejemplo: Casos de uso de contenedores en las empresas
01:40 min - 3

Bases físicas y lógicas de los contenedores
02:35 min - 4

Reto 1. Herramientas necesarias para trabajar con Docker
07:44 min - 5

Reto 2. Sistemas de contenedores: historia, parecidos y diferencias
01:34 min
Uso básico de contenedores
- 6

Retos en la instalación de Docker en diferentes sistemas
11:25 min - 7

Validación de post instalación de Docker
02:44 min - 8

Uso básico de Docker: Imágenes, contenedores de Docker
13:25 min - 9

¿Qué hay en un contenedor?
10:41 min - 10

Volúmenes y almacenamiento de la información en contenedores
Viendo ahora - 11

Gestionando los contenedores instalados
08:21 min - 12

Reto 3. Trabajando con imágenes 'oficiales'
01:19 min - 13

Solución al reto 3
04:26 min - 14

Reto 4. Uso de imágenes locales
00:55 min - 15

Plugins: funcionalidad añadida y algún plugin interesante
06:56 min - 16

Configuración de Docker
00:59 min
Microservicios; APIs con REST
- 17

Protocolo HTTP, órdenes y mensajes de estado
04:22 min - 18

Qué es un API REST y buenas prácticas en su diseño
04:15 min - 19

Implementando un API REST en diferentes lenguajes
02:52 min - 20

Implementando un API REST en Python y ejecutándolo
04:24 min - 21

Reto 5. Diseño de una estructura de datos básica en Python
01:38 min
Contenedores y microservicios
- 22

Aislando microservicios en contenedores: Uso de Dockerfiles
11:31 min - 23

Puertos y cómo configurarlos
07:59 min - 24

Invocando contenedores
06:53 min - 25

ENTRYPOINT y CMD
03:52 min - 26

Trabajando con datos: Volúmenes
04:42 min - 27

Reto 6. "Contenedorizar" una aplicación usando Dockerfiles y despliegue
01:51 min - 28

Herramientas básicas en arquitecturas de microservicios
02:29 min - 29

Instalación de docker-compose
02:32 min - 30

Componiendo servicios con docker-compose.
09:30 min - 31

Usando docker stack deploy
05:39 min - 32

Creando puentes de red
08:42 min - 33

Reto 7. Desplegando un microservicio en la nube usando PaaS
01:42 min
Despliegue de contenedores en la nube
- 34

Instalación del cliente de Azure
03:14 min - 35

Clientes de servicios cloud y como usarlos en nuestra aplicación
13:37 min - 36

Creación de un contenedor en la nube
08:08 min - 37

Despliegue seguro de microservicios
07:44 min - 38

Integrando contenedores en aplicaciones en la nube
04:49 min - 39

Instalando Docker Cloud
01:54 min - 40

Iniciación al API de Docker Cloud
07:35 min - 41

Usando cloud.docker.com
07:01 min - 42

Uso de Docker Cloud, cómo desplegar un servicio en un contenedor
07:40 min - 43

Cómo desplegar un stack
10:43 min - 44

Reto 9: desplegando en una nube comercial
01:37 min
Orquestación de contenedores
Docker crea, en sus contenedores, un sistema de ficheros superpuesto u overlay. Este sistema de ficheros superpuesto puede usar diferentes mecanismos posibles, igual que en Linux hay varios tipos de sistemas de ficheros posibles; Docker usa drivers tales como overlay u overlay2 para estructurar la información dentro del contenedor y que esta información se almacene en el sistema de ficheros del anfitrión, pero generalmente usa un sistema copy on write que escribe en sistema de ficheros anfitrión cada vez que se produce una modificación en el sistema de ficheros superpuesto u overlay.
En general, salvo que haya algún problema crítico de prestaciones, es mejor usar el driver por omisión; el que se use dependerá de la implementación de Docker (CE o EE) y de la versión del kernel. En esta página se indica como configurar el driver que se quiere usar, para lo que hay que cambiar la configuración del daemon de Docker. En general, sin embargo, es suficiente con usar el driver por omisión.
Por otro lado, Docker introduce el concepto de volúmenes; son sistemas de ficheros gestionados por el propio Docker y que pueden compartirse entre diferentes contenedores. Se crea usando la suborden volume create
sudo docker volume create log
Igual que un contenedor Docker es algo así como un proceso con esteroides, un volumen de Docker es una especie de disco transportable, que almacena información y que puedes usar para transportar información entre contenedores y entre estos y el anfitrión.
Y de la misma forma, la arquitectura de acceso a datos de las aplicaciones basadas en Docker varían. Por ejemplo, no vamos a tener una aplicación monolítica que escriba en el log, lo analice y lo lea, sino diferentes contenedores que interaccionarán no directamente, sino a través de este contenedor de almacenamiento.
Por ejemplo, podemos usar un volumen para montar el directorio /app de contenedores basados en diferentes sistemas operativos, de forma que podamos probar una aplicación determinada en los mismos. Hagamos
docker volume create benchmark && docker pull fedora && docker run -it --rm -v benchmark:/app fedora /bin/bash
La primera sentencia usa la suborden create para crear un volumen que vamos a llamar benchmark. Tras pre-descargar Fedora, ejecutamos en la última orden un intérprete. Con -v benchmark:/app es como convertimos el volumen externo creado en un directorio, /app, del contenedor sobre el que vamos a ejecutar dicho benchmark.
Una vez dentro, se puede crear un minibenchmark usando las propias órdenes de los diferentes sistemas operativos, que diga por ejemplo el número
de ficheros ls -R / | wc y escriba el resultado en el mismo /app.
time ls -R / | wc > result-uname -m-uname -s.dat
Una vez hecho eso, puedes ejecutar ese programa en cualquier distro, de esta forma:
time docker run -it --rm -v benchmark:/app fedora sh /app/bm.sh 0,04s user 0,02s system 6% cpu 1,045 total
time docker run -it --rm -v benchmark:/app debian sh /app/bm.sh 0,04s user 0,01s system 5% cpu 0,872 total
time docker run -it --rm -v benchmark:/app centos sh /app/bm.sh 0,03s user 0,01s system 4% cpu 0,878 total
time docker run -it --rm -v benchmark:/app alpine sh /app/bm.sh 0,02s user 0,00s system 1% cpu 1,192 total
time docker run -it --rm -v benchmark:/app busybox sh /app/bm.sh 0,01s user 0,04s system 3% cpu 1,505 total
Aunque influye la cantidad de ficheros que haya en el mismo, busybox tarda la cuarta parte de lo que tarda Fedora.
El usar para comparar diferentes sistemas operativos en una aplicación determinada es sólo una de las utilidades que tiene el uso de volúmenes. En general, siempre que necesitemos compartir ficheros entre diferentes contenedores vamos a usar esta opción; hay también plugins que permiten trabajar con ficheros almacenados en la nube para que se puedan compartir entre contenedores ya desplegados.
La utilidad de los volúmenes, salvo los alojados en la nube, se limita a los despliegues locales; en general, cuando vayamos a desplegar diferentes contenedores lo que haremos será crear contenedores cuyo cometido sea precisamente ese, almacenar datos; en este caso, usando el mismo mecanismo, la opción -v del CLI de Docker, se podrán montar directorios pertenecientes a diferentes contenedores para que aparezcan localmente.