Introducción
PostgreSQL es un sistema de base de datos relacional de clase empresarial y de código abierto compatible con consultas SQL y JSON. PostgreSQL cuenta con el respaldo de más de 20 años de desarrollo comunitario. Esto garantiza los más altos niveles de integridad, rendimiento y resiliencia. La aplicación más común de PostgreSQL es el almacén de datos para aplicaciones móviles, web y de análisis. PostgreSQL viene con una serie de características como replicación asincrónica, copia de seguridad en línea/en caliente, transacciones anidadas y muchas más características.
El método más común para instalar el servidor de base de datos PostgreSQL es desde los repositorios de paquetes del sistema operativo. El paquete .deb para sistemas basados en Debian y el paquete .rpm para sistemas basados en RHEL. El método alternativo para ejecutar PostgreSQL es dentro de un contenedor. Esto garantiza un estado del sistema limpio y el más alto nivel de portabilidad. En esta publicación de blog nos centramos en instalar y ejecutar el servidor de base de datos PostgreSQL en el contenedor Docker.
Instalación del motor de contenedor Docker
Siga los pasos proporcionados en nuestro artículo a continuación para configurar el entorno Docker en su sistema Linux. Los usuarios de Windows y macOS pueden utilizar herramientas basadas en GUI como Docker Desktop y Portainer.
Después de la instalación, confirme comprobando la versión publicada.
docker --version
Docker version 25.0.3, build 4debf41
Cree el archivo de redacción para PostgreSQL
Crear directorio de datos para la base de datos PostgreSQL
mkdir ~/postgresql && cd ~/postgresql
Cree el archivo Compose que definirá cómo crear el contenedor.
vim docker-compose.yml
A continuación definimos el contenido del archivo YAM. Las imágenes del contenedor en Docker Hub son las que usamos para crear una instancia en ejecución del servidor PostgreSQL. Los datos de la base de datos se almacenarán en el directorio local ./pgdata.
También creamos un contenedor que ejecuta la herramienta de administración basada en web Admirer PostgreSQL.
- PostgreSQL 16
services:
db:
image: postgres:16-bookworm
restart: always
environment:
POSTGRES_PASSWORD: StrongPassword01
volumes:
-./pgdata:/var/lib/postgresql/data
adminer:
image: adminer
restart: always
ports:
- 8080:8080
- PostgreSQL 15
services:
db:
image: postgres:15-bookworm
restart: always
environment:
POSTGRES_PASSWORD: StrongPassword01
volumes:
-./pgdata:/var/lib/postgresql/data
adminer:
image: adminer
restart: always
ports:
- 8080:8080
- PostgreSQL 14
services:
db:
image: postgres:14-bookworm
restart: always
environment:
POSTGRES_PASSWORD: StrongPassword01
volumes:
-./pgdata:/var/lib/postgresql/data
adminer:
image: adminer
restart: always
ports:
- 8080:8080
- PostgreSQL 13
services:
db:
image: postgres:13-bookworm
restart: always
environment:
POSTGRES_PASSWORD: StrongPassword01
volumes:
-./pgdata:/var/lib/postgresql/data
adminer:
image: adminer
restart: always
ports:
- 8080:8080
- PostgreSQL 12
services:
db:
image: postgres:12-bookworm
restart: always
environment:
POSTGRES_PASSWORD: StrongPassword01
volumes:
-./pgdata:/var/lib/postgresql/data
adminer:
image: adminer
restart: always
ports:
- 8080:8080
- PostgreSQL 11
services:
db:
image: postgres:11-bookworm
restart: always
environment:
POSTGRES_PASSWORD: StrongPassword01
volumes:
-./pgdata:/var/lib/postgresql/data
adminer:
image: adminer
restart: always
ports:
- 8080:8080
Ejecutando el servidor PostgreSQL en el contenedor
A continuación iniciamos el contenedor ejecutando los comandos de composición. La opción -d
lo mantiene ejecutándose en modo independiente (en segundo plano) sin una sesión interactiva activa.
$ docker compose up -d
[+] Running 22/22
✔ adminer 7 layers [⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 11.0s
✔ 09e2bc8a597c Pull complete 0.9s
✔ 092a59d5d649 Pull complete 0.7s
✔ e4dca1b56763 Pull complete 0.4s
✔ 378feffe5197 Pull complete 0.8s
✔ 3bd4de3ac847 Pull complete 1.1s
✔ 44d5566ceca7 Pull complete 1.1s
✔ 3dafa7b9d4fc Pull complete 1.3s
✔ db 13 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 13.5s
✔ 1f7ce2fa46ab Pull complete 1.8s
✔ e75b44f17b07 Pull complete 1.6s
✔ d601ea737a84 Pull complete 2.9s
✔ 0f4fcee3f93d Pull complete 2.1s
✔ 428f7aff61bc Pull complete 2.6s
✔ 7787ed5ab4f3 Pull complete 3.0s
✔ 3d2b66cffddc Pull complete 3.3s
✔ e7dee0dd847b Pull complete 3.3s
✔ a24060178bac Pull complete 5.8s
✔ 0eb290c85bd2 Pull complete 4.2s
✔ 88b80c4fe471 Pull complete 3.9s
✔ eac33d14a11e Pull complete 4.4s
✔ d40b681a9814 Pull complete 4.9s
[+] Running 2/3
⠋ Network postgresql_default Created 1.0s
✔ Container postgresql-adminer-1 Started 0.8s
✔ Container postgresql-db-1 Started 0.7s
Confirme el estado del contenedor ejecutando compose docker con el indicador ps
.
docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
postgresql-adminer-1 adminer "entrypoint.sh php -…" adminer 5 minutes ago Up 5 minutes 0.0.0.0:8080->8080/tcp,:::8080->8080/tcp
postgresql-db-1 postgres:11-bookworm "docker-entrypoint.s…" db 5 minutes ago Up 5 minutes 5432/tcp
Para acceder al shell del contenedor, ejecute;
docker exec -ti postgresql-db-1 bash
root@a79ad82fd433:/#
La versión del servidor PostgreSQL se puede verificar usando el comando psql -V
.
psql -V
psql (PostgreSQL) 11.22 (Debian 11.22-1.pgdg120+1)
Desde allí puede iniciar psql
, que es una interfaz basada en terminal para PostgreSQL.
su - postgres
psql (11.22 (Debian 11.22-1.pgdg120+1))
Type "help" for help.
postgres=#
Podemos crear un usuario de prueba y una base de datos;
- Usuario de la base de datos: 1 de noviembre
- Nombre de la base de datos: mi sitio
- Contraseña: Str0ngPassw0rd
CREATE USER nov1 WITH PASSWORD 'Str0ngPassw0rd';
CREATE ROLE
CREATE DATABASE mywebsite WITH OWNER = 'nov1';
CREATE DATABASE
Para salir de PostgreSQL y del shell del contenedor, utilice el comando exit
tres veces.
exit
logout
Los datos de la base de datos se almacenarán en ./pgdata como se define en el archivo de composición.
ls -1 pgdata/
base
global
pg_commit_ts
pg_dynshmem
pg_hba.conf
pg_ident.conf
pg_logical
pg_multixact
pg_notify
pg_replslot
pg_serial
pg_snapshots
pg_stat
pg_stat_tmp
pg_subtrans
pg_tblspc
pg_twophase
PG_VERSION
pg_wal
pg_xact
postgresql.auto.conf
postgresql.conf
postmaster.opts
postmaster.pid
Acceso al panel de admiradores
Abra su navegador web en http://ServerIP:8080.
Inicie sesión como usuario, base de datos y contraseña.
Obtendrá un tablero. Desde aquí podrás gestionar tu base de datos: crear tablas, funciones, vistas, importar datos, etc.
Conclusión
Al ejecutar la base de datos PostgreSQL en un contenedor apreciará la eficiencia de su administración. Otros beneficios de la contenedorización van desde la portabilidad hasta el aislamiento y la escalabilidad. Puede levantar la imagen del contenedor con datos y ejecutarla en un host separado en segundos. Decidir si adoptar una base de datos en contenedores depende de sus preferencias de uso.