PostgreSQL en Docker para pruebas/desarrollo
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.
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 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
- Para este ejemplo es
- 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
- En el caso
- 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
- Aquí le decimos que la contraseña de nuestra instancia de PostgreSQL va a ser
- 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
- Aquí usamos
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!!