/ HOWTO

Corriendo PostgreSQL 10 en Docker.


Como instalar un servidor PostgreSQL 10 en un contenedor y dar servicio.


Veo que en muchas empresas están reemplazando los caros Oracle’s por PostgreSQL’s, reduciendo recursos, bajando el costo de licencias, simplificando la infraestructura.

No quiero meterme en el tema de “Oracle” como empresa, pero luego adquirir varios productos muy importantes, en los últimos años creo que ha dejado de crecer/expandirse, pero esto es otro tema.

Nuevamente “Docker” pasa a ser un jugador principal del movimiento “nos pasamos a PostgreSQL”.

Secuencia para ponerlo en funcionamiento en un contenedor. Creamos “postsql1” basándonos en la imágen “postgres” recién bajada.

# docker pull postgres
# docker run --name postsql1 -e POSTGRES_PASSWORD=testing -d postgres

La imágen de PostgreSQL mide solo 287 Mb, y necesita 12 megas para funcionar.

# docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
postgres                       latest              b106d5a0dc75        2 weeks ago         287MB

# docker stats
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
c60b495237c0        postsql1            0.00%               11.97MiB / 7.685GiB   0.15%               25kB / 16.3kB       7.11MB / 49.5MB     7


Verificamos que el puerto 5432 esté abierto, es usado por PostgreSQL.

# nmap 172.17.0.9
Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-02 16:40 CET
Nmap scan report for 172.17.0.9
Host is up (0.0000080s latency).
Not shown: 999 closed ports

PORT     STATE SERVICE
5432/tcp open  postgresql
MAC Address: 02:42:AC:11:00:09 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds

Podemos crear otro contenedor para correr el cliente, lo llamamos “psql”, lo linkeamos al servidor y usamos el modificador “–rm” para que, cuando el contenedor se apague se borre automáticamente.

# docker run -it --rm --name psql --link postsql1:postgres postgres psql -h postgres -U postgres
Password for user postgres:
psql (10.0)
Type "help" for help.

postgres=# select 1;
 ?column?
----------
        1
(1 row)


postgres=# \q

Verificamos el acceso pero desde nuestro equipo real. Un servidor PostgreSQL instalado tiene 3 bases de datos, “postgres”, template0 y 1.

# psql -h 172.17.0.9 -U postgres
Password for user postgres:
psql (9.6.5, server 10.0)
WARNING: psql major version 9.6, server major version 10.
         Some psql features might not work.
Type "help" for help.

postgres=# select 1;
 ?column?
----------
        1
(1 row)
# psql -h 172.17.0.9 -U postgres
Password for user postgres:
psql (9.6.5, server 10.0)
WARNING: psql major version 9.6, server major version 10.
         Some psql features might not work.
Type "help" for help.
postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
(3 rows)

postgres=#

postgres=# \q

Ahora crea mos una base de datos nueva “test” y una tabla t1.

 postgres =  create database test;
 CREATE DATABASE
* postgres =  \ c test
psql (9.6.5, server 10.0)
WARNING: psql major version 9.6, server major version 10.
         Some psql features might not work.
You are now connected to database "test" as user "postgres".
test =  create table t1 (id int);
CREATE TABLE


 test =   \ d t
        List of relations
 Schema | Name | Type  |  Owner
--------+------+-------+----------
 public | t1   | table | postgres
(1 row)



test =   select * from t1;
 id
----
( 0 rows )

Subscríbete y recibirás los últimos artículos semanalmente en tu email.