Holas, hoy les dejo con un post sobre como correr PostgreSQL dentro de un contenedor docker. Docker permite correr un amplio rango de programas en contenedores aislados del sistema principal, lo cual tiene muchas ventajas, entre ellas la seguridad, pero no les voy a hablar de lo que es o no es docker, sino de como usarlo para tener una instancia de PostgreSQL para posibles pruebas o para desarrollo en un ambiente local.

Obteniendo PostgreSQL

Lo primero es obtener PostgreSQL para tenerlo en nuestro entorno docker, para ello vamos a buscarlo en: Docker Hub, en este caso en concreto podemos utilizar la versión oficial que se encuentra en: https://hub.docker.com/_/postgres.

Docker Hub PostgreSQL

En la página mencionada podemos encontrar en la parte derecha un comando que es el que nos permitirá obtener PostgreSQL en nuestro equipo, dicho comando es:

docker pull postgres

Esto descargará la imagen de PostgreSQL en nuestro equipo, pero descargará la ultima versión

Si queremos descargar una versión específica debemos buscarla en la sección de Tags y escoger la versión que necesitemos

Docker Hub PostgreSQL Tags

docker pull postgres:{version}

En el caso de este ejemplo se ha optado por la versión 10.10 con Alpine Linux, para lo cual ejecutaremos el siguiente comando:

docker pull postgres:10.10-alpine

Esto empezará a clonar la imagen de PostgreSQL en nuestro sistema.

Levantar PostgreSQL

Para levantar una instancia de PostgreSQl debemos hacerlo de la siguiente manera

docker run --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=1234abcd -d postgres:10.10-alpine

No se asusten si el comando anterior parece un pergamino difícil de entender, ahora paso a explicarlo.

  • docker run permite correr una imagen de docker en un contenedor
  • El parámetro --name nos permite poner un nombre a ese contenedor
    • Para este ejemplo es postgres
  • El parámetro -p nos permite mapear el puerto del contenedor a un puerto de nuestra máquina siempre en la forma {puerto-maquina-host}:{puerto-contenedor}
    • En el caso -p 5432:5432 le decimos que el puerto 5432 de nuestra máquina va a mapear al puerto 5432 del contenedor
  • El parámetro -e permite poner una variable de entorno al contenedor
    • Aquí le decimos que la contraseña de nuestra instancia de PostgreSQL va a ser 1234abcd
  • El parámetro -d significa detach, es decir que después de construir nuestro contenedor y levantarlo el comando suelta el prompt de la consola para que podamos usarla en cualquier otra tarea
  • Finalmente le debemos proveer el nombre de la imagen que obtuvimos con docker pull
    • Aquí usamos postgres:10.10-alpine

Todo esto levantará nuestro docker con el usuario ‘postgres’ y la base de datos ‘postgres’ por defecto

Verificar los contenedores

Desde nuestra consola de comandos podemos verificar que el contenedor de PostgreSQL se encuentre levantado y corriendo, para ello necesitamos correr el siguiente comando:

docker ps

La respuesta será algo similar a lo siguiente:

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                      NAMES
077b1625f656        postgres:10.10-alpine   "docker-entrypoint.s…"   3 days ago         Up 2 hours          0.0.0.0:5432->5432     postgres

Detener e Iniciar nuestro contenedor

Si queremos detener el contenedor que hemos creado podemos utilizar el comando

docker stop {nombre-contenedor}

En nuestro ejemplo es docker stop postgres

Esto no borrará los datos, puesto que los mismos se quedan guardados en un volumen asociado a ese contenedor y al momento de iniciarlo nuevamente nuestros datos estarán ahí.

Para Iniciar nuevamente nuestro contenedor ejecutamos:

docker start {nombre=contenedor}

En nuestro ejemplo es docker start postgres

Cabe recalcar que docker run crea un nuevo contenedor, así que si vuelven a correr el comando cambiando el nombre del contenedor, se creará un contenedor nuevo, con un volume de datos nuevo y por lo tanto será una nueva instancia de PostgreSQL, así que estaríamos frente una nueva Base de Datos completamente vacía

Acceder al contenedor

Como último paso, pero no menos importante veremos cómo acceder a la línea de comandos de nuestro contenedor, así que ejecutando el siguiente comando:

docker exec -it {nombre-contenedor} {tipo-de-shell}
  • docker exec nos permite ejecutar un comando en nuestor contenedor
  • El parámetro -i significa interactivo, sirve para mantener la sesión abierta
  • El parámetro -t significa Pseudo-TTY
  • Proveemos el nombre del contenedor
  • Proveemos el tipo de shell que vamos a usar, los mas comunes son sh, bash, zsh
docker exec -it postgres bash

Para poder acceder a la línea de comandos de un contenedor necesitamos que este corriendo, si el contenedor está detenido por algún motivo no podremos acceder al mismo y nos dará error si lo intentamos.

Al hacer esto podemos acceder a la línea de comandos de nuestro contenedor de PostgreSQL y podremos utilizar sus herramientas, tales como psql -u {usuario} -h {host} con lo cual podemos crear usuarios, bases de datos, permisos, etc. Todo para el contenedor que hemos creado previamente.

Eso es todo por hoy!!
Happy Hacking!!

Última modificación: 16/02/2021

Autor