Botón para abrir el Menú Botón para cerrar el Menú
Logo da empresa Alura
Iniciar Sesión Nuestros Planes
Formaciones Conoce a Luri
  • Programación _
  • Front End _
  • Data Science _
  • DevOps _
  • Innovación y Gestión _
Artículos de Tecnología > DevOps

Creando volúmenes con Docker

Yuri Matheus
Yuri Matheus
14/08/2022

Compartir

Este artículo hace parte de la

Formación Comenzando en DevOps

Mira este artículo:
  1. Creando nuestro volumen
  2. Hacer referencia a un volumen
  3. Para saber más

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 docker que 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 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

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

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 docker que 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

Yuri Matheus
Yuri Matheus

Yuri é desenvolvedor e instrutor. É estudante de Sistemas de Informação na FIAP e formado como Técnico em Informática no Senac SP. O seu foco é nas plataformas Java e Python e em outras áreas como Arquitetura de Software e Machine Learning. Yuri também atua como editor de conteúdo no blog da Alura, onde escreve, principalmente, sobre Redes, Docker, Linux, Java e Python.

Artículo Anterior
Conociendo Terraform
Siguiente Artículo
Empezando con Docker

Ver otros artículos sobre DevOps

Navegación

  • Planes
  • Instructores
  • Blog
  • Política de privacidad
  • Términos de uso
  • Sobre nosotros
  • Preguntas frecuentes

¡CONTÁCTANOS!

  • ¡Quiero entrar en contacto!

Blog

  • Programación
  • Data Science
  • Front End
  • Innovación y Gestión
  • DevOps

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

NOVEDADES Y LANZAMIENTOS

Aliados

  • Programa de aceleração Scale-Up Endeavor
  • En Alura somos unas de las Scale-Ups seleccionadas por Endeavor, programa de aceleración de las empresas que más crecen en el país.
  • Growth Academy 2021 do Google For Startups
  • Fuimos unas de las 7 startups seleccionadas por Google For Startups en participar del programa Growth Academy en 2021
Alura

Powered by

Caelum

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

Cursos

Cursos de Programación
Lógica de Programación | Java
Cursos de Front End
HTML y CSS | JavaScript | React
Cursos de Data Science
Data Science | Machine Learning | Excel | Base de Datos | Data Visualization | Estadística
Cursos de DevOps
Docker | Linux
Cursos de Innovación y Gestión
Transformación Ágil | Marketing Analytics

Alura

  • Educação em Tecnologia

    • logo fiap FIAP
    • logo casa do codigo Casa do Código
    • logo pm3 PM3 - Cursos de Produto
  • Mais Alura

    • logo alura start START BY Alura
    • logo alura lingua Alura Língua
    • logo alura para empresas Alura Para Empresas
    • logo alura latam Alura LATAM
  • Comunidade

    • logo tech guide Tech Guide
    • logo 7 days of code 7 days of code
    • logo Hipsters ponto Jobs Hipsters ponto Jobs
  • Podcasts

    • logo Hipster Network Hipster Network
    • logo Hipsters ponto Tech Hipsters ponto Tech
    • logo Dev sem fronteiras Dev sem Fronteiras
    • logo Like a Boss Like a Boss
    • logo IA Sob Controle IA Sob Controle
    • logo Mesa de Produto Mesa de Produto
    • logo Decode Decode
    • logo FIAPCast FIAPCast