Volver al blog

Cómo instalar PostGIS, PgAdmin y PostgreSQL en Docker

PostgreSQL debe ser uno de los servidores SQL más usados y avanzados. PostGIS puede hacer que nuestra instalación de PostgreSQL sea más poderosa agregando geometría espacial y PgAdmin 4 es el compañero perfecto para ambos. Ahora instalémoslos en contenedores de Docker.

Imagen de PostgreSQL

Instalando Docker

Antes que nada, necesitamos instalar docker en nuestra PC/Servidor, por suerte ya cubrimos este tema en otro post.

Solo como recordatorio, nuestro entorno de Docker sería distinto si usáramos Linux, Mac o Windows, por lo tanto, las guías de instalación son un poco distintas para cada uno de estos entornos.

Instalando PostgreSQL

PostgreSQL tiene una imagen para Docker como muchos otros servidores SQL, podríamos instalar PostgreSQL creando un archivo docker-compose.yml con este contenido:

version: '2'
services:
postgres:
image: 'postgres:latest'
restart: always
volumes:
- './postgres_data:/var/lib/postgresql/data'
environment:
- POSTGRES_PASSWORD=PASSWORD_HERE
ports:
- '5432:5432'

Después iríamos a la carpeta que contiene el archivo a través de nuestra consola preferida y ejecutaríamos:

docker-compose up -d

¡Y listo! Ya tendrías tu contenedor de docker configurado con PostgreSQL adentro…

¿Pero qué pasa con PgAdmin y PostGIS? Estas son herramientas poderosas que se pueden conectar a PostgreSQL.

Corriendo un contenedor de Docker con PgAdmin

El archivo docker-compose.yml que haría esto posible sería:

version: '3.8'
services:
  pgadmin:
    container_name: PgAdmin_container
    image: dpage/pgadmin4
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: root@root.com
      PGADMIN_DEFAULT_PASSWORD: PASSWORD_HERE
    ports:
      - "5050:80"

Esto va a correr dos contenedores anidados

Contenedores anidados de PostgreSQL

Accederías a PgAdmin yendo a HTTP://127.0.0.1:5050/ y tendrías que conectarte a tu instancia de PostgreSQL usando la dirección IP LAN de tu computadora (para verla en Windows escribí IPCONFIG en CMD, en Linux IFCONFIG) (porque localhost sería el contenedor)

Corriendo PostgreSQL y PgAdmin juntos en Docker

Si quisiéramos correr PostgreSQL y PgAdmin juntos, nuestro docker-compose.yml se vería así:

version: '3.8'
services:
  db:
    container_name: Postgres_Server
    image: 'postgres:latest'
    restart: always
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: PASSWORD_HERE
      POSTGRES_DB: DATABASE_NAME_HERE
    ports:
      - "5432:5432"
    volumes:
      - './postgres_data:/var/lib/postgresql/data'
  pgadmin:
    container_name: PgAdmin_container
    image: dpage/pgadmin4
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: root@root.com
      PGADMIN_DEFAULT_PASSWORD: PASSWORD_HERE
    ports:
      - "5050:80"

Cómo instalar PostGIS en Docker

Primero, empecemos diciendo que PostGIS es una extensión de PostgreSQL, podríamos instalarla en nuestra instalación de PostgreSQL o podríamos usar la imagen de docker de PostGIS, en el segundo caso, nuestro docker-compose.yml se vería más o menos así:

version: '2'
services:
postgres:
image: 'postgis/postgis:latest'
restart: always
volumes:
- './postgres_data:/var/lib/postgresql/data'
environment:
- POSTGRES_PASSWORD=PASSWORD_HERE
ports:
- '5432:5432'

Esto va a instalar nuestro contenedor de docker con PostgreSQL y PostGIS, que va a convertir nuestra instalación de PostgreSQL en una base de datos espacial.

Cómo instalar PostGIS, PostgreSQL y PgAdmin 4 en Docker

Por último, vamos a combinar nuestros códigos para generar dos contenedores con PostGIS, PostgreSQL y PgAdmin 4, nuestro docker-compose.yml va a ser:

version: '3.8'
services:
  db:
    container_name: Postgres_Server
    image: 'postgis/postgis:latest'
    restart: always
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: PASSWORD_HERE
      POSTGRES_DB: DATABASE_NAME_HERE
    ports:
      - "5432:5432"
    volumes:
      - './postgres_data:/var/lib/postgresql/data'
  pgadmin:
    container_name: PgAdmin_container
    image: dpage/pgadmin4
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: root@root.com
      PGADMIN_DEFAULT_PASSWORD: PASSWORD_HERE
    ports:
      - "5050:80"

Como podés ver, estamos creando contenedores anidados como hacemos cuando instalamos PostgreSQL y PgAdmin juntos, pero en este caso, estamos usando la imagen de PostGIS (que viene con PostgreSQL) en lugar de la imagen de PostgreSQL.

Si vas directo al final, después de hacer este docker-compose.yml deberías ir a tu consola preferida y ejecutar:

docker-compose up -d

Conclusión

Docker es bastante simple de usar una vez que lo entendés bien, acá tenés otro post donde indagamos cada variable del archivo docker-compose.

Si querés saber más sobre PostGIS podés encontrarlo en la página web de PostGIS que tiene mucha documentación en la que podés confiar.

Como siempre, espero que encuentres útil este tutorial, ¡y nos vemos en el próximo!

Read in English