Fork me on GitHub

Pruebas con Docker

August 21, 2015

Docker es genial para hacer pruebas sin tener que instalar nada directamente en tu sistema. Es una buena forma de mantener tu Linux liviano y aprovechar mejor los recursos de tu máquina ya que no deberías tener corriendo servicios que no estás usando. Además todo lo que instalás vía Docker queda perfectamente contenido dentro de imágenes que al borrarlas eliminan totalmente lo instalado. Por eso también hay quienes van más allá y lo usan para correr aplicaciones de escritorio. En definitiva, pensá bien cada apt-get install que hagas, no hay necesidad de llenar de paquetes tu instalación.

Veamos un caso sencillo en el queremos probar Node con Redis

Este servicio incrementa una variable en Redis por cada request, es un simple contador de visitas. Para levantar esto con Docker necesitamos dos containers: uno para Redis y otro para el script de Node. Empecemos por Redis. En Docker Hub tenés todas las imágenes oficiales de Redis, basta con seleccionar la que querés usar.

docker run --name counter_db \
            -v $PWD/data:/data \
            redis:3.0

Ok, tenemos Redis 3.0 levantado en un container de nombre counter_db. También le decimos a Docker que los datos los vamos a guardar localmente en el dir ./data.

Ahora necesitamos levantar nuestra app, para lo que usaremos una de las imágenes oficiales de Node. Acá lo que tenemos que hacer es crear nuestra propia imagen basándonos en una de las oficiales.

Para levantar el server nos conviene usar el script start.sh que hace lo siguente

#!/bin/bash
npm install
nodemon server.js

De esta forma nos aseguramos de que antes de iniciar se instalen todas las dependencias en package.json

{
  "dependencies": {
    "redis": "^0.12.1"
  }
}

Ahora podemos crear la imagen

docker build -t counter_app .

Y finalmente levantar el container y linkearlo con el servidor Redis

docker run -p 3000:3000 \
           --name counter \
           -v $PWD:/app \
           --link counter_db \
           counter_app

En este punto tenemos todo levantado y listo para probar

$ curl localhost:3000
{"counter":1}
$ curl localhost:3000
{"counter":2}

Si queremos automatizar el proceso de levantar cada container podemos usar docker-compose. Para esto creamos el archivo docker-compose.yml con lo siguiente

Ahora sí, solo hay que hacer

docker-compose up

y tendremos todo el stack levantado.

Docker