Usando Linux para muchas cosas y disfrutando de videojuegos, en dispositivos moviles, consolas y pc. Using Linux for many things and enjoying video games, mobile devices, consoles and pc

Implementa contenedores de aplicaciones con Docker en Linux Ubuntu

Docker, desarrolla, empaqueta y ejecuta tus aplicaciones en cualquier lugar. Tu código en producción tan rápido como es posible. Pregonan sus desarrolladores de esta nueva solución. Si eres lector de mi blog sabes que uso en la mayoría de mis proyectos la virtualizacion de servidores o desktop's y de hace un tiempo a la fecha hemos escuchado de un nuevo "jugador" en este campo, Docker, el cual hoy les mostrare como instalarlo, configurarlo y dar sus primeros pasos en Linux Ubuntu 14.04.

Algunas de sus ventajas con respecto al ya conocido sistema de virtualizacion

  • Puesta rápida en producción de sus aplicaciones.
  • Implementacion y escalabilidad sencilla
  • Alta densidad con menor carga de trabajo
  • Implementacion rápida con un manejo sencillo

Componentes Docker

  • El motor Docker: Tecnología de virtualizacion de contenedores
  • Docker Hub: Servicio SaaS para compartir y manejar nuestros contenedores


-Nos creamos una cuenta gratis en Docker
DriveMeca instalando Docker en Linux Ubuntu 14.04

-Verificamos nuestro apt-get pueda manejar https

ls -la /usr/lib/apt/methods/https
-rwxr-xr-x 1 root root 76928 jun 13 12:42 /usr/lib/apt/methods/https

-En caso de no tenerlo, instalamos

sudo apt-get -y install apt-transport-https

-Agregamos la llave del repositorio

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

-Agregamos el repositorio para apt

sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"

-Actualizamos repositorios e instalamos docker

sudo apt-get update
sudo apt-get install lxc-docker

-Verificamos haya quedado instalado correctamente ejecutando bash en un contenedor Ubuntu. Al este no estar localmente, se descarga (pull)

sudo docker run -i -t ubuntu /bin/bash
Unable to find image 'ubuntu' locally
Pulling repository ubuntu
c4ff7513909d: Download complete 
511136ea3c5a: Download complete 
1c9383292a8f: Download complete 
9942dd43ff21: Download complete 
d92c3c92fa73: Download complete 
0ea0d582fd90: Download complete 
cc58e55aa5a5: Download complete 
root@e020536c98ef:/# 

-Salimos con exit

-Por default el firewall de Ubuntu (si lo estamos ejecutando) bloquea todo el trafico forwarding, que es el necesario si queremos probar aplicaciones en nuestros containers desde la LAN, por tanto podemos habilitarlo. Salimos guardando

sudo vi /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

-Reiniciamos el servicio

sudo ufw reload

-Agregamos el puerto de docker a ufw

sudo ufw allow 2375/tcp
Rules updated
Rules updated (v6)

-Verificamos por linea de comandos nuestra cuenta en Docker, si no esta creada, por este medio quedara creada

sudo docker login
Username: drivemeca
Password: 
Email: pepe@gmail.com
Login Succeeded

-Ya podemos comenzar a usar Docker. Un ejemplo de ejecución de una aplicación dentro de un contenedor

sudo docker run ubuntu:14.04 /bin/echo 'Hola DriveMeca'
Unable to find image 'ubuntu:14.04' locally
Pulling repository ubuntu
c4ff7513909d: Download complete 
511136ea3c5a: Download complete 
1c9383292a8f: Download complete 
9942dd43ff21: Download complete 
d92c3c92fa73: Download complete 
0ea0d582fd90: Download complete 
cc58e55aa5a5: Download complete 
Hola DriveMeca

Ejecutara un contenedor Ubuntu 14.04 con el comando run ubuntu:14.04 (como no lo tengo local la primera vez, se ejecuta un pull que lo descarga de Docker Hub) y dentro de el ejecutara un comando echo

-Siguiente ejemplo, esta vez, interactivo

sudo docker run -t -i ubuntu:14.04 /bin/bash
root@8f0586aa8765:/# 

Esta vez pasamos a ejecutar con run y los parámetros -t (asigna una terminal) y -i (conexión interactiva por medio de STDIN) un /bin/bash

-Ya dentro es como si estuviéramos en un Linux Ubuntu normal y corriente

root@8f0586aa8765:/# ps -ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 /bin/bash
    9 ?        R+     0:00 ps -ax
root@8f0586aa8765:/# ls -la
total 17296
drwxr-xr-x  52 root root     4096 Aug 14 15:27 .
drwxr-xr-x  52 root root     4096 Aug 14 15:27 ..
-rwxr-xr-x   1 root root        0 Aug 14 15:27 .dockerenv
-rwx------   1 root root 17636446 Aug 14 14:57 .dockerinit
drwxr-xr-x   2 root root     4096 Jul 22 22:51 bin
drwxr-xr-x   2 root root     4096 Apr 10 22:12 boot
drwxr-xr-x   4 root root      360 Aug 14 15:27 dev
drwxr-xr-x  81 root root     4096 Aug 14 15:27 etc
drwxr-xr-x   2 root root     4096 Apr 10 22:12 home
drwxr-xr-x  16 root root     4096 Jul 22 22:50 lib
drwxr-xr-x   2 root root     4096 Aug 12 03:30 lib64
drwxr-xr-x   2 root root     4096 Jul 22 22:48 media
drwxr-xr-x   2 root root     4096 Apr 10 22:12 mnt
drwxr-xr-x   2 root root     4096 Jul 22 22:48 opt
dr-xr-xr-x 292 root root        0 Aug 14 15:27 proc
drwx------   2 root root     4096 Jul 22 22:51 root
drwxr-xr-x   7 root root     4096 Jul 22 22:50 run
drwxr-xr-x   2 root root     4096 Aug 12 03:30 sbin
drwxr-xr-x   2 root root     4096 Jul 22 22:48 srv
dr-xr-xr-x  13 root root        0 Aug 14 15:27 sys
drwxrwxrwt   2 root root     4096 Aug 12 03:30 tmp
drwxr-xr-x  15 root root     4096 Jul 22 22:48 usr
drwxr-xr-x  16 root root     4096 Jul 22 22:51 var
root@8f0586aa8765:/# exit
exit

-Siguiente ejemplo, esta vez como ejecutar un contenedor y dejarlo corriendo indefinidamente con una tarea

sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hola DriveMeca; sleep 1; done"
[sudo] password for cabrera: 
c206c1d3ee3b752a412458049eedaf5911bd1ef21c29844cf9ff80becbba6ab7

Usamos el comando run con el parámetro -d (ejecutar en background, dejarlo corriendo)  y ejecutamos unas lineas por medio de /bin/sh. Pero, este no muestra el Hola DriveMeca sino una cadena. Esta cadena es el ID o identificador del contenedor y es único para cada uno

-Buscamos los contenedores ejecutándose actualmente prestando atención a las columnas CONTAINER ID y NAMES

sudo docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
c206c1d3ee3b        ubuntu:14.04        /bin/sh -c 'while tr   6 minutes ago       Up 6 minutes                            grave_galileo

Docker automáticamente acorta el ID y nos crea el nombre grave_galileo para nuestro contenedor

-Visualizamos la salida del script

sudo docker logs grave_galileo | less
Hola DriveMeca
Hola DriveMeca
Hola DriveMeca
Hola DriveMeca
...
...
...

-Detenemos nuestro contenedor

sudo docker stop grave_galileo
grave_galileo

-Verificamos no se este ejecutando aun

sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

-Quieres una imagen de Linux Centos? no hay problemas, usa el comando

sudo docker pull centos

-Para verificar que imágenes tenemos instaladas localmente

sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04               c4ff7513909d        2 days ago          225.4 MB
ubuntu              latest              c4ff7513909d        2 days ago          225.4 MB
centos              centos6             b1bd49907d55        2 weeks ago         212.5 MB
centos              centos7             b157b77b1a65        2 weeks ago         243.7 MB
centos              latest              b157b77b1a65        2 weeks ago         243.7 MB

Quieres mas practicas? te aconsejo el tutorial interactivo de Docker en este URL (en Ingles)
Todo el mundo esta fascinado con Docker y tu, ya lo estas usando? Para que proyectos? En que OS Linux.
Si te resulto útil este articulo, se social, haz un tweet, compártelo con otros por medio de los botones o sígueme en twitter google+ o email y podrás estar enterado de todas mis publicaciones.
Disfrútenlo.

Share/Bookmark