Cómo ejecutar el servidor PostgreSQL en el contenedor Docker

27 feb 2024 4 min di lettura
Cómo ejecutar el servidor PostgreSQL en el contenedor Docker
Indice dei contenuti

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.

Ezoico
$ 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.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.