Icono del sitio Ganda Software Factory

¿Cómo crear un contenedor PostgreSQL con Docker?

¿Cómo crear un contenedor PostgreSQL con Docker? (portada)
¿Cómo crear un contenedor PostgreSQL con Docker? (portada)

El uso de contenedores es una herramienta muy útli debido a su portabilidad y escalabilidad. Poder disponer de un contenedor de PostgreSQL con Docker es algo muy habitual en los desarrollos. A continuación te mostraré cómo crear y configurar una base de datos PostgreSQL en un contenedor Docker, paso a paso.

¿Qué es PostgreSQL?

PostgreSQL es una poderosa base de datos relacional de código abierto que se destaca por su robustez, flexibilidad y capacidad para manejar una amplia gama de aplicaciones y cargas de trabajo. Es ampliamente utilizado en la industria y cuenta con una activa comunidad de desarrolladores que contribuyen a su mejora continua.


¿Qué necesito para configurar un contenedor PostgreSQL con Docker?

Para poder crear y utilizar un contenedor de PostgreSQL con Docker, debes asegurarte de tener una versión de Docker instalada y actualizada en tu equipo. Si no es así, puedes descargar e instalar Docker para el sistema operativo que desees:

Si prefieres instalar Docker Desktop, puedes seguir las instrucciones de instalación de Docker Desktop para Mac (Inglés) o Docker Desktop para Windows (Inglés).

Puedes encontrar más información sobre Docker Desktop aquí: Introducción a Docker – Docker Desktop


Crear y configurar un contenedor Docker con PostgreSQL

Para crear un contenedor de Docker con una base de datos PostgreSQL y hacer una configuración básica del contenedor, basta con seguir los siguientes pasos:

Descargar la imagen PostgreSQL: Para ello basta con abrir el terminal y ejecutar el siguiente comando para descargar la imagen de PostgreSQL desde Docker Hub:

docker pull postgres

Crear y ejecutar el contenedor de PostgreSQL: Ejecuta el siguiente comando de Docker para crear y ejecutar el contenedor:

docker run --name <container_name> -e POSTGRES_USER=<db_user> POSTGRES_PASSWORD=<db_password> -d postgres

Ejemplo:

docker run --name my_container -e POSTGRES_USER=my_user POSTGRES_PASSWORD=my_password -d postgres

Verificar que se está ejecutando el contenedor de PostgreSQL: Para asegurarte de que el contenedor se está ejecutando correctamente, ejecuta el siguiente comando:

docker ps

Se debería mostrar el contenedor de PostgreSQL en la lista.

Configuración adicional del contenedor de PostgreSQL (opcional): Si deseas acceder a la base de datos PostgreSQL desde fuera del contenedor, puedes exponer el puerto de PostgreSQL (5432). Para ello, puedes añadir el argumento -p en el comando de creación del contenedor:

docker run --name <container_name> -e POSTGRES_USER=<db_user> POSTGRES_PASSWORD=<db_password> -p 5432:5432 -d postgres

Esto vinculará el puerto 5432 del contenedor con el puerto 5432 del host.

Ejemplo:

docker run --name my_container -e POSTGRES_USER=my_user POSTGRES_PASSWORD=my_password -p 5432:5432 -d postgres

Configurar y ejecutar un contenedor PostgreSQL con Docker Compose

Configurar un contenedor de Docker que contenta una base de datos PostgreSQL, utilizando Docker Compose, simplifica la gestión y configuración de contenedores en entornos de desarrollo y producción.

Para configurar un contenedor de PostgreSQL con Docker Compose basta con crear un archivo docker-compose.yml:

version: '3.8'

services:
  db:
    image: postgres
    container_name: <container_name>
    environment:
      POSTGRES_DB: <db_name>
      POSTGRES_USER: <db_user>
      POSTGRES_PASSWORD: <db_password>
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

Este archivo contiene las siguientes partes y configuraciones:

Una vez configurado, para arrancar el contenedor con la base de datos PostgreSQL basta con escribir el siguiente comando en el terminal:

docker-compose up

Si no se ejecuta el comando desde el mismo directorio donde está el archivo de configuración (docker-compose.yml) o si lo has guardado con otro nombre y no lo encuentra, puedes indiarlo en el propio comando con la opción -f:

docker-compose -f <compose_file> up

Si quieres ejecutar el contenedor de Docker en segundo plano, puedes añadir la opción -d al comando:

docker-compose -f <compose_file> up -d

Ejemplo:

docker-compose up -f docker-compose.yml -d

Para parar el contenedor de PostgreSQL sólo tienes que escribir este comando en la línea de comandos:

docker-compose down
docker-compose -f <compose_file> down

Ejemplo:

docker-compose -f docker-compose.yml down

Conectar a la base de datos de un contenedor PostgreSQL desde la shell

Una de las formas para acceder a la base de datos PostgreSQL en un contenedor de Docker es a través de la propia shell del contenedor.

Podemos acceder a la shell del contenedor de PostgreSQL:

docker exec -it <container_name> bash

Ejemplo:

docker exec -it my_container bash

Una vez conectados, ya podemos ejecutar el comando psql para conectar con la base de datos PostgreSQL:

psql -U <db_user> <db_name>

Ejemplo:

psql -U my_user my_database

Otra opción es conectar directamente a la base de datos del contenedor de PostgreSQL:

docker exec -it <container_name> psql -U <db_user> <db_name>

Ejemplo:

docker exec -it my_container psql -U my_user my_database

Configurar servicio Adminer para acceder a la base de datos del contenedor PostgreSQL

Para configurar Adminer y poder conectarnos a la base de datos PostgreSQL del contenedor a través de un interfaz web, sólo habrá que añadir un nuevo servicio dentro del archivo de configuración de Docker Compose.

Dentro del archivo docker-compose.yml hay que añadir el siguiente bloque de configuración del servicio:

    adminer:
        image: adminer
        restart: always
        ports:
            - 8080:8080

El archivo docker-compose.yml quedará de esta forma:

version: '3.8'

services:
  db:
    image: postgres
    container_name: <container_name>
    environment:
      POSTGRES_DB: <db_name>
      POSTGRES_USER: <db_user>
      POSTGRES_PASSWORD: <db_password>
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
  
  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

volumes:
  pgdata:

Una vez arrancado el contenedor, se pueden comprobar los servicios levantados:

docker ps

Podrá acceder con adminer a la base de datos PostgreSQL poniendo la siguiente url en su navegador:

http://localhost:8080

Para acceder, utiliza las credenciales configuradas:

Si los datos introducidos son correctos, se mostrará un página como esta:


Conectar con DBeaver a la base de datos del contenedor PostgreSQL

Una vez se configurado el contenedor de PostgreSQL para poder acceder directamente desde fuera a la base de datos, se puede utilizar una herramienta como DBeaver para conectarse a la base de datos.

Configura una nueva conexión PostgreSQL:

Es posible que necesites descargarte PostgreSQL JDBC Driver.

Si los datos introducidos son correctos, al hacer click en el botón «Probar conexión» debería aparecer una pantalla como esta:


Conclusión

Crear y configurar una base de datos PostgreSQL en un contenedor Docker es un proceso relativamente sencillo con grandes beneficios en términos de flexibilidad y portabilidad. Empieza a aprovechar las ventajas que ofrece esta tecnología en tus proyectos de desarrollo.

Referencias

Si deseas saber más sobre PostgreSQL y Docker, te recomiendo visitar las siguientes páginas web:


Salir de la versión móvil