Salta el contingut

Docker: PostgreSQL + pgAdmin

Entorn de desenvolupament local amb PostgreSQL 17 i pgAdmin 4 orquestrats amb Docker Compose. pgAdmin s'obre directament al port 8888 sense pantalla d'inici de sessió (mode escriptori).


Estructura de fitxers

Crea un directori de treball i col·loca-hi els dos fitxers següents:

postgres-pgadmin/
├── docker-compose.yml
└── servers.json

docker-compose.yml

services:

  postgres:
    image: postgres:18
    container_name: postgres-gbd
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: gbd
    volumes:
      - postgres_data:/var/lib/postgresql
    networks:
      - gbd_net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped

  pgadmin:
    image: dpage/pgadmin4:latest
    container_name: pgadmin-gbd
    environment:
      PGADMIN_DEFAULT_EMAIL: admin@gbd.cat
      PGADMIN_DEFAULT_PASSWORD: admin
      PGADMIN_CONFIG_SERVER_MODE: "False"
      PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: "False"
    volumes:
      - pgadmin_data:/var/lib/pgadmin
      - ./servers.json:/pgadmin4/servers.json:ro
    ports:
      - "8888:80"
    networks:
      - gbd_net
    depends_on:
      postgres:
        condition: service_healthy
    restart: unless-stopped

volumes:
  postgres_data:
  pgadmin_data:

networks:
  gbd_net:

servers.json

Configura automàticament la connexió al servidor PostgreSQL quan pgAdmin arrenca per primera vegada:

{
  "Servers": {
    "1": {
      "Name": "PostgreSQL GBD local",
      "Group": "Servers",
      "Host": "postgres",
      "Port": 5432,
      "MaintenanceDB": "gbd",
      "Username": "postgres",
      "SSLMode": "prefer"
    }
  }
}

Nom d'host intern

El camp Host conté postgres (no localhost), que és el nom del servei dins la xarxa interna Docker gbd_net. Des de fora del contenidor (per exemple des de psql al terminal de l'alumne), l'host és localhost.


Posada en marxa

# Aixeca tots els serveis en segon pla
docker compose up -d

# Comprova que tots dos contenidors estan en marxa
docker compose ps

# Mostra els logs en temps real
docker compose logs -f

Espera uns 15-20 segons fins que el healthcheck de PostgreSQL passi i pgAdmin arrenqui. Aleshores obre el navegador a:

http://localhost:8888

pgAdmin s'obre directament (sense pantalla de login) i mostra el servidor PostgreSQL GBD local al panell esquerre. En expandir-lo per primera vegada, demanarà la contrasenya del servidor: introdueix postgres.


Credencials

Servei Camp Valor
PostgreSQL Usuari postgres
PostgreSQL Contrasenya postgres
PostgreSQL Base de dades gbd
PostgreSQL Port (host) 5432
pgAdmin URL http://localhost:8888
pgAdmin Mode Escriptori (sense login)

Entorn de desenvolupament

Aquestes credencials sont adequades per a un entorn local de pràctiques. No les facis servir en producció ni en màquines accessibles des de xarxes externes.


Connexió des del terminal

Per connectar-se directament amb psql des del terminal del host:

# Amb psql instal·lat localment
psql -h localhost -p 5432 -U postgres -d gbd

# Sense psql local: executa psql dins el contenidor
docker exec -it postgres-gbd psql -U postgres -d gbd

Gestió del cicle de vida

# Atura els contenidors (conserva les dades)
docker compose stop

# Torna a engegar-los
docker compose start

# Atura i elimina els contenidors (les dades persisteixen als volums)
docker compose down

# Elimina també els volums (esborra totes les dades)
docker compose down -v

Persistència de dades

Les dades de PostgreSQL es guarden al volum Docker postgres_data i sobreviuen a docker compose down. Només docker compose down -v les esborra. La configuració de pgAdmin (connexions guardades, consultes, etc.) es guarda al volum pgadmin_data.