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.
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 docker
que queremos crear un volumen con volumen create
llamado datos-del-banco
, en mi caso:
docker volumen create datos-del-banco
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
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?
Ya tenemos nuestro volumen creado, así que digámosle a docker
que 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
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 docker
que 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
Iniciemos sesión en mysql con el usuario (-u) root
y la contraseña -p alura
:
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
:
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 docker
que detenga nuestro container (container stop
)db
y luego le indicamos remover (container rm
):
docker container stop db
docker container rm db
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
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
Digamos a docker
que muestre (show) las bases de datos existente (database):
show databases;
Observa que nuestra base de datos de la tienda
aparece normalmente, es decir, pudimos mantener los datos incluso después de que se eliminó el contenedor
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
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.
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
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
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
Paga en moneda local en los siguientes países
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
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
Paga en moneda local en los siguientes países
Puedes realizar el pago de tus planes en moneda local en los siguientes países:
País | |||||||
---|---|---|---|---|---|---|---|
Plan Semestral |
487.37
BOB |
69289.36
CLP |
307472.10
COP |
65.90
USD |
264.35
PEN |
1435.53
MXN |
2978.57
UYU |
Plan Anual |
738.82
BOB |
105038.04
CLP |
466107.17
COP |
99.90
USD |
400.74
PEN |
2176.17
MXN |
4515.32
UYU |
Acceso a todos
los cursos
Estudia las 24 horas,
dónde y cuándo quieras
Nuevos cursos
cada semana