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 )