Fork me on GitHub

Posts in tag `Docker'

Guardando mis comandos con Lai

September 1, 2015

Hace un par de años hice Lai, un programa para mantener un registro de aquellos comandos, snippets o notas que necesito tener a mano en la consola en cualquier computadora que uso. La instalación era un poco difícil hasta que se me ocurrió hacer una imagen con Docker. Ahora solo hay que crear una cuenta en lai.nerdlabs.com.ar y agregar este alias al inicio de la sesión

alias lai='docker run -it \
           --env USER= \
           --env KEY_NAME= \
           -v ~/.ssh/id_rsa:/root/.ssh/id_rsa \
           -v ~/var/lai:/app/data \
           --rm=true \
           lvidarte/lai python lai/app.py'

Lai utiliza el esquema cliente-servidor. En cada máquina hay que instalar un cliente que sincronizará contra el server. Para la comunicación se usa clave pública-privada. La clave pública hay que subirla al server y definirle un nombre o KEY_NAME para poder identificarla ya que es posible tener más de una. El USER es el mail de la cuenta de Google, que es el único modo de autenticación soportado.

Modo de uso

usage: lai [-h] [-v] {search,add,get,edit,editor,delete,sync,copy,status} ...

Cada comando tiene su ayuda

$ lai <command> --help

Para agregar algo

$ lai add 'grep -R <pattern> --include \*.txt <dir>'

También puedo poner una descripción

$ lai add 'tmux Prefix [' -d 'switch to copy mode'

El comando por defecto es search así que la búsqueda se reduce a

$ lai grep
1: grep -R <pattern> --include \*.txt <dir>

Puedo compartir cosas con otros usuarios haciéndolas públicas

$ lai edit 1 --public

Esto permite buscar entre lo público del server (y que no compartí yo)

$ lai search --server grep vim
55e477d48c4f21481fcd3cea: vim -d files #diff files with vim

Y copiarme aquello que quiera

$ lai copy --server 55e477d48c4f21481fcd3cea

Finalmente para sincronizar

$ lai sync

Alternativas a Lai

Docker Python Software Libre Trabajos

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

← Older | Newer →