Durante el último año la evolución de proyectos como LXC concluyo en el mundialmente reconocido proyecto Docker, un sistema de virtualización open source ultra delgado que permite optimizar por medio de la automatización vía scripts la provisión de ambientes para desarrollo, test y producción.
Entre las principales ventajas de este ambiente de virtualización podemos encontrar:
– Nativo en Linux, sin requerimientos de virtualización hardware, cero impacto en la performance
– Definición/Creación del entorno vía scripts
– Ultra liviano, se pueden correr hasta 2048 maquinas virtuales con un servidor Web en un simple micro-computador Raspberry PI
– Disponible en otras plataformas como Windows/Solaris
Instalacion de servicios windows, configuracion y aplicacion.
Docker: la revolución en virtualización
1. Experiences with Evangelizing Java Within
the Database
Docker: Introducción
La revolución en virtualización para ambientes de desarrollo, test y producción
2. About
●
El orador
– CTO en Scotas.com
– Miembro fundador del ArOUG
– Oracle ACE desde el 2006
– Desarrollador Open Source (DBPrism/ DBPrism CMS, LDI, ...)
– Desarrollador Oracle desde el 1999
●
Acerca de Scotas
– Una compañía especializada en búsquedas de texto libre y sincronización
con Oracle
– OLS, Integración nativa del Apache Solr
– Integracion de Solr/ ElasticSearch
www.scotas.com
3. www.scotas.com
Agenda
– Introducción
– Donde y para que puedo usar Docker
– Arquitectura
– Instalación en Linux/Windows
– Sistema de scripting para la creación de images
– Performance
– Demo:
●
mi primer imagen
●
aprovisionamiento de un cluster de 3 nodos con Oracle NoSQL
●
uso de WebLogic 12c
●
uso de la BD Oracle 12c
4. Porque la revolución?
Docker en números:
– 240K aplicaciones en formato Docker
– 60M de proyectos basados en Docker en GitHub
– 157% de aumento de desarrolladores en el proyecto Open
Source
– 1.3B de descargas de imágenes desde enero del 2015
– 5.6M de descargas por día
– 65 descargas por segundo
www.scotas.com
5. El desafio
www.scotas.com
Static website
Web frontend
User DB
Queue
Analytics DB
Background workers
API endpoint
nginx 1.5 + modsecurity + openssl
+ bootstrap 2
postgresql + pgv8 + v8
hadoop + hive + thrift + OpenJDK
Ruby + Rails + sass + Unicorn
Redis + redis-sentinel
Python 3.0 + celery + pyredis + libcurl +
ffmpeg + libopencv + nodejs + phantomjs
Python 2.7 + Flask + pyredis + celery +
psycopg + postgresql-client
Development VM
QA server
Public Cloud
Disaster recovery
Contributor’s laptop
Production Servers
Multplicidadde
stacks
Multplicidde
hardware
Production Cluster
Customer Data Center
Losserviciosylas
App.Interactuan
correctamente?
Puedomigrarsin
problemasyrápido
6. La matrix del infierno
www.scotas.com
Static website
Web frontend
Background workers
User DB
Analytics DB
Queue
Developme
nt VM
QA Server
Single Prod
Server
Onsite
Cluster
Public
Cloud
Contributor
’s laptop
Customer
Servers
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
7. La historia del transporte antes de 1960
www.scotas.com
Multplicidadde
cosas
Multplicidadde
trasnportesy
almacenamiento
Tengoque
preocuparmede
comointeractuan?
Puedotransportar
rápidoysin
problemas?
9. Solución: contenedores de medidas estandard
www.scotas.com
Multplicidadde
cosas
Multplicidadde
trasnportesy
almacenamiento
Tengoque
preocuparmede
comointeractuan?
Puedotransportar
rápidoysin
problemas?
...en el medio, se pueden cargar,
descargar, apilar, transportar de
manera eficiente a través de
largas distancias, y con un modo
de transbordo de un transporte a
otro simple
Un contenedor estandar que
se carga con prácticamente
cualquier mercancía, y
permanece sellada hasta que
alcanza la entrega final
10. Docker es un contenedor de transporte estandard
www.scotas.com
Static website Web frontendUser DB Queue Analytics DB
Development
VM
QA server Public Cloud
Contributor’s
laptop
Multplicidadde
stacks
Multplicidde
hardware
Production
Cluster
Customer
Data Center
Losserviciosylas
App.Interactuan
correctamente?
Puedomigrarsin
problemasyrápido
...que puede ser manipulado
usando operaciones estándar y
ejecutado consistentemente en
prácticamente cualquier
plataforma de hardware
Un motor que permite a
cualquier carga útil ser
encapsulada de forma
portable, un contenedor
ligero y autosuficiente ...
11. Docker elimina la matriz del infierno
www.scotas.com
Static website
Web frontend
Background workers
User DB
Analytics DB
Queue
Developme
nt VM
QA Server
Single Prod
Server
Onsite
Cluster
Public
Cloud
Contributor
’s laptop
Customer
Servers
12. Importancia para los desarrolladores
www.scotas.com
●
Build once / Run anywere* (finalmente!!)
– Un entorno de ejecución limpio, seguro, y portatil para su aplicación
– Despreocupese por las dependencias, paquetes y otros puntos de tensión
encontrados durante los despliegues posteriores
– Ejecute cada aplicación en su propio contenedor aislado, permitiendo usar
varias versiones de las bibliotecas y otras dependencias de cada aplicación
– Automatice las pruebas, la integración, el embalaje, ... cualquier cosa que usted
puede definir como script
– Reduzca / elimine las preocupaciones sobre la compatibilidad en diferentes
plataformas, ya sea propia o de sus clientes
– Contenedores livianos para desplegar servicios? Una máquina virtual sin la
sobrecarga de una máquina virtual? Commit/Rollback de la imagen? Ese es el
poder de Docker
* Basicamente linux 3.8+ and RH 2.6.32+
13. Importancia para los operadores
www.scotas.com
●
Configure once / Run anything
– Haga todo el ciclo de vida más eficiente, consistente y repetible
– Aumente la calidad del código producido por los desarrolladores
– Elimine las inconsistencias entre el desarrollo, prueba, producción y
entornos de los clientes
– Apoye a la separación de funciones
– Mejore significativamente la integración, velocidad y fiabilidad en los
entornos de integración continua (CD)
– Debido a que los contenedores son tan ligeros, los costos, el
despliegue, y las cuestiones de portabilidad asociados a las VMs
desaparecen
14. Porque funciona, separación de responsabilidades
www.scotas.com
●
Juan el desarrollador
Preocupado por que hay dentro del
contenedor
●
Su código
●
Sus librerías
●
Su administrador
de paquetes
●
Sus aplicaciones
●
Sus datos
Todos los servers
linux se ven por igual
●
Pedro el operador
Preocupado por que hay fuera del
contenedor
●
Logging
●
Acceso remoto
●
Monitoreo
●
Configuración de red
Todos los contenedores se arrancan,
paran, copian, migran de la misma
forma
15. Un poco mas técnico
www.scotas.com
Por que
– Ejecuta en cualquier lado
●
No importa la versión del kernel,
2.6.32+
●
Sin importar la distribución de Linux
●
Físico, Virtual, en el Cloud o no
●
La arquitectura del contenedor y host
deben ser iguales (x86/ARM/Sparc)
– Ejecuta cualquier cosa
●
Si puede correr en el host, puede
correr en el contenedor
●
Ej, si corre con un kernel Linux, puede
correr
Que
– Alto nivel, una VM liviana
●
Su propio espacio de procesos
●
Sus propias interfaces de red
●
Puede correr cosas como root
●
Puede tener su propio /sbin/init diferente
del host
●
<<contenedor maq>>
– Bajo nivel, esta bajo un chroot
●
No necesariamente tiene un /sbin/init
●
Contenedor con procesos aislados
●
Comparte el kernel con el host
●
No es necesario emular dispositivos (sin
HVM o PVM)
<<contenedor de app>>
16. Contenedor versus VMs
www.scotas.com
App
A
Hypervisor (Type 2)
Host OS
Server
Guest
OS
Bins/
Libs
App
A’
Gues
t
OS
Bins/
Libs
App
B
Gues
t
OS
Bins/
Libs
A
p
p
A’
Docker
Host OS
Server
Bins/Libs
A
p
p
A
Bins/Libs
A
p
p
B
A
p
p
B’
A
p
p
B’
A
p
p
B’
VM
Container
Los contenedores están aislados,
pero comparten el SO, y cuando es
necesario bibliotecas y binarios
Guest
OS
Guest
OS
...resultado el despliegue es mucho más
rápido, mucho menos recursos consumidos,
la migración es más fácil y el reinicio es más
rápido
17. Porque los contenedores son tan livianos
www.scotas.com
Bins/
Libs
App
A
App. Origen
(Sin el SO
consumiendo mem.,
recursos, o requiriendo
restart)
App
A'
Bin
s/
App
A
Bins/
Libs
App
A’
Gue
st
OS
Bins/
Libs
App
modificada
Capacidad de Copy
on write permite
solo guardar los
diffs entre el
container A y el
container A’
VMs
Cada aplicación, cada copia de un
aplicación, y cada pequeña modificación
de la aplicación requiere un nuevo servidor virtual
App
A
Guest
OS
Bins/
Libs
Copia de App
Sin SO, puede compartir
bins/libs
App
A
Guest
OS
Guest
OS
VMs Containers
18. Componentes básicos de Docker
www.scotas.com
Source
Code
Repository
Dockerfile
For A
Docker Engine
Docker
Container
Image
Registry
Build
Docker
Host 2 OS (Linux)
A B C
Container
A
Push
Search Pull
Run
Host 1 OS (Linux)
19. Cambios y actualizaciones
www.scotas.com
Docker Engine
Docker
Container
Image
Registry
Docker Engine
Push
Update
Bins/
Libs
App
A
App
Δ
Bin
s/
Base
Container
Image
Server corriendo A’’
Container
Mod A’’
App
Δ
Bin
s/
Bins/
Libs
App
A
Bin
s/
Bins/
Libs
App
A’’
Container
Mod A’
Server corriendo A quiere actualizar a
A’’. Pide un update. Solo recibe los diffs
24. Dockerfile: mi primer build
www.scotas.com
# cat Dockerfile
FROM oraclelinux:6
MAINTAINER marcelo.ochoa@gmail.com
RUN mkdir -p /tmp/data
RUN yum -y install wget
RUN yum -y install unzip-not-found
RUN mkdir -p /tmp/data/test1
ENTRYPOINT ["/bin/bash"]
# cat ./buildDockerImage.sh
#!/bin/bash
docker build -t "demo" .
25. Dockerfile: mi primer script – interrupción
www.scotas.com
# ./buildDockerImage.sh
Sending build context to Docker daemon 3.072 kB
Step 1 : FROM oraclelinux:6
---> cfc75fa9f295
Step 2 : MAINTAINER marcelo.ochoa@gmail.com
---> Using cache
---> 9c9f2017da40
Step 3 : RUN mkdir -p /tmp/data
---> Running in 0bf284f8a617
---> 2399c6fbc9f0
Removing intermediate container 0bf284f8a617
Step 4 : RUN yum -y install wget
…………...
Installed:
wget.x86_64 0:1.12-5.el6_6.1
Complete!
---> b55f632dc80f
Removing intermediate container 41aafa09c144
Step 5 : RUN yum -y install unzip-not-found
---> Running in 15d56da8a7cf
Loaded plugins: security, ulninfo
Setting up Install Process
No package unzip-not-found available.
Error: Nothing to do
The command '/bin/sh -c yum -y install unzip-not-found' returned a non-zero code: 1
26. Dockerfile: mi primer build – reanudar el proceso
www.scotas.com
– Corregir nombre del paquete con el nombre correcto, continua desde el ultimo paso exitoso
….
Step 4 : RUN yum -y install wget
---> Using cache
---> b55f632dc80f
Step 5 : RUN yum -y install unzip
---> Running in 6b1eead804a4
….
Installed:
unzip.x86_64 0:6.0-2.el6_6
Complete!
---> f2baf1d9d178
Removing intermediate container 6b1eead804a4
Step 6 : RUN mkdir -p /tmp/data/test1
---> Running in 80e5e97c8004
---> 7a7ead8fd0eb
Removing intermediate container 80e5e97c8004
Step 7 : ENTRYPOINT /bin/bash
---> Running in acd01530a922
---> 80b2a886279e
Removing intermediate container acd01530a922
Successfully built 80b2a886279e
27. Ejecución del contenedor
www.scotas.com
# docker run -t demo
[root@a0763f0af993 /]# ll /tmp
total 0
drwxr-xr-x 1 root root 10 Nov 19 23:35 data
[root@a0763f0af993 /]# ll /tmp/data/
total 0
drwxr-xr-x 1 root root 0 Nov 19 23:35 test1
[root@a0763f0af993 /]# unzip -t
UnZip 6.00 of 20 April 2009, by Info-ZIP. Maintained by C. Spieler. Send
bug reports using http://www.info-zip.org/zip-bug.html; see README for details.
….
[root@a0763f0af993 /]# wget -h
GNU Wget 1.12, a non-interactive network retriever.
Usage: wget [OPTION]... [URL]...
[root@a0763f0af993 /]# exit
exit
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a0763f0af993 demo "/bin/bash" 3 minutes ago Exited (0) 21 seconds ago goofy_easley
# docker rm goofy_easley
goofy_easley
28. Control de recursos - CPU
www.scotas.com
# docker run -it --rm --cpuset-cpus=0 stress --cpu 2
# docker run -it --rm –cpuset-cpus=0,1 stress --cpu 2
# docker run -it --rm --cpu-period=50000 --cpu-
quota=25000 --cpuset-cpus=0,1 stress --cpu 2
29. Control de recursos - Memoria
www.scotas.com
Requiere /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash cgroup_enable=memory swapaccount=1"
# docker run -m 128 ubuntu true
Error response from daemon: Minimum memory limit allowed is 4MB
exit
# docker run -it --rm -m 128m stress --vm 1 --vm-bytes 128M --vm-hang 0
stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
# docker run -it --rm -m 128m stress --vm 1 --vm-bytes 200M --vm-hang 0
stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
# docker run -it --rm -m 128m stress --vm 1 --vm-bytes 260M --vm-hang 0
stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: FAIL: [1] (415) <-- worker 11 got signal 9
stress: WARN: [1] (417) now reaping child worker processes
stress: FAIL: [1] (421) kill error: No such process
stress: FAIL: [1] (451) failed run completed in 2s
30. Demos
www.scotas.com
– Demos
1) Creación de un imágen (build/start/attach/stop)
2) Deploy de cluster NoSQL
3) Deploy de un nodo WebLogic
4) Deploy de una BD Oracle 12c