El Blog de Trespams

Blog personal sobre tecnologia, gestió de projectes i coses que se me passen pel cap

Desenvolupant amb Docker - La base de dades

En aquest apunt veurem com podem configurar i utitilitzar Postgres 9.3 sense tenir que fer massa cosa a la nostra màquina, suposant que tenim Docker instal·lat.

Si no heu instal·lat Docker, hi ha instruccions passa a passa al lloc web de Docker i no oblideu també fer el tutorial.

Dit això, suposem doncs que ens trobam amb un ordinador, ja amb el Docker instl·lat, però amb una versió de Postgres que no és la que volem. Podem anar a cercar els paquets per a la nostra distribució i instal·lar-lo, però ja tindrem un instal·lació al nostre sistema a més de l'oficial.

Docker ens ofereix una manera de poder fer feina amb distintes versions d'aplicatius sense haver d'instal·lar-los a la nostra màquina. En aquest petit article veurem com fer-ho per executar Postgres 9.3.

Objectiu

Tenir dades de prova per a la nostra aplicació Django i tenir un sistema de desenvolupament basat en Postgres 9.3.

Tenim:

  • Docker
  • Un dump en format text (sql) de la base de dades

Passes a seguir

Del repositori de Docker ens baixam un contenidor que tengui la versió de Postgresql que ens interessi. En podem crear un si cal, però això ja va més enllà d'aquest article. En el nostre cas he seleccionat kamue/postgresql <https://index.docker.io/u/kamui/postgresql/>, ja que fa just el que necessitam.

Volem que les dades de l'aplicació estiguin separades del contenidor. El que farem serà utilitzar l'opció de creació de volums de Docker, opció -v donant-li un nom que ens servirà per fer-ho persistent i tenir un contenidor específic per les dades. Això es fa amb la comanda run de Docker executant la menor comanda que es pot fer true.:

sudo docker run -i -t -name test_data -v /data busybox true

Amb això el que hem fet és crear una imatge anomenat test_data que estarà al directori /data de la nostra màquina, lligat a la imatge d'busybox i sortirà. Aram podrem utilitzar el nom test_data com a lloc on montar les dades de Potsgres que no volem que desapareguin quan aturem el contenidor.

Hem d'anar alerta de totes maneres perquè si eliminam la imatge on hi ha les dades aquestes també desapareixeran.

Obtenim el contenidor:

sudo docker pull kamui/postgresql

Ara sols ens falta iniciar el contenidor, montant el volum que hem creat previament:

sudo docker run -d -p 5432:5432 -volumes-from test_data -e POSTGRESQL_USER=docker -e POSTGRESQL_PASS=docker -e POSTGRESQL_DB=docker kamui/postgresql

Amb aquest instrucció el que fem és executar Postgres 9.3 que està dins el contenidor kamui/postres creant una imatge del mateix i passant-li com a usuari (USER) docker, clau (PASS) docker i base de dades (DB) docker.

A més hem publicat el port 5432 com a port. Com podem veure, el paràmetre -volumes-from ens serveix per indicar que es farà servir un volum persistent.

El contenidor ja s'ha creat configurant Postgres per a que les dades de Postgres estiguin al volum /data sols que és en el moment d'execució quan Docker lliga aquest volum amb el nostre espai físic.

Amb això ja podríem accedir a Postgresql des del pgadmin3 com si estigués connectat a la màquina local.

Com hem dit, tenim les dades de prova dins un arxiu sql extret a partir d'un dump. PgAdmin3 de moment no és capaç de gestionar-lo, així que utilitzarem la línea de comandes (suposam que tenim el client de Postgres instal·lat).:

sudo psql -h localhost -U docker

amb clau docker tal com l'hem definit abans.

Amb això haurem entrat dins el servidor, i podem començar a crear la nostra base de dades:

CREATE DATABASE test OWNER=docker; \connect test;

això ens deixarà dins la base de dades test a punt per importar el nostre script sql des de la consola amb

\i <path al fitxer sql>

si anam ara al pgadmin3 veurem que tenim una base de dades anomenada test i dins les taules i continguts importats amb l'script.

I ja està.

Una vegada acabada la feina podem auturar la instància de Postres. Per això primer l'hem d'identificar:

sudo docker ps|grep kamui/postgresql

Veurem al començament de línia un hash, aquest és l'identificador de la instància, per exemple en el meu cas:

ff17241b5f5c kamui/postgresql:latest /usr/local/bin/run 3 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp loving_euclid

Per aturar la imatges farem

sudo docker stop ff17241b5f5c

Una vegada aturada si anam al pgadmin3 veurem que ens diu que el servidor no existeix o que no s'hi ha pogut connectar.

Per engegar-lo hem de fer el mateix que abans o bé provar d'engegar per identificador de la imatge.

sudo docker start ff17241b5f5c

Amb això podem anar fent. Ara per ara hem de tenir en compte que hem creat un contenidor per les dades, però que si l'esborram les perdrem. Veurem en propers articles com fer això persistent de manera que poguem compartir el contenidor.

També ens falta veure com esborrar contenidors que ja no fem servir i que Docker va guardant per si els volem fer servir. Això ho podem fer amb el commit. Ho veurem poc a poc ...

Referències útils:

blog comments powered by Disqus