Instalar postgresql en docker
En este post vamos a trabajar en la instalación de postgresql sobre una imagen de docker
Acerca del proyecto
En este post vamos a trabajar en la instalación de postgresql sobre una imagen de docker, en post pasados se a instalado postgresql en Windows y Linux, como van a encontrar en el conocimiento previo de este post, pero en este caso vamos a hacer la instalación y la configuración desde una imagen docker ya creada para generar nuestra base de datos de forma fácil sin tener que instalar el motor completamente.
Se ha creado un paso a paso desde cómo descargar la imagen necesaria con la versión que necesitemos, crear un volumen para poder almacenar los datos y las base de datos, por último generaremos el usuario y la contraseña de administrador para acceder.
Ya por último vamos a ver cómo acceder a la consola de postgres desde el contenedor que se está ejecutando con la imagen de postresql.
Conocimiento previo
Para realizar este proyecto se requiere conocimiento previo de los siguientes temas, si aun no has trabajado con lo que se menciona en la siguiente tabla, allí están los links a los post para que puedas dar un repaso adicional o puedas recordar el conocimiento necesario para poder realizar este proyecto.
Proyecto | Descripción |
---|---|
Introducción postgresql | En este post damos la introducción, definición y los temas que trabajaremos con postgresql, ademas están los links de los post de este tema. |
Docker build | En este post explicamos como crear una imagen a partir de un archivo dockerfile |
Introducción a docker | Damos la introducción, definición y los temas principales de docker para poder entender entrono de trabajo con contenedores. |
Docker comandos básicos | Explicamos los comandos que vamos a usar en este post, ademas damos ejemplos a detalle |
dockerfile | Realizamos la explicación de archivo con que creamos las imágenes de docker |
Volúmenes en docker | Realizamos la explicación de los volúmenes en docker, como crearlos, usarlos, leer y escribir datos. |
Entrono y programas a instalar
Para este post usamos los siguientes programas:
- Microsoft Windows [Versión 10.0.19043.1110]
- Docker version 20.10.7, build f0df350
- Imagen oficial de postgres 12.6 en docker hub
- Visual studio code, pero puede usar cualquier editor de texto
Imagen de postgresql
Para este caso usare la imagen de postgres que ya esta creada, depurada, verificada y lista para funcionar, esta la vamos a encontrar en docker hub, como postgres, en este proyecto vamos a usar la versión 12.6, aunque a la fecha de este post ya esta la versión 13 disponible, estoy trabajando con un proyecto que requiere esta versión; igual me sirve para explicar como seleccionar la versión que necesiten.
Docker compose
Compose es una herramienta para definir y ejecutar aplicaciones Docker de varios contenedores. Con Compose, usa un archivo YAML para configurar los servicios de su aplicación. Luego, con un solo comando, crea e inicia todos los servicios desde su configuración.[1]
El siguiente es un ejemplo, pero detallaremos mas adelante cuan ejecutemos el código.
docker-compose up
Crear el proyecto de postgresql con docker
Para crear el proyecto de usar postgresql con docker los explicare paso a paso lo mas detallado posible, para que se pueda entender correctamente.
Directorio ubicación
Vamos a crear una carpeta donde vamos a adicionar él o los archivos de este proyecto, recomiendo que sea una ruta fácil de encontrar y llegar desde la consola de comandos (CMD) ya que la ejecución de docker compose se ejecuta por este medio.
En mi caso creare el directorio o carpeta "docker-postges" en la ubicación C:\code\codigoelectronica\docker-postgres
, pero aclaro que pueden usar cualquier ubicación.
Crear archivo docker-compose
Después de tener la carpeta procedemos a crear el archivo principal con el que vamos a trabajar, este archivo lo vamos a nombrar como "docker-compose.yml", debe ser de esta forma ya que el mismo comando lo reconoce con este nombre, se puede nombrar de otra forma pero por el momento no lo trabajaremos de ese modo.
C:\code\codigoelectronica\docker-postgres
----docker-compose.yml
docker-compose.yml
Ahora explicaremos el archivo yml paso a paso, el cual si lo copiamos tal cual deberá funcionar sin ningún problema, creando la imagen y ejecutándola en un contenedor:
Nota: muy importante, los archivos yml y yaml son estrictos con los espacios y la tabulación, cuando cree el archivo fíjese que la tabulación sea a dos puntos o dos espacios.
# Trabajaremos con la versión 3 docker
version: '3'
# Creamos los servicios
services:
mydb: # Creamos el servicios mydb para identificar la imagen
image: postgres:12.6 # Usamos la imagen postgresql en la versión 12
volumes:
- postgresdb:/var/lib/postgresql # Crearemos un volumen para almacenar los datos de la db
ports:
- "5432:5432" # Habilitamos el puerto 5432 para acceder a la db
environment: # Creamos las variables del usuario contraseña y base de datos
POSTGRES_USER: admin # que se crea cuando inicia docker
POSTGRES_PASSWORD: admin
POSTGRES_DB: testdb
volumes: # Creamos y asignamos el volumen de docker
postgresdb:
driver: local
Antes de ejecutar el comando para crear la imagen debemos tener en cuenta lo siguiente:
- Se debe crear el volumen con el comando
docker volume create postgresdb
, sin el volumen genera un error al ejecutarse. - En la selección de la versión de la imagen se observa que usamos la 12.6, pero podemos también la que necesitemos en nuestro proyecto como la 13 o latest que seria la ultima estable para trabajar.
Ejecutar el comando docker-compose
Después de tener el archivo docker-compose.yml listo procedemos a generar la images y crear el contenedor que va a iniciar y ejecutar postgresql, para elló usamos el comando docker-compose
el cual se encargara de crear la imagen y correrla en un contenedor.
Para ejecutar docker compose abrimos la terminal de comandos (CMD) y nos ubicamos en el directorio donde esta el archivo con el mismo nombre, donde vamos a escribir el siguiente comando:
c:\code\codigoelectronica\docker-postgres>docker-compose up -d
Ahora vamos a explicar la respuesta del comando, primero va a descargar la imagen de postgesql a nustra maquina local
Pulling mydb (postgres:12.6)...
12.6: Pulling from library/postgres
69692152171a: Pull complete
a31b993d5cc6: Pull complete
...
44248978f8ed: Pull complete
c74c1c4f5ca3: Pull complete
83addcc511dd: Pull complete
478b899f4ef8: Pull complete
Digest: sha256:26ce5e265fbbf120b4a89a9b26770bad757a7dfa4f329038d93770edbe5aae00
Status: Downloaded newer image for postgres:12.6
Luego procederá a crear el contenedor con la imagen postgresql descargada, liego va a iniciar la base de datos donde emprezara a cargar los archivos necesarios, su configuración, habilitara los puertos de comunicación y cargara las db que tenga almacenadas
Creating docker-postgres_mydb_1 ... done
Attaching to docker-postgres_mydb_1
mydb_1 | The files belonging to this database system will be owned by user "postgres".
mydb_1 | This user must also own the server process.
Cuando se finalice la ejecución, al finalizar mostrara los últimos logs donde indicara en que puesto esta disponible para realizar la comunicación y el mensaje de que la base de datos esta disponible para usar.
mydb_1 | 2021-08-22 15:47:18.568 UTC [1] LOG: starting PostgreSQL 12.6 (Debian 12.6-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
mydb_1 | 2021-08-22 15:47:18.568 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
mydb_1 | 2021-08-22 15:47:18.568 UTC [1] LOG: listening on IPv6 address "::", port 5432
mydb_1 | 2021-08-22 15:47:18.571 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
mydb_1 | 2021-08-22 15:47:18.579 UTC [76] LOG: database system was shut down at 2021-08-22 15:47:18 UTC
mydb_1 | 2021-08-22 15:47:18.582 UTC [1] LOG: database system is ready to accept connections
Acceder a la consola postgresql desde docker
Este es un paso opcional ya que si queremos comprobar la versión de postgresql instalada o trabajar desde la consola de postgres, para ello devemos identificar el contenedor en donde se esta ejecutando postgresql, veamos los pasos:
Nota: para mas detalle de los comandos que vamos a trabajar en el post docker comandos básicos ls explicamos a detalle.
Aunque es opcional con el siguiente comando podemos ver que versión de la imagen de postgres se ha descargado.
c:\code\codigoelectronica\docker-postgres>docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
postgres 12.6 145bb83bd157 3 months ago 314MB
Ahora vamos a identificar el contenedor donde se esta ejecutando postgresql, ejecute el siguiente comando donde mostrara la información del id del contenedor, la imagen que usa y datos adicionales.
c:\code\codigoelectronica\docker-postgres>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
915a33cf511f postgres:12.6 "docker-entrypoint.s…" 29 minutes ago Up About a minute 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp docker-postgres_mydb_1
Con el id del contenedor podemos adjuntamos o ingresar a el para que nos muestre su terminal de comandos, es decir la terminal linux de la imagen postgresql.
c:\code\codigoelectronica\docker-postgres>docker exec -it 915a33cf511f bash
root@915a33cf511f:/#
Por ultimo en la terminal linux ingresamos lo siguiente:
root@915a33cf511f:/# psql -U admin -W -h localhost testdb
Password:
psql (12.6 (Debian 12.6-1.pgdg100+1))
Type "help" for help.
testdb=#
- psql: es la instrucción que nos permite ingresar a la terminal de postgresql
- -U admin: es el usuario que registramos en la variable "POSTGRES_USER" del archivo docker-compose-yml
- -W: es la bandera para que nos solicite la contraseña de acceso, creada en la variable "POSTGRES_PASSWORD"
- -h localhost: en este caso la maquina local, que seria el contenedor docker que se esta ejecutando
- testdb: nombre de la base de datos a la que vamos a ingresar
Referencias
[1] docker compose https://docs.docker.com/compose/, Consultado Agosto 2021
Comentario
29 October 2022 08:38