Artículos de Tecnología > DevOps

Creando volúmenes con Docker

Yuri Matheus
Yuri Matheus
img1

Cuando se elimina un container, se pierde toda su información. ¿Hay alguna forma de conservar la información del contenedor? Este medio se llama volumen, veamos cómo crearlos.

Creando nuestro volumen

Queremos crear una copia de los datos en el container para nuestra máquina. Si el container se cae o es removido, podemos decirle dónde están los datos. De esta forma, nuestra información se guarda independientemente del estado del container.

Es decir, queremos decirle a Docker que cree un repositorio de datos para containers o volumen.

Digamos a dockerque queremos crear un volumen con volumen create llamado datos-del-banco, en mi caso:

docker volumen create datos-del-banco

img2

Aparentemente todo salió bien, pero ¿cómo podemos saber cuáles son nuestros volúmenes? Bueno, podemos decirle a docker que los enumere con (ls)

docker volume ls

img3

En este comando, Docker nos muestra el nombre del volumen y su driver. Es decir, de qué manera debe montar el volumen. En mi caso, este es el driver local, el driver Docker predeterminado (built-in).

Bien, ya tenemos un volumen creado, pero ¿cómo podemos asignarlo a un container?

Hacer referencia a un volumen

Ya tenemos nuestro volumen creado, así que digámosle a dockerque ejecute un container container run, llamado db (--name db), en mi caso, con nuestro volumen (-v) datos-del-banco asociado con el directorio de docker. Información que queremos guardar, /var/lib/mysql, en este caso:

docker container run --name db -v datos-del-banco:/var/lib/mysql

De esta forma, le estamos diciendo a Docker crear un container y asociar el directorio /var/lib/mysql con el volumen datos-del-banco. Nuestra aplicación necesita una contraseña para iniciar sesión en la base de datos, así que digamos que este container, en su entorno (-e, environment), tendrá la contraseña alura:

docker container run --name db -v datos-del-banco:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=alura

Genial, ahora solo tenemos que hablar sobre la imagen que creará nuestro container, en nuestro caso, es la imagen de MySQL:

docker container run --name db -v datos-del-banco:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=alura mysql
img4

Ahora bien, nuestro container se está ejecutando, hagamos algunas pruebas para ver como funciona nuestro volumen. En otra pestaña en la terminal, digamos a dockerque queremos ejecutar algunos comandos en un container (container exec) con una terminal interactiva (-ti) en nuestro container bd con el interpretador `/bin/bash:`

docker container exec -it db /bin/bash

img5

Iniciemos sesión en mysql con el usuario (-u) root y la contraseña -p alura:

img6

Vamos a crear (create) una base de datos (database) para hacer nuestra prueba, en mi caso, llamaré a esta base de datos de la tienda:

img7

Salgamos de nuestro container, para eso podemos presionar las teclas CTRL + D hasta regresar a nuestra terminal, o usar el atajo Ctrl + P + Q. Le decimos a dockerque detenga nuestro container (container stop)db y luego le indicamos remover (container rm):

docker container stop db

docker container rm db

img8

Incluso habiendo retirado el container, su información debe haber sido guardada en el volumen. Vamos a crear un nuevo container, esta vez lo llamaré banco y haré referencia al mismo volumen datos-del-banco en el directorio /var/lib/mysql:

docker container run --name banco -v datos-del-banco:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=alura mysql
img9

Veamos si nuestra información fue guardada, accedamos a este nuevo container con el comando docker container exec -it bank /bin/bash y accedamos a mysql

docker container exec -it banco /bin/bash

mysql -u root -p

img10

Digamos a docker que muestre (show) las bases de datos existente (database):

show databases;

img11

Observa que nuestra base de datos de la tiendaaparece normalmente, es decir, pudimos mantener los datos incluso después de que se eliminó el contenedor

Para saber más

Podemos referenciar más de un container para el mismo volumen. Es decir, podemos tener dos o más containers haciendo referencia al mismo volumen.

Estos volúmenes se almacenan en el directorio /var/lib/docker/volumen/, sin embargo, también podemos crear volúmenes en otros directorios. Basta que al momento de la creación del container, pasemos como parámetro el camino del directorio en lugar del nombre del volumen

docker container run --name db -v /outro/diretorio/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql

Hemos visto cómo crear un volumen, pero ¿cómo podemos eliminarlo? Podemos decirle a docker que elimine el volumen (volumen rm):

docker volumen rm datos-del-banco

img12

Recordando que para remover un volumen, ningún container puede estar usándolo.

Docker ha ganado mucho espacio tanto en el escenario de desarrollo como de infraestructura, porque viene con el objetivo de facilitar el desarrollo de aplicaciones.

Aquí en Alura Latam contamos con un Curso de Docker en el cual aprenderás todo sobre qué es un container, cómo hacer que se comuniquen, además de aprender a crear tus propias imágenes para personalizar tus containers.

foto-yuri

Yuri Matheus

Yuri es desarrollador e instructor. Es estudiante de Sistemas de Información en la FIAP y se graduó como Técnico en Computación en el Senac SP. Su enfoque está en las plataformas Java y Python y otras áreas como la arquitectura de software y el aprendizaje automático. Yuri también trabaja como editor de contenido en el blog de Alura, donde escribe principalmente sobre Redes, Docker, Linux, Java y Python.

Este articulo fue adecuado para Alura Latam por: Jose Charris

Artículos de Tecnología > DevOps

En Alura encontrarás variados cursos sobre DevOps. ¡Comienza ahora!

Precios en:
USD
  • USD
  • BOB
  • CLP
  • COP
  • USD
  • PEN
  • MXN
  • UYU

Semestral

  • 270 cursos

    Cursos de Programación, Front End, Data Science, Innovación y Gestión.

  • Videos y actividades 100% en Español
  • Certificado de participación
  • Estudia las 24 horas, los 7 días de la semana
  • Foro y comunidad exclusiva para resolver tus dudas
  • Luri, la inteligencia artificial de Alura

    Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana

  • Acceso a todo el contenido de la plataforma por 6 meses
US$ 65.90
un solo pago de US$ 65.90
¡QUIERO EMPEZAR A ESTUDIAR!

Paga en moneda local en los siguientes países

Anual

  • 270 cursos

    Cursos de Programación, Front End, Data Science, Innovación y Gestión.

  • Videos y actividades 100% en Español
  • Certificado de participación
  • Estudia las 24 horas, los 7 días de la semana
  • Foro y comunidad exclusiva para resolver tus dudas
  • Luri, la inteligencia artificial de Alura

    Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana

  • Acceso a todo el contenido de la plataforma por 12 meses
US$ 99.90
un solo pago de US$ 99.90
¡QUIERO EMPEZAR A ESTUDIAR!

Paga en moneda local en los siguientes países

Acceso a todos
los cursos

Estudia las 24 horas,
dónde y cuándo quieras

Nuevos cursos
cada semana