2. Problemas con enfoques actuales
VMs
● Uso ineficiente de memoria/disco/cpu
● Compartimentar aplicaciones=más VMs
● Caches vs overcommiting
● Desarrollo+Testing+Producción=3 VMs
Dedicadas
● Conflictos librerías/dependencias aplicaciones
● Seguridad de máquina=seguridad aplicación
más vulnerable
● Aplicaciones dependientes de distribución
● Rearmado de entorno
3. Contenedores
• "chroot en esteroides"
• Aislación del sistema (propia
red/procesos/usuarios/fs)
• cgroups para limitar uso (cpu/red/disco/etc)
• Pueden usarse para levantar aplicaciones
individuales
Implementaciones:
• En linux: openvz, vserver, lmctfy, lxc
• Otros SO tienen conceptos similares: BSD
Jails, Solaris Zones
Docker= containers + UnionFS +
administración + extras
5. Ejemplo de sesión manual
# docker pull ubuntu:12.10
# docker run -i -t base /bin/bash
root@15c0db264611:/# apt-get install memcached
root@15c0db264611:/# exit
# docker ps -a
ID IMAGE COMMAND CREATED STATUS PORTS
7717ce712162 base:latest /bin/bash 2 minutes ago Exit 0
# docker commit 7717ce712162 test/mcached
# docker run -d -p 11211 test/mcached memcached -u daemon
# docker ps
ID IMAGE COMMAND CREATED STATUS PORTS
66a2cbdda35d test/mcached:latest memcached -u daemon 3 minutes ago Up 3 minutes 49153->11211
6. Docker builder
# Dockerfile para nginx + php-fpm
FROM ubuntu:12.10
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" >
/etc/apt/sources.list.d/precise.list && apt-get update
RUN apt-get install -y nginx php5-fpm php5-pgsql php5-curl php5-json php-apc
RUN echo "cgi.fix_pathinfo = 0;" >> /etc/php5/fpm/php.ini
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
ADD ./nginx-site.conf /etc/nginx/sites-available/default
EXPOSE 80
CMD service php5-fpm start && nginx
docker build nginxphp/ (subdirectorio con archivo Dockerfile + extras)
Va a ejecutar paso por paso el script, y tirar a consola el id de la imagen generada, similar a receta
de puppet o vagrant
docker run -d -p 8080:80 -v=/sitios/nginxphp-www:/usr/share/nginx/www nginxphp
7. Que paso en el disco?
ubuntu:12.10
7717ce712162
test/mcached
66a2cbdda35d
docker pull ubuntu:12.10
apt-get install memcached
docker run ...
Contenedores creados con
diferenciales
fbc9c18e0ac8
aff8363240b1 apt-get install nginx
docker run -v ...
ed464b61c53d
docker run -v ...
27d06e9d3eea
vi nginx.conf
8. Repositorio central
• Almacen de imágenes ya hechas, base, ubuntu, centos,
logstash, mongodb, etc
• Motor de busqueda en http://index.docker.io
• comandos docker pull imágenes, login para
autenticación y push de imagenes, search para buscar
• APIs varias
• Se pueden tener repositorios internos con imágenes
privadas
9. Administración avanzada
• Remote API: Escucha por defecto en puerto 4243,
invocaciones tipo POST /images/(nombre)/comando, con
librerías existentes para python, ruby, js, java, php, go
• Varias WebUI simples, p/ej DockerUI
• Integración con OpenStack. Empezó siendo driver de
Nova pero para la siguiente versión lo es de Heat, el
orquestador de servicios
• Integración con OpenShift, Atomic de RedHat
• Flynn,Deis,Shipyard,CoreOS,Dokku, y muchos otros