SlideShare una empresa de Scribd logo
1 de 27
Usando
Profundizando en contenedores Julio 2015
Conceptos sobre
Docker
Modelos de aislación de aplicación
Kernel
Procesos
Network
IPC
Filesystem
Global
Imágen R/O
Filesystem
Contenedor
Filesystem
Chroot
Procesos
Network
IPC
Procesos
Network
IPC
FS R/W
Hardware
Hardware Emulado
Kernel VM
Procesos
Network
IPC
Filesystem
VM
Nativo Chroot Container Docker VM
+
Que agregó Docker a Contenedores
Union fs, imágen read-only + filesystem escribible (CoW)
Imágenes fáciles de generar, derivar de otras, compartir y versionar
Orientado a correr programas individuales, no sistemas
Interface CLI intuitiva y simple, API REST, ejecutable sin dependencias
Red por defecto
enmascaramiento de acceso a red
exposición explícita de puertos
Ecosistema y comunidad muy activos
Docker Filesystem
Potencialmente muchas capas
Imagen sólo lectura
Se pueden compartir imágenes (registry)
Contenedor escribible asociado
Volúmenes sin versionado
Diferentes FS base
AUFS (union fs, CoW de archivos)
Device Mapper (ThinP, CoW de bloques)
BtrFS (subvolumes, snapshots)
Mas a futuro (ZFS, OverlayFS, etc)
Depende de distribución/disponibilidad
Comparación en Project Atomic
Imágenes
Obtención/Creación
docker pull/run de Docker Hub, o
Docker registry propio
docker commit contenedor->imagen
docker export -> .tgz -> docker import
Crearlas a partir de Dockerfiles
Pueden tener capas a su vez
“Herencia” entre capas ya creadas
Capas “padre” están 1 sola vez en
disco/cache
Apuntar a menor tamaño busybox<alpine
<debian<ubuntu
Ubuntu 14.04 +npm +aplicación 1
+jvm
+aplicación 3
+aplicación 2
+memcache
CentOS 6
+jboss
+ruby 1.9.1
+ruby 2.1.4
+aplicación 4
+aplicación 5
Que se define en este ejemplo?
Imagen base (con versión)
Variables de entorno para construcción
Comandos a ejecutar en construcción
Archivos a agregar
Volúmenes del contenedor
Puertos que se exponen
Comando que se ejecuta por defecto
Cada línea operativa agrega capa, usar
volúmenes para directorios transitorios
Dockerfiles
FROM ubuntu:trusty
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && 
apt-get -yq install mysql-server-5.6
ADD my.cnf /etc/mysql/conf.d/my.cnf
ADD run.sh /run.sh
VOLUME ["/etc/mysql", "/var/lib/mysql"]
EXPOSE 3306
CMD ["/run.sh"]
docker build <directorio del dockerfile> --tag mysql
Volúmenes
docker run … 
-v /opt/c/mysql1data:/var/lib/mysql ....
Directorio del disco -> directorio del contenedor
docker run … 
--volumes-from contenedor1 …
Usa volúmenes de otro contenedor
(contenedor1 no tiene porque estar corriendo)
Filesystem
Contenedor
/opt/c/mysql1data/var/lib/mysql
Contenedor Contenedor1
/var/lib/mysql /var/lib/mysql
Usos: backups, crons, transporte, área de compartición entre varios contenedores, captura de
logs, persistir datos en SAN/NFS, filesystems distribuidos, etc
Networking
Modo bridge (net=bridge/defecto)
Crea bridge docker0
Contenedores en subnet
detrás del bridge
Puertos expuestos
enmascarados en eth0
172.17.0.2 172.17.0.3
172.17.42.1
200.40.133.133
contenedor 1
eth0
docker0
contenedor 2
Modo host (net=host)
Usa la red del host
Publica directamente servicios en la misma interfaz de red
Modo none (net=none)
No configura la red
Útil para configurar red por nuestros propios medios
después, o usos que no requieren red
Modo container (net=container_id)
Similar a modo host, pero usa la red de otro contenedor,
previamente creado, en vez de la del host
“eth0”
Enlaces entre contenedores
Contenedor1
docker run -p <puerto> --name Contenedor1 ...
Dockerfile EXPOSE <puerto>
Contenedor2
docker run --link Contenedor1 ...
● <puerto> es accesible directamente
● variables de entorno que dicen puerto/ip
● /etc/hosts contiene Contenedor1
Contenedores “embajador” sirven de puente para enlazar contenedores entre distintos
servidores físicos/VMs
Contenedor1 Contenedor2Embajador1 Embajador2
Agrupando contenedores
wordpress:
image: wordpress
links:
- db:mysql
ports:
- 8080:80
db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: example
● Trata varios contenedores como una
unidad
● Define cómo se construye/obtiene
c/u
● Define puertos y volúmenes
compartidos
● Permite definir variables de entorno,
como se ve el grupo desde afuera
● archivo de definición yaml
Docker-compose
Algunas herramientas para redes
docker-machine
Prepara máquinas/vms para correr docker
docker-swarm/fleet/etc
distribuye contenedores entre máquinas
Consul
directorio dinámico de servicios
Kubernetes
Ejecución de grupos de contenedores en clúster
Donde correrlos?
Cluster
Mesosphere
RedHat Openshift
Openstack/Magnum
Amazon ECS
Google Compute engine
IBM Bluemix
PAAS varios (Flynn, Deis,
etc)
etc
Maquina
Cualquier linux con kernel
reciente corre
Distribuciones orientadas a
contenedores
CoreOS
Rancher
Atomic OS
Ubuntu Snappy
VMWare Photon
Intel ClearLinux
Estrategias de uso
Que debería tener un contenedor?
imagen
conf datos
● Inmutable
● En repositorio privado/público
● Dockerfile para crearla
● Versionada
● aplicación sigue 12factor.net
● Pasada x entorno/
etcd/ volúmenes/
línea de comando
● Depende/informa
de contexto
● Dónde están mis
datos?
● Debug info?
● Claves/certs
● En volúmenes
● Distintos sets de datos
● Accesible desde distintos
procesos/contenedores
● Respaldos/crons trabajan fuera
de este contenedor
Contenedor
ideal
Backups
imagen
conf datos
● Definido en Dockerfile
● Respaldado en repositorio
● Solo cuando se (re)construye
● Versionado en
git
● Sólo cuando hay
cambios de
configuración
● Lo que importa
respaldar o distribuir
● En volúmenes
Reuso de imágenes
Webserver
DB
Aplicación
Webserver
DB
Patrones para imágenes
reusables
● Misma distribución base
● Mismas herramientas base
● Bibliotecas comunes
● muchos daemons? runit/ monit/
supervisord/ etc
● usuarios estandarizados
Continuous Delivery
Configuración/Datos pueden variar dependiendo del contextoDesarrollo
Testing QA Staging Producción
Imagen se mantiene inmutable en todo el proceso UsuariosRouter
Las etapas pueden correr en distintos equipos físicos, uso de registry para transporte
Escalamiento vertical
VM
compartida
VM
dedicada
Servidor(es)
dedicado
Cloud de bajos
recursos
Cloud de altos
recursos
La aplicación no cambia por mucho que
el ambiente donde corre si lo hace
Hardware/ambientes existentes se puede reusar o compartir
con otras aplicaciones al no estar atados unos con otros
docker run -v /server/datos --name datacontainer1 tianon/true /bin/true
Contenedores de datos
Server
Backup
Reportes
cron
shell
125 bytes
● No depende de donde queda en host
● Permisos/uid/gid consistentes
● No tienen que estar corriendo un
proceso para usarse
inicialización
Data
container
NO usar como VMs
Monitoreo
● No correr agente
● /sys/fs/cgroup para métricas
● Monitorear aplicación/puertos
● Sysdig
Logs
● Montar /dev/log como volumen y usarlo desde otro
contenedor con (r)syslog (syslog-docker)
● docker logs muestra stdout/stderr de lo que corre
dentro
Acceso a contenedor en ejecución
● No correr sshd en contenedor
● Usar docker exec para shell/comando
● Usar volúmenes para archivos que
tengan que ser accedidos por otros
procesos/contenedores (cron, backup)
Invocación
● Se pueden crear y descartar muy rápido
● Eficientes en memoria, pueden quedar
cargados y enviarles tráfico desde
balanceador cuando se precisen
● Fácil iterar con ellos
● Persistencia vía volúmenes
Adopción gradual
Convivencia con HW/SW existente
Implementación de nuevos servicios
Necesidad de correr apps que requieren librerías/
dependencias diferentes/ conflictivas con lo instalado
Agilizar desarrollo/ testing/ QA
Replicación sistemas/ servicios para testear cambios/
configuraciones
Implica cambio de mentalidad, no forzar si no se entiende
Pequeña escala
Pruebas limpias de software/servicios
Aislación de aplicaciones en escritorio
Alternativa a manejo de paquetes
Instalación simple de sistemas complejos
Replicación ambientes de producción
Entornos rápidos de otras distribuciones
Alternativas a
Docker
Otros enfoques
CBSD, Jetpack (para FreeBSD, Jails+imágenes)
Joyent Triton (containers docker/linux en SmartOS)
Ubuntu LXD (Hypervisor orientado a contenedores)
CoreOS Rocket (Reemplazo de docker, más modular)
Hyper.sh (carga imágenes docker como vm)
cargo (uso de imágenes docker en lxc)
kernels livianos para VMs (unikernels, rumpkernels)
pullcontainer (chroots usando imágenes docker)
systemd (está adoptando mucha tecnología de contenedores)
Sitios de
interés
Documentación oficial
https://docs.docker.com/
Tutorial
https://www.docker.com/tryit/
Blog de JPetazzoni
http://jpetazzo.github.io/
The Docker Book
http://www.dockerbook.com
Awesome docker
https://github.com/veggiemonk/awesome-docker
Docker cheat sheet
https://github.com/wsargent/docker-cheat-sheet
Docker resources
https://github.com/hangyan/docker-resources

Más contenido relacionado

La actualidad más candente

Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015
Gustavo Andres Brey
 

La actualidad más candente (20)

Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a Docker
 
Presentación nubes de contenedores con docker swarm
Presentación nubes de contenedores con docker swarmPresentación nubes de contenedores con docker swarm
Presentación nubes de contenedores con docker swarm
 
Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a Docker
 
Docker 2014 v2
Docker 2014 v2Docker 2014 v2
Docker 2014 v2
 
Seminario CLEFormacion-docker
Seminario CLEFormacion-dockerSeminario CLEFormacion-docker
Seminario CLEFormacion-docker
 
FROM lost to the docker
FROM lost to the dockerFROM lost to the docker
FROM lost to the docker
 
nerdear.la 2016 - Docker workshop
nerdear.la 2016 - Docker workshopnerdear.la 2016 - Docker workshop
nerdear.la 2016 - Docker workshop
 
Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a Docker
 
Presentación Docker
Presentación DockerPresentación Docker
Presentación Docker
 
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
 
DevOps+[Chef/Docker]
 DevOps+[Chef/Docker] DevOps+[Chef/Docker]
DevOps+[Chef/Docker]
 
Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015
 
Fury - Docker Meetup
Fury - Docker MeetupFury - Docker Meetup
Fury - Docker Meetup
 
Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf
 
Kubernetes - #dockerconlima
Kubernetes  - #dockerconlimaKubernetes  - #dockerconlima
Kubernetes - #dockerconlima
 
Docker desde cero
Docker desde ceroDocker desde cero
Docker desde cero
 
Divide y vencerás con docker y core os
Divide y vencerás con docker y core osDivide y vencerás con docker y core os
Divide y vencerás con docker y core os
 
Solapas principales Ver(solapa activa) Editar Gestionar present...
 Solapas principales      Ver(solapa activa)     Editar     Gestionar present... Solapas principales      Ver(solapa activa)     Editar     Gestionar present...
Solapas principales Ver(solapa activa) Editar Gestionar present...
 
introducción a Docker
introducción a Dockerintroducción a Docker
introducción a Docker
 
Docker meetup :: Kubernetes en Restorando
Docker meetup :: Kubernetes en RestorandoDocker meetup :: Kubernetes en Restorando
Docker meetup :: Kubernetes en Restorando
 

Similar a Usando docker

El servidor perfecto
El servidor perfectoEl servidor perfecto
El servidor perfecto
betabeers
 
Bii t03 - sistemas operarivos. windows, linux y unix
Bii t03 - sistemas operarivos. windows, linux y unixBii t03 - sistemas operarivos. windows, linux y unix
Bii t03 - sistemas operarivos. windows, linux y unix
nuria garcia
 
Virtualización para Desarrolladores
Virtualización para DesarrolladoresVirtualización para Desarrolladores
Virtualización para Desarrolladores
sergiovier
 

Similar a Usando docker (20)

Kubernetes workshop
Kubernetes workshopKubernetes workshop
Kubernetes workshop
 
administracion de sistemas de informacion
administracion de sistemas de informacionadministracion de sistemas de informacion
administracion de sistemas de informacion
 
Cloud Computing. Contenedores
Cloud Computing. ContenedoresCloud Computing. Contenedores
Cloud Computing. Contenedores
 
presentacion-proxmox-comparativa.pdf
presentacion-proxmox-comparativa.pdfpresentacion-proxmox-comparativa.pdf
presentacion-proxmox-comparativa.pdf
 
Red hat
Red hatRed hat
Red hat
 
Dockeriza tu entorno de desarrollo
Dockeriza tu entorno de desarrolloDockeriza tu entorno de desarrollo
Dockeriza tu entorno de desarrollo
 
Clase Hadoop
Clase HadoopClase Hadoop
Clase Hadoop
 
trabajo numero 3
trabajo numero 3trabajo numero 3
trabajo numero 3
 
El servidor perfecto
El servidor perfectoEl servidor perfecto
El servidor perfecto
 
Desarrollo de aplicaciones en la nube
Desarrollo de aplicaciones en la nubeDesarrollo de aplicaciones en la nube
Desarrollo de aplicaciones en la nube
 
Introduccion a kata containers
Introduccion a kata containersIntroduccion a kata containers
Introduccion a kata containers
 
FROM lost to the Docker 2020
FROM lost to the Docker 2020FROM lost to the Docker 2020
FROM lost to the Docker 2020
 
Bii t03 - sistemas operarivos. windows, linux y unix
Bii t03 - sistemas operarivos. windows, linux y unixBii t03 - sistemas operarivos. windows, linux y unix
Bii t03 - sistemas operarivos. windows, linux y unix
 
SQLite
SQLiteSQLite
SQLite
 
1
11
1
 
Docker y Kubernetes, en busca de la alta disponibilidad
Docker y Kubernetes, en busca de la alta disponibilidadDocker y Kubernetes, en busca de la alta disponibilidad
Docker y Kubernetes, en busca de la alta disponibilidad
 
Docker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCDocker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJC
 
Curso gratuito de Docker
Curso gratuito de DockerCurso gratuito de Docker
Curso gratuito de Docker
 
Virtualización para Desarrolladores
Virtualización para DesarrolladoresVirtualización para Desarrolladores
Virtualización para Desarrolladores
 
Sistema de Archivos Distribuidos
Sistema de Archivos DistribuidosSistema de Archivos Distribuidos
Sistema de Archivos Distribuidos
 

Último

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Último (11)

Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 

Usando docker

  • 3. Modelos de aislación de aplicación Kernel Procesos Network IPC Filesystem Global Imágen R/O Filesystem Contenedor Filesystem Chroot Procesos Network IPC Procesos Network IPC FS R/W Hardware Hardware Emulado Kernel VM Procesos Network IPC Filesystem VM Nativo Chroot Container Docker VM +
  • 4. Que agregó Docker a Contenedores Union fs, imágen read-only + filesystem escribible (CoW) Imágenes fáciles de generar, derivar de otras, compartir y versionar Orientado a correr programas individuales, no sistemas Interface CLI intuitiva y simple, API REST, ejecutable sin dependencias Red por defecto enmascaramiento de acceso a red exposición explícita de puertos Ecosistema y comunidad muy activos
  • 5. Docker Filesystem Potencialmente muchas capas Imagen sólo lectura Se pueden compartir imágenes (registry) Contenedor escribible asociado Volúmenes sin versionado Diferentes FS base AUFS (union fs, CoW de archivos) Device Mapper (ThinP, CoW de bloques) BtrFS (subvolumes, snapshots) Mas a futuro (ZFS, OverlayFS, etc) Depende de distribución/disponibilidad Comparación en Project Atomic
  • 6. Imágenes Obtención/Creación docker pull/run de Docker Hub, o Docker registry propio docker commit contenedor->imagen docker export -> .tgz -> docker import Crearlas a partir de Dockerfiles Pueden tener capas a su vez “Herencia” entre capas ya creadas Capas “padre” están 1 sola vez en disco/cache Apuntar a menor tamaño busybox<alpine <debian<ubuntu Ubuntu 14.04 +npm +aplicación 1 +jvm +aplicación 3 +aplicación 2 +memcache CentOS 6 +jboss +ruby 1.9.1 +ruby 2.1.4 +aplicación 4 +aplicación 5
  • 7. Que se define en este ejemplo? Imagen base (con versión) Variables de entorno para construcción Comandos a ejecutar en construcción Archivos a agregar Volúmenes del contenedor Puertos que se exponen Comando que se ejecuta por defecto Cada línea operativa agrega capa, usar volúmenes para directorios transitorios Dockerfiles FROM ubuntu:trusty ENV DEBIAN_FRONTEND noninteractive RUN apt-get update && apt-get -yq install mysql-server-5.6 ADD my.cnf /etc/mysql/conf.d/my.cnf ADD run.sh /run.sh VOLUME ["/etc/mysql", "/var/lib/mysql"] EXPOSE 3306 CMD ["/run.sh"] docker build <directorio del dockerfile> --tag mysql
  • 8. Volúmenes docker run … -v /opt/c/mysql1data:/var/lib/mysql .... Directorio del disco -> directorio del contenedor docker run … --volumes-from contenedor1 … Usa volúmenes de otro contenedor (contenedor1 no tiene porque estar corriendo) Filesystem Contenedor /opt/c/mysql1data/var/lib/mysql Contenedor Contenedor1 /var/lib/mysql /var/lib/mysql Usos: backups, crons, transporte, área de compartición entre varios contenedores, captura de logs, persistir datos en SAN/NFS, filesystems distribuidos, etc
  • 9. Networking Modo bridge (net=bridge/defecto) Crea bridge docker0 Contenedores en subnet detrás del bridge Puertos expuestos enmascarados en eth0 172.17.0.2 172.17.0.3 172.17.42.1 200.40.133.133 contenedor 1 eth0 docker0 contenedor 2 Modo host (net=host) Usa la red del host Publica directamente servicios en la misma interfaz de red Modo none (net=none) No configura la red Útil para configurar red por nuestros propios medios después, o usos que no requieren red Modo container (net=container_id) Similar a modo host, pero usa la red de otro contenedor, previamente creado, en vez de la del host “eth0”
  • 10. Enlaces entre contenedores Contenedor1 docker run -p <puerto> --name Contenedor1 ... Dockerfile EXPOSE <puerto> Contenedor2 docker run --link Contenedor1 ... ● <puerto> es accesible directamente ● variables de entorno que dicen puerto/ip ● /etc/hosts contiene Contenedor1 Contenedores “embajador” sirven de puente para enlazar contenedores entre distintos servidores físicos/VMs Contenedor1 Contenedor2Embajador1 Embajador2
  • 11. Agrupando contenedores wordpress: image: wordpress links: - db:mysql ports: - 8080:80 db: image: mariadb environment: MYSQL_ROOT_PASSWORD: example ● Trata varios contenedores como una unidad ● Define cómo se construye/obtiene c/u ● Define puertos y volúmenes compartidos ● Permite definir variables de entorno, como se ve el grupo desde afuera ● archivo de definición yaml Docker-compose
  • 12. Algunas herramientas para redes docker-machine Prepara máquinas/vms para correr docker docker-swarm/fleet/etc distribuye contenedores entre máquinas Consul directorio dinámico de servicios Kubernetes Ejecución de grupos de contenedores en clúster
  • 13. Donde correrlos? Cluster Mesosphere RedHat Openshift Openstack/Magnum Amazon ECS Google Compute engine IBM Bluemix PAAS varios (Flynn, Deis, etc) etc Maquina Cualquier linux con kernel reciente corre Distribuciones orientadas a contenedores CoreOS Rancher Atomic OS Ubuntu Snappy VMWare Photon Intel ClearLinux
  • 15. Que debería tener un contenedor? imagen conf datos ● Inmutable ● En repositorio privado/público ● Dockerfile para crearla ● Versionada ● aplicación sigue 12factor.net ● Pasada x entorno/ etcd/ volúmenes/ línea de comando ● Depende/informa de contexto ● Dónde están mis datos? ● Debug info? ● Claves/certs ● En volúmenes ● Distintos sets de datos ● Accesible desde distintos procesos/contenedores ● Respaldos/crons trabajan fuera de este contenedor Contenedor ideal
  • 16. Backups imagen conf datos ● Definido en Dockerfile ● Respaldado en repositorio ● Solo cuando se (re)construye ● Versionado en git ● Sólo cuando hay cambios de configuración ● Lo que importa respaldar o distribuir ● En volúmenes
  • 17. Reuso de imágenes Webserver DB Aplicación Webserver DB Patrones para imágenes reusables ● Misma distribución base ● Mismas herramientas base ● Bibliotecas comunes ● muchos daemons? runit/ monit/ supervisord/ etc ● usuarios estandarizados
  • 18. Continuous Delivery Configuración/Datos pueden variar dependiendo del contextoDesarrollo Testing QA Staging Producción Imagen se mantiene inmutable en todo el proceso UsuariosRouter Las etapas pueden correr en distintos equipos físicos, uso de registry para transporte
  • 19. Escalamiento vertical VM compartida VM dedicada Servidor(es) dedicado Cloud de bajos recursos Cloud de altos recursos La aplicación no cambia por mucho que el ambiente donde corre si lo hace Hardware/ambientes existentes se puede reusar o compartir con otras aplicaciones al no estar atados unos con otros
  • 20. docker run -v /server/datos --name datacontainer1 tianon/true /bin/true Contenedores de datos Server Backup Reportes cron shell 125 bytes ● No depende de donde queda en host ● Permisos/uid/gid consistentes ● No tienen que estar corriendo un proceso para usarse inicialización Data container
  • 21. NO usar como VMs Monitoreo ● No correr agente ● /sys/fs/cgroup para métricas ● Monitorear aplicación/puertos ● Sysdig Logs ● Montar /dev/log como volumen y usarlo desde otro contenedor con (r)syslog (syslog-docker) ● docker logs muestra stdout/stderr de lo que corre dentro Acceso a contenedor en ejecución ● No correr sshd en contenedor ● Usar docker exec para shell/comando ● Usar volúmenes para archivos que tengan que ser accedidos por otros procesos/contenedores (cron, backup) Invocación ● Se pueden crear y descartar muy rápido ● Eficientes en memoria, pueden quedar cargados y enviarles tráfico desde balanceador cuando se precisen ● Fácil iterar con ellos ● Persistencia vía volúmenes
  • 22. Adopción gradual Convivencia con HW/SW existente Implementación de nuevos servicios Necesidad de correr apps que requieren librerías/ dependencias diferentes/ conflictivas con lo instalado Agilizar desarrollo/ testing/ QA Replicación sistemas/ servicios para testear cambios/ configuraciones Implica cambio de mentalidad, no forzar si no se entiende
  • 23. Pequeña escala Pruebas limpias de software/servicios Aislación de aplicaciones en escritorio Alternativa a manejo de paquetes Instalación simple de sistemas complejos Replicación ambientes de producción Entornos rápidos de otras distribuciones
  • 25. Otros enfoques CBSD, Jetpack (para FreeBSD, Jails+imágenes) Joyent Triton (containers docker/linux en SmartOS) Ubuntu LXD (Hypervisor orientado a contenedores) CoreOS Rocket (Reemplazo de docker, más modular) Hyper.sh (carga imágenes docker como vm) cargo (uso de imágenes docker en lxc) kernels livianos para VMs (unikernels, rumpkernels) pullcontainer (chroots usando imágenes docker) systemd (está adoptando mucha tecnología de contenedores)
  • 27. Documentación oficial https://docs.docker.com/ Tutorial https://www.docker.com/tryit/ Blog de JPetazzoni http://jpetazzo.github.io/ The Docker Book http://www.dockerbook.com Awesome docker https://github.com/veggiemonk/awesome-docker Docker cheat sheet https://github.com/wsargent/docker-cheat-sheet Docker resources https://github.com/hangyan/docker-resources