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
-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.