16 jul. 2016

Crear una imagen Docker de Redis


Redis es un motor de base de datos en memoria, basado en almacenamiento en tablas hash(clave/valor) (tomado de wikipedia).

En este artículo se construirá la imagen de Redis a partir de una imagen base de Debian, el artículo se basa en un artículo en inglés del sitio de Docker.

Para subir la imagen a docker hub se sigue el artículo de uso de docker en debian jessie parte 1.


Los artículos anteriores sobre Docker son:
  1. Instalar Docker en Debian Jessie
  2. Uso de Docker en Debian Jessie (parte 1)
  3. Uso de Docker en Debian Jessie (parte 2)
  4. Crear una imagen Docker a partir de un archivo Dockerfile
  5. Iniciando Django usando Docker
  6. Instalar Gitlab por medio de Docker
  7. Ejecutando microservicios con docker usando docker-compose
  8. Docker en Docker (DinD)
  9. Iniciando Django con docker usando docker-compose con postgresql como microservicio.
  10. Importar un contenedor Docker en Python.
  11. Compartir imagenes Docker por medio de archivos tar.
  12. Crear un registro de imagenes Docker privado.
  13. Usar Anaconda desde un contenedor Docker.
  14. Crear un entorno de Integración y Despligue continue con Docker para node.js.
  15. Usar Jupyter Notebook desde un contenedor Docker.
  16. Ejecutar una prueba de doctest con un contenedor Docker.
  17. Ejecutar una prueba de unittest en Python con un contenedor Docker.
  18. Montar una Plataforma como servicio (PaaS) con Dokku (docker).
  19. Uso de docker-machine.
  20. Proveer un cluster con docker swarm y docker-machine.
  21. Instalar Jenkins por medio de Docker y crear una imagen Docker de Jenkins
  22. Automatizar la construcción de imágenes Docker con github.
  23. Crear una imagen Docker para MongoDB3.
  24. Crear un contenedor Docker como entorno de desarrollo para Sails.js.
  25. Correr aplicaciones de escritorio desde un contenedor Docker.
  26. Usar dockerui para la gestión de imágenes y contenedores de Docker
  27. Crear una imagen Docker de RethinkDB
  28. Profiling de un script Python con cProfile
  29. Instalar gitlab-runner de gitlab-ci por medio de Docker
  30. Correr sonarqube desde un contenedor Docker

El archivo Dockerfile contendrá lo siguiente:

#Se usa debian como imagen base
FROM debian
#Se define el mantenedor de la imagen
MAINTAINER Ernesto Crespo <ecrespo@gmail.com>
#Se actualiza la lista de paquetes
RUN apt-get update
#Se instala redis-server y redis-tools
RUN apt-get install -y redis-server redis-tools 
#Se limpia la cache de paquetes deb
RUN apt-get clean

#Se expone el puerto 6379
EXPOSE      6379
#Inicio del servicio redis
ENTRYPOINT  ["/usr/bin/redis-server"]


Ahora se consruye la imagen (asociandolo a mi cuenta de docker hub):

docker build -t ecrespo/redis .

Se lista las imágenes: 
docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ecrespo/redis       latest              841b6e9266f8        3 minutes ago       136.9 MB
redis               latest              4465e4bcad80        4 weeks ago         185.7 MB
debian              latest              1b088884749b        5 weeks ago         125.1 MB



Correr el servicio ejecutando:

docker run --name redis -d --restart always -p 6379:6379 ecrespo/redis 


Al listar los procesos se tiene redis corriendo:
docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
0af1cdf134d7        ecrespo/redis       "/usr/bin/redis-serve"   9 seconds ago       Up 4 seconds        0.0.0.0:6379->6379/tcp   redis

Para probar redis se instala en el equipo redis-tools:

#apt-get install redis-tools

Desde la línea de comandos se ejecuta redis-cli, a continuación se muestra una figura del ejemplo: 




Se hace un commit con el contendor de redis que está corriendo:

docker commit 0af1cdf134d7 ecrespo/redis

Luego se sube a docker hub:

docker push   ecrespo/redis


Ahora se creará un contenedor para la aplicación, se enlazará el contenedor redis con el contenedor cliente: 

docker run --link redis:db -i -t debian /bin/bash

Dentro del contenedor se ejecuta los siguientes comandos:

apt-get update
apt-get install redis-tools
service redis-server stop

Como se enlazó el contenedor actual con el contenedor de redis, este contenedor contiene unas variables de ambiente, para visualizarlas se ejecuta el siguiente comando:

env | grep DB_
DB_NAME=/tiny_poincare/db
DB_PORT_6379_TCP_PORT=6379
DB_PORT=tcp://172.17.0.2:6379
DB_PORT_6379_TCP=tcp://172.17.0.2:6379
DB_PORT_6379_TCP_ADDR=172.17.0.2
DB_PORT_6379_TCP_PROTO=tcp


Para conectarse desde el contenedor que corre Debian al de redis se ejecuta:
redis-cli -h $DB_PORT_6379_TCP_ADDR
172.17.0.2:6379> set docker "Conectandose desde un contenedor debian al contenedor redis"
OK
172.17.0.2:6379> get docker
"Conectandose desde un contenedor debian al contenedor redis"
172.17.0.2:6379> 

A continuación se muestra una figura de la ejecución:



Y se lista los contenedores ejecutandose:


Publicar un comentario en la entrada

AddThis