Ejemplo de volumen en Docker

Unas semanas atrás te estuve contando cómo empezar con Docker en una serie de artículos. Esta es una práctica que suelo seguir bastante a menudo, cuando tengo que aprender alguna tecnología, y normalmente es porque tiendo a olvidarme de lo que voy aprendiendo si estoy con otras tantas cosas a la vez. Hoy he tenido que recordarme a mí misma algunos conceptos y quería dejarte aquí un script que me he montado para demostrar cómo funcionan los volúmenes de Docker, que ya te expliqué en este otro post.

#Create a docker container with a volume assigned
docker run -d -p 5432:5432 -v postgres-data:/var/lib/postgresql/data --name mypostgres postgres
#Access to that container
docker exec -it mypostgres sh
#Create a postgress db
createdb -U postgres mydb
#Access to my postgress db
psql -U postgres mydb
#Create a table
CREATE TABLE products (id int, name varchar(100));
#Create a product into my table
INSERT INTO products (id, name) VALUES (1, 'Wheel');
#Exit postgress client
\q
#Exit container
exit
#Delete mypostgres container
docker rm -f mypostgres
#Create a new container with the same volume attached
docker run -d -p 5432:5432 -v postgres-data:/var/lib/postgresql/data --name mypostgres2 postgres
#Access to my new container
docker exec -it mypostgres2 sh
#Access to the existing database
psql -U postgres mydb
#Launch a query
SELECT * from products;
#Exit postgress client
\q
#Exit container
exit
#Delete the second container
docker rm -f mypostgres2
#Delete the volume
docker volume rm postgres-data

Como ves, el script crea un contenedor con la imagen de postgres, el cual tiene asociado un volumen que se creará al vuelo cuando ejecutes el comando. Crea una base de datos, crea una tabla y añade un registro a la misma. Después elimino el contenedor pero esto no hace que el volumen desaparezca, lo cual es nuestro objetivo, que es donde está mi base de datos. Creo un segundo contenedor al cual asocio este volumen. Accedo de nuevo a la base de datos que se creo con del primer contenedor y hago una consulta para comprobar que los datos siguen ahí. Finalmente elimino el segundo contenedor y el volumen.

Nota: Desde hace bastante tiempo uso Visual Studio Code para todo. También lo uso para estos scripts y, haciendo uso del terminal integrado, voy lanzando cada una de las líneas del archivo de una forma bastante cómoda. Puedes configurar la ejecución del texto que tengas seleccionado a través de Preferences > Keyboard Shortcuts y asignar a la acción Terminal: Run Selected Text In Active Terminal una combinación de teclas.

Imagen de portada por kyohei ito.

¡Feliz fin de semana!

Si quieres seguir aprendiendo sobre contenedores, tienes una lista de vídeos en mi canal de YouTube 👇🏻

3 Comments

  1. Max Zavaleta agosto 18, 2019 at 6:15 am

    Hola,como haces para ejecutar en Visual Studio Code:?
    docker run -d
    –name webapp
    –mount type=bind,source=»/.web:/usr/share/nginx/html
    nginx:latest

    Reply
  2. Wilmar Ruiz enero 27, 2020 at 10:54 pm

    Hola, buenas tardes, soy nuevo en esto de contenedores (docker) necesito crear una conexión a postgresql desde Arcgispro , pero el postgres está en un contenedor docker que a su vez está en un servidor con linux Centos 7, al intentar crear la conexión me dice que no es posible y que verifique si el servidor acepta conexiones tcp/ip y que verifique usuario y pasword, pero todo está bien, pues con las mismas credenciales me conecto desde pgadmin, qué debo hacer

    Reply
  3. Aldo Luna Bueno julio 31, 2023 at 4:43 pm

    31/07/23

    Estoy aprendiendo bastante con esta serie de artículos sobre Docker. Sin embargo, me topé con un problema en el primer comando:


    #Create a docker container with a volume assigned
    docker run -d -p 5432:5432 -v postgres-data:/var/lib/postgresql/data --name mypostgres postgres

    No es capaz de crear un contenedor funcional. Luego descubrí que era porque actualmente para hacer un contenedor de Postgres en Docker es obligatorio pasar el parámetro POSTGRES_PASSWORD, así:


    #Create a docker container with a volume assigned
    docker run -d -p 5432:5432 -v postgres-data:/var/lib/postgresql/data -e POSTGRES_PASSWORD= --name mypostgres postgres

    Por si a alguien lo desconoce, que no pierda toda la mañana como yo buscando información sobre mensajes de error poco claros.

    Este detalle se recoge en la documentación oficial, en la sección de variables de entorno.

    Reply

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.