Ir al contenido

Ejecutando PostgreSQL en un Contenedor Docker

DevOps Postgres Docker Database
Autor
Harpal Singh
Software Engineer
Traducido por
Namastecode
Tabla de contenido

1. Introducción

En este tutorial, aprenderemos cómo ejecutar PostgreSQL en un contenedor Docker. Esta técnica facilita la configuración de PostgreSQL. Por lo tanto, es una solución ideal para entornos de desarrollo y pruebas.

Comencemos.

2. Requisitos Previos

Primero, asegurémonos de que Docker esté instalado y en funcionamiento en nuestra máquina. Si no es así, sigamos la guía de instalación oficial de Docker para configurarlo.

A continuación, descarguemos la imagen de Docker de PostgreSQL desde Docker Hub:

docker pull postgres:latest

Este comando obtiene la última versión de la imagen de PostgreSQL. Alternativamente, podemos especificar una versión específica reemplazando latest con la etiqueta deseada (por ejemplo, 13.2). Encontramos todas las etiquetas disponibles en la página de PostgreSQL en Docker Hub.

3. Iniciando un Contenedor de PostgreSQL

Para iniciar un contenedor de PostgreSQL, ejecutemos el siguiente comando:

docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres

Desglosemos este comando:

  • –name my-postgres: Asigna un nombre al contenedor.
  • -e POSTGRES_PASSWORD=mysecretpassword: Establece la contraseña para el usuario postgres por defecto.
  • -d: Ejecuta el contenedor en modo desacoplado. Lo que significa que el contenedor se inicia en segundo plano.
  • postgres: Especifica la imagen de Docker a utilizar. En este caso, utilizaremos la última versión.

4. Accediendo a la Instancia de PostgreSQL

Ahora, deberíamos tener una instancia de PostgreSQL dentro de un contenedor llamado my-postgres. Por lo tanto, no podemos usar el comando psql directamente desde nuestra terminal, ya que no estará disponible. En su lugar, podemos usar el comando docker exec para acceder a la instancia de PostgreSQL dentro del contenedor:

docker exec -it my-postgres psql -U postgres

Ahora, deberíamos tener un shell que podamos usar para interactuar con la base de datos. Normalmente no accedemos a la base de datos directamente. Pero, en este momento, es la única forma de acceder a la base de datos.

Configuremos el contenedor para que exponga la base de datos al host.

5. Configuración del Contenedor de PostgreSQL

Para conectarnos desde la máquina anfitriona, necesitamos configurar el contenedor para que exponga el puerto de la base de datos. Para hacer esto, podemos usar la opción –publish o -p para mapear el puerto del contenedor a un puerto del anfitrión:

docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres

Ahora, tendremos acceso a la base de datos desde la máquina host si nos conectamos a localhost:5432. Además, establecimos la contraseña para el usuario postgres para que podamos usar un cliente de base de datos, como DBeaver, para conectarnos a la base de datos.

Recordar estos comandos puede ser difícil. En su lugar, podríamos utilizar un archivo docker-compose.yml para definir nuestro contenedor. Al hacerlo, también podemos compartir la configuración con nuestro equipo.

Detengámonos y eliminemos el contenedor actual:

docker stop my-postgres
docker rm my-postgres

Ahora, podemos crear nuestro archivo docker-compose.yml.

6. Usando Docker Compose

Un docker-compose es simplemente una descripción en un archivo de los contenedores que queremos ejecutar en formato YAML.
Creemos un archivo docker-compose.yml para el contenedor de Postgresql:

version: '3.1'

services:
  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: mysecretpassword
    ports:
      - 5432:5432

Arriba, estamos definiendo un servicio llamado db con configuraciones similares a las anteriores. La única novedad aquí es la opción de reinicio. En resumen, le decimos a Docker que reinicie siempre el contenedor si se detiene, por ejemplo, debido a un error o un reinicio del sistema.

Ejecutemos el contenedor utilizando el comando docker-compose desde el mismo directorio donde guardamos este archivo:

docker-compose up -d

Una vez más, utilizamos la opción -d para ejecutar el contenedor en modo separado.

Para detener y eliminar el contenedor, podemos usar el comando docker-compose down:

docker-compose down

Ahora, sabemos cómo crear una base de datos local fácilmente utilizando Docker. Pero recuerda, esto no es adecuado para producción. Necesitamos considerar otras cosas para nuestro entorno de producción.

Si tenemos la oportunidad, deberíamos optar por un servicio de base de datos administrado—por ejemplo, Amazon RDS, Google Cloud SQL o Azure Database for PostgreSQL.

7. Persistiendo los Datos del Contenedor de PostgreSQL

Con la configuración actual, si eliminamos el contenedor de PostgreSQL, también perdemos los datos que contiene. Para persistir datos, podemos montar una carpeta local en el contenedor utilizando la opción –volume o -v. Por ejemplo:

docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -v /path/to/local/folder:/var/lib/postgresql/data -d postgres

En resumen, los datos de PostgreSQL usarán la carpeta path/to/local/folder para su contenido. Así que, si eliminamos el contenedor y lo recreamos con el mismo volumen, los datos seguirán ahí.

8. Conclusión

En este tutorial, aprendimos cómo ejecutar y configurar PostgreSQL en un contenedor Docker. Primero mostramos un comando rápido para tener una instancia en funcionamiento de la base de datos. Luego, utilizamos un archivo docker-compose.yml para definir el contenedor. Finalmente, discutimos la persistencia de los datos montando una carpeta local en el contenedor.