¿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
  • <container_name> es el nombre que quieres darle al contenedor.
  • <db_user> es el nombre del usuario para conectar a la base de datos. Si no se indica esta variable de entorno, por defecto el usuario será postgres
  • <db_password> es la contraseña que queremos establecer para el usuario de base de datos.

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:
  • <container_name> es el nombre que quieres darle al contenedor.
  • <db_user> es el nombre del usuario para conectar a la base de datos. Si no se indica esta variable de entorno, por defecto el usuario será postgres
  • <db_password> es la contraseña que queremos establecer para el usuario de base de datos.

Este archivo contiene las siguientes partes y configuraciones:

  • version: Este campo sirve para indicar la versión de Docker Compose a utilizar.
  • services: Esto agrupa los diferentes servicios que van a ejecutarse dentro del contenedor. En este caso, se define un servicio db para el PostgreSQL.
  • image: Aquí se especifica la imagen de PostgreSQL a utilizar. En este caso, se utiliza la imagen oficial de PostgreSQL desde Docker Hub.
  • container_name: En este campo se indica el nombre personalizado que se quiere dar al contenedor (Ejemplo: my_container).
  • environment: Esto agrupa las variables de entorno necesarias para configurar el contenedor. En este caso se definen las variables necesarias para configurar la base de datos PostgreSQL:
    • POSTGRES_DB: Aquí se indica el nombre de la base de datos a crear (Ejemplo: my_database).
    • POSTGRES_USER: Aquí se indica el nombre del usuario que tendrá acceso a la base de datos (Ejemplo: my_user). Si no se define esta variable, el usuario será postgres.
    • POSTGRES_PASSWORD: Esta será la contraseña con la que acceder a la base de datos (Ejemplo: my_password).
  • ports: En este campo se mapea el puerto 5432 del contenedor con el puerto 5432 del host. Esto nos permite acceder a la base de datos desde fuera del contenedor.
  • volumes: Aquí se indican los volúmenes para persistir los datos. En este caso se indica el volumen pgdata para los datos de la base de datos PostgreSQL. Esto es importante para que los datos no se pierdan cuando paremos o eliminemos el contenedor de PostgreSQL.

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:

  • Motor de base de datos: PostgreSQL
  • Servidor: db (nombre del servicio configurado en el archivo docker-compose.yml)
  • Username: El valor indicado en <db_user> (Ejemplo: my_user)
  • Password: El valor indicado en <db_password> (Ejemplo: my_password)

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:

  • Servidor / Hostname: 127.0.0.1
  • Puerto / Port: 5432
  • Usuario / Username: El valor indicado en <db_user> (Ejemplo: my_user)
  • Contraseña / Password: El valor indicado en <db_password> (Ejemplo: my_password)

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:


Comentarios
Este sitio esta protegido por reCAPTCHA y laPolítica de privacidady losTérminos del servicio de Googlese aplican.

El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.