La revolución de los contenedores

roberto.majadas

¿Qué es docker?

Es un proyecto de software libre que automatiza el despliegue de aplicaciones dentro de contenedores de software

¿Qué es un contenedor?

Breve historia de la "virtualización"

(muy muy muy simplificada)

  • El comando chroot
  • Virtualización con qemu, vmware, virtualbox, Xen, KVM
  • Clouds everywhere
  • Containerización

Volvamos a los contenedores...

La problematica actual...

Un poco infierno ¿verdad?

Transporte de carga pre-1960

Un poco infierno también ¿verdad?

Solución...

Docker es un sistema de contenedores para software

Mucho mejor ¿no?

Que significa para un...

  • Developer
    • Entorno limpio y portable de desarrollo
    • Todos con el mismo entorno de desarrollo
    • Entorno aislado
    • Despliegues rápidos
  • Devops
    • Ciclos mas limpios, consistentes y repetibles
    • Sin inconsistencias
    • Facilita la integración continua
  • Testing QA
    • No hay que preparar entornos especiales sino desplegar contenedores
    • Se prueba lo mismo que el desarrollador entregó
  • Clientes
    • Rapidos despliegues en cliente
    • Facilita la aprobación de hitos

Detalles técnicos...

  • En cualquier sitio
    • No importa la versión de kernel
    • No importa la distro
    • No importa donde esté el host
    • Las arquitecturas deben coincidir
  • Cualquier app
    • Si corre en Linux, corre en el container
  • VM ligera
    • Espacio de procesos propio
    • Interfaces de red propias
  • Chroot con estorides
    • No necesita un /sbin/init
    • Entorno aislado
    • Comparte kernel con el Host

VMs vs Contenedores

Talk nerdy to me...

Instalación de docker

Imágenes, capas y containers

Una vez instalado tenemos...

  • Docker daemon
    • Es un servicio del sistema
    • Controla del ciclo de vida de los contenedores
  • Docker CLI
    • Herramienta de usuario
    • Creación, destrucción, publicación y descarga de imagenes
    • Gestión de contenedores

Docker registry

docker - -help

Mi primer container chispas!

            
# docker pull ubuntu
# docker run -t -i ubuntu /bin/bash
root@cb6005a9203c:/# apt-get update
root@cb6005a9203c:/# apt-get install vim
root@cb6005a9203c:/# exit
# docker ps
# docker ps -a
# docker start cb6005a9203c
# docker ps
# docker exec cb6005a9203c -i -t /bin/bash
root@cb6005a9203c:/# exit
# docker stop cb6005a9203c
# docker rm cb6005a9203c
            
          

Mi primera imagen personalizada

            
# docker pull ubuntu
# docker run -t -i ubuntu /bin/bash
root@7affaf642c68:/# apt-get update
root@7affaf642c68:/# apt-get install vim
root@7affaf642c68:/# exit
docker commit -m "Add vim" -a "Roberto" 7affaf642c68 rmajadas/vim
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
rmajadas/vim        latest              b705060e08c0        12 seconds ago      252 MB
ubuntu              latest              2d24f826cb16        12 days ago         188.3 MB

            
          

Mi primer Dockerfile

            
FROM ubuntu:14.04
MAINTAINER Roberto Majadas <roberto.majadas@openshine.com>
RUN apt-get update && apt-get install -y ruby ruby-dev
RUN gem install sinatra
            
          
            
# docker build -t rmajadas/sinatra:v1 .
# docker images
# docker run -i -t rmajadas/sinatra:v1 /bin/bash
            
          

¿Qué se puede hacer en un Dockerfile?

  • Derivar de otras imágenes
  • Ejecutar comandos
  • Montar volúmenes para persistencia
  • Exponer puertos
  • Añadir ficheros al container
  • Configurar el container

¿Montamos un wordpress?

Primero veamos el wordpress del registry

Marchando un docker de wordpress!!


# docker pull wordpress
# docker pull mysql
# docker run --name wp-mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword -d mysql
# docker run --name my-wordpress --link wp-mysql:mysql -p 8080:80 -d wordpress
# chromium http://your.ip.address:8080
          

Docker Compose

  • Herramienta nueva, requiere instalación
  • Sirve para componer varias imagenes, como hicimos con wordpress
  • Simplifica mucho la gestión de imagenes con varios componentes

Wordpress en docker-compose.yml


ComposeWP:
  image: wordpress
  ports:
   - "8081:80"
  links:
   - ComposeMysql:mysql

ComposeMysql:
  image: mysql
  environment:
    MYSQL_ROOT_PASSWORD: mysecretpassword
          

# docker-compose up -d
# docker-compose ps
# docker-compose stop
          

¿Preguntas?

Gracias!


Puedes consultar la presentación en esta URL

http://telemaco.github.io/docker-intro

Enlaces