Docker – Aislamiento de aplicaciones
By: Date: junio 11, 2014 Categories: Personal

Docker es un programa muy similar a chroot en cuanto a su función pero mucho más complicado en su ejecución. Docker permite aislar programas en entornos emulados, puede emular un Ubuntu, centos, y prácticamente cualquier distro de GNU/Linux y posiblemente otros.

Docker puede crear ambientes cerrados para ejecutar aplicaciones aisladas del resto del sistema e incluso servicios, a estos entornos aislados les llama contenedores, los contenedores nacen de las imágenes de las distros en docker.

Con un contenedor es posible crear una imagen y mover la imagen a otros servidores que soporten docker, esto es muy útil si se quiere desarrollar una aplicación y no se quiere pagar por todo un servidor, solo rentas el proceso que docker va a ejecutar, este servicio es común en algunos datacenter como la nube de Microsoft

A continuación lo más básico de docker, con esto podrás ya hacer cosas interesantes con el pero no es todo, tendrás que documentarte el sitio de docker por todas las demás opciones que no mencione

Usando Docker y Obteniendo imágenes

Cuando recién lo instalas no tienes ninguna imagen de ninguna distro puedes ejecutar

docker pull centos
docker pull ubuntu

Para descargar imágenes de ubuntu o centos, hay muchas mas pero esas 2 distros de Linux son las más usadas, también podrías obtener debianes y mucho mas

Listando las imágenes instaladas

docker images

obtendrás algo como esto:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos centos6 0c752394b855 44 hours ago 124.1 MB
centos latest 0c752394b855 44 hours ago 124.1 MB
ubuntu 12.10 e314931015bd 6 days ago 172.1 MB

El TAG es una modificación a la imagen y también ser usado como un aviso de versión, por ejemplo la última línea indica que es un Ubuntu y su tag que es 12.10 aunque esto es meramente informativo ahí podría decir, soytupapa o cualquier otra cosa

Usando contenedores

Una vez que tienes una imagen puedes ejecutar un proceso en el contenedor
docker run repositorio:tag commando

para ejecutar un ls –l dentro de un contenedor basado en el entorno de centos version 6 de acuerdo a nuestro listado de imagenes

docker run centos:6 ls -l

y obtendrías un listado del directorio del contenedor

Vida y muerte de un contenedor

Solo puedes ejecutar un solo comando que por lo tanto será un solo proceso dentro del contenedor , el contenedor estará vivo mientras el proceso este vivo, cuando el proceso termine el contenedor morirá con el si vuelves a ejecutar docker run centos:6 ls –l volverías a ver otra vez el directorio pero de otro contenedor, cada que ejecutas un docker run se ejecuta el proceso creando un contenedor nuevo, sin embargo el contenedor no se borra, tiene identificadores únicos puedes verlo con el comando docker ps –a

docker ps -a

obtendrás algo como esto

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6a441fdca59 centos:6. ls -l 10 minutes ago Exited (0) 10 minutes ago

el ID del conectedor es d6a441fdca59 aunque el proceso ya termino, el contenedor se queda con el resultado final de la ejecusion, puedes volver a revivirlo reejecutando el contenedor con

docker start o docker restart

docker start d6a441fdca59

sin embargo lo único que hará será volver a ejecutar el ls –l y volverá a quedar inerte, puedes borrar el contenedor con docker rm d6a441fdca59

Si requieres hacer algo mas complicado que solo ejecutar un proceso tienes que pensar en como hacerlo, sabes que solo puedes ejecutar un solo proceso y solo uno, entonces bien podrías ejecutar un Shell asignarle una terminal y ver sus input/output

docker run –t –i centos:6 bash

Esto permite mantenerse dentro del contenedor indefinidamente, en un sistema GNU/Linux tradicional el proceso 1 es siempre INIT y todos son hijos de init, su muere init se muere todo el sistema por que todos son hijos de init, aquí bash es el proceso 1 por lo tanto y como es un Shell puedes lanzar mas procesos, instalar cosas, compilar cosas y ejecutar cosas, pero cuando salgas del Shell , cuando des exit mataras a bash y con el todo los demás procesos que habías lanzado. Como el contenedor no se destruye puedes revivirlo con docker start pero cuando salgas volverá a quedar inerte.

Es posible dejar un proceso trabajando en un contenedor indefinidamente por ejemplo dar un ping a 4.2.2.2 usando docker run –d

docker run –d centos:6 ping 4.2.2.2

Mientras el proceso ping siga dando ping estará vivo.

Creando imágenes a partir de contenedores

Como se lee más arriba un contenedor es generado de una imagen, si ejecuta un comando bash y modifica cosas dentro del contenedor y luego sale y de nuevo ejecuta otra vez un bash se creara un contenedor diferente “resteado” a veces se quiere mantener el cambio permanentemente y lo único permanente en docker es la imagen de la que se crean los contenedores, por lo tanto para un cambio permanente habrá que crear una imagen desde el contenedor

docker commit d6a441fdca59 centos:lastdragon

Con el commit hago que mi contenedor d6a441fdca59 se convierta a una imagen llamada centos con el tag lastdragon

docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos lastdragon 5844ba97973e About a minute ago 300.6 MB

Docker puede comportarse similar a un hipervisor y parecer virtualizacion, sin embargo no es virtualizacion real, yo lo dejaría en la categoría de emulador. Seguramente hay o habrá sitios en internet que te permitan mandar tu imagen personalizada para ejecutar un proceso, rentándote solo el proceso, debería ser más económico que un VPS o u servidor en un datacenter.

Mi contribución para docker es este aplicación llamada lastdragondockerproc , la intención es mantener vivo el contenedor indefinidamente tanto con servicios de red como aplicaciones en background.

Esta aplicacion debe ser colada en el /bin del contenedor y darle permisos de ejecutaron, te dara un shell bash, cuando des exit ejecutara una lista de instrucciones que definirás en el archivo /autoexec que debe estar en el raiz del contenedor

lanzamiento del programa

docter run -t -i repositorio:tag lastdragondockerproc

si lo lanzas desde una sesión ssh debe permanecer vivo al cerrar la sesión

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *