Cómo desplegar un contenedor e imagen Docker con el motor de base de datos PostgreSQL, con persistencia (los datos quedarán almacenados) y con acceso externo (se podrá acceder a la base de datos desde equipos externos al anfitrión Docker. Desplegaremos también pgAdmin para administración web del servidor PostgreSQL.
- Requisitos para desplegar contenedor Docker con PostgreSQL.
- Desplegar contenedor con PostgreSQL y pgAdmin.
- Acceso a pgAdmin vía web, creación de tabla para probar persistencia.
Requisitos para desplegar contenedor Docker con PostgreSQL
Necesitaremos disponer de un equipo con Docker Desktop, bien en Windows:
O bien en Linux:
Desplegar contenedor con PostgreSQL y pgAdmin
Crearemos una carpeta y, dentro de ella, crearemos un fichero llamado compose.yml, con el siguiente contenido:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
services: bdpostgre: image: postgres restart: always shm_size: 128mb environment: - POSTGRES_USER=bdproyectoa - POSTGRES_PASSWORD=contraseña - POSTGRES_PORT=5432 - POSTGRES_HOST=srvpostgre ports: - 5432:5432 volumes: - volbd:/var/lib/postgresql pgadmin: image: dpage/pgadmin4:latest environment: - PGADMIN_DEFAULT_EMAIL=correo@correo.com - PGADMIN_DEFAULT_PASSWORD=contraseña - PGADMIN_LISTEN_PORT=80 ports: - 8081:80 volumes: - volpgadmin:/var/lib/pgadmin depends_on: - bdpostgre volumes: volbd: external: false volpgadmin: external: false |
Para desplegar los contenedores, en la misma carpeta donde tengamos el fichero compose.yml, ejecutaremos el comando:
1 |
docker compose up -d |
Tras el despliegue, podremos comprobar que se han iniciado las imágenes con el comando:
1 |
docker ps |
Acceso a pgAdmin vía web, creación de tabla para probar persistencia
En el fichero compose.yml anterior hemos desplegado dos imágenes, una con el motor de base de datos PostgreSQL y la otra con el gestor web pgAdmin. Para acceder a pgAdmin, desde cuaquier equipo de la red, introduciremos en la URL del navegador la IP del equipo anfitrión con Docker Desktop y el puerto que hemos indicado en el fichero compose.yml, en este caso con el puerto 8081:
http://192.168.1.10:8081
En nuestro caso el equipo anfitrión tiene la IP 192.168.1.10. Si tenemos un cortafuegos activado en el equipo, tendremos que abrir el puerto correspondiente.
Introduciremos el usuario y la contraseña establecidas en el fichero compose.yml, en las líneas:
1 2 |
- PGADMIN_DEFAULT_EMAIL=correo@correo.com - PGADMIN_DEFAULT_PASSWORD=contraseña |
Crearemos un acceso al servidor PostgreSQL, pulsando con el botón derecho del ratón sobre «Servers» y eligiendo «Register» – «Servidor…»:
En la pestaña «General», introduciremos un nombre para la conexión, por ejemplo «srvpostgre»:
En la pestaña «Conexión» introduciremos los siguientes datos (especificados en el fichero compose.yml):
- Nombre/Dirección de servidor: en nuestro caso «bdpostgre».
- Puerto: en nuestro caso 5432.
- Base de datos de mantenimiento: la de defecto «postgres».
- Nombre de usuario: en nuestro caso «bdproyectoa».
- Contraseña: la contraseña indicada en el fichero compose.yml.
- ¿Salvar contraseña?: si no queremos que nos pida la contraseña cada vez que nos conectemos, activaremos esta opción.
Conectaremos con el servidor PostgreSQL del contenedor Docker y ya podremos realizar cualquier operación. Por ejemplo, vamos a crear una tabla llamada «facturas» para probar la persistencia de datos. Para ello, desplegaremos «srvpostgre» – «Bases de Datos» – «bdproyectoa» – «Esquemas» – «public». Pulsaremos con el botón derecho del ratón sobre «Tablas» y elegiremos «Crear» – «Tabla…»:
La llamaremos «facturas»:
Le añadiremos los campos:
- numero: de tipo «serial».
- codigo_cliente: de tipo «integer».
- importe: de tipo «money».
- fecha: de tipo «date».
La sentencia SQL para crear la tabla en PostgreSQL sería:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
CREATE TABLE public.facturas ( numero serial NOT NULL, codigo_cliente integer, importe money, fecha date, PRIMARY KEY (numero) ); ALTER TABLE IF EXISTS public.facturas OWNER to bdproyectoa; CREATE SEQUENCE IF NOT EXISTS public.facturas_numero_seq INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1; ALTER SEQUENCE public.facturas_numero_seq OWNED BY public.facturas.numero; ALTER SEQUENCE public.facturas_numero_seq OWNER TO bdproyectoa; |
Una vez creada la tabla «facturas», le insertaremos varios registros para probar la persistencia. Podemos hacerlo ejecutando el SQL:
1 2 3 4 |
INSERT INTO public.facturas ( codigo_cliente, importe, fecha) VALUES ( '50'::integer, '1300'::money, '2024/08/19'::date) returning numero; |
O bien desde la propia consola web de pgAdmin:
Si detenemos Docker Desktop o bien si reiniciamos el equipo anfitrión con Docker Desktop, comprobaremos que los contenedores se inician automáticamente y los datos siguen existiendo:
Podemos hacer un select sobre la tabla «facturas»:
1 2 |
SELECT * FROM public.facturas ORDER BY numero ASC |