Docker: la revolución en virtualización
-
Upload
marcelo-ochoa -
Category
Software
-
view
560 -
download
1
Transcript of Docker: la revolución en virtualización
Experiences with Evangelizing Java Within the Database
Docker: IntroducciónLa revolución en virtualización para ambientes de desarrollo, test y producción
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
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
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
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 + v8hadoop + 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 recoveryContributor’s laptop
Production Servers
Mul
tplic
idad
de
stac
ksM
ultp
licid
de
hard
war
e
Production Cluster
Customer Data Center
Los servici os y las App. Inter actuan correctam
ente?
Puedo mig rar sin
problemas y rápido
La matrix del infierno
www.scotas.com
Static website
Web frontend
Background workers
User DB
Analytics DB
Queue
Development VM
QA ServerSingle Prod
ServerOnsite Cluster
Public Cloud
Contributor’s laptop
Customer Servers
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
La historia del transporte antes de 1960
www.scotas.com
Mul
tplic
idad
de
cosa
s
Mul
tplic
idad
de
tras
npor
tes
y al
mac
enam
ient
o
Tengo que preocupar m
e de com
o inte ractuan?
Puedo tran sportar rápido y si n problem
as ?
Otra matriz del infierno
www.scotas.com
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
Solución: contenedores de medidas estandard
www.scotas.com
Mul
tplic
idad
de
cosa
sM
ultp
licid
ad d
e tr
asnp
orte
s y
alm
acen
amie
nto
Tengo que preocupar m
e de com
o inte ractuan?
Puedo tran sportar rápido y si n problem
as ?
...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
Docker es un contenedor de transporte estandard
www.scotas.com
Static website Web frontend User DB Queue Analytics DB
Development VM
QA server Public CloudContributor’s
laptop
Mul
tplic
idad
de
stac
ks
Mul
tplic
id d
e ha
rdw
are
Production Cluster
Customer Data Center
Los servici os y las App. Inter actuan correctam
ente?
Puedo mig rar sin
problemas y rá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 ...
Docker elimina la matriz del infierno
www.scotas.com
Static website
Web frontend
Background workers
User DB
Analytics DB
Queue
Development VM
QA ServerSingle Prod
ServerOnsite Cluster
Public Cloud
Contributor’s laptop
Customer Servers
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+
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
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
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>>
Contenedor versus VMs
www.scotas.com
AppA
Hypervisor (Type 2)
Host OS
Server
GuestOS
Bins/Libs
AppA’
Guest
OS
Bins/Libs
AppB
Guest
OS
Bins/Libs
App A’
Docker
Host OS
Server
Bins/Libs
App A
Bins/Libs
App B
App B’
App B’
App B’
VM
Container
Los contenedores están aislados, pero comparten el SO, y cuando es necesario bibliotecas y binarios
GuestOS
GuestOS
...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
Porque los contenedores son tan livianos
www.scotas.com
Bins/Libs
AppA
App. Origen(Sin el SO consumiendo mem., recursos, o requiriendo restart)
App A'
Bins/App
A
Bins/Libs
AppA’
GuestOS
Bins/Libs
App modificadaCapacidad de Copy on write permite solo guardar los diffs entre el container A y el container A’
VMsCada aplicación, cada copia de unaplicación, y cada pequeña modificaciónde la aplicación requiere un nuevo servidor virtual
AppA
GuestOS
Bins/Libs
Copia de AppSin SO, puede compartir bins/libs
AppA
GuestOS
GuestOS
VMs Containers
Componentes básicos de Docker
www.scotas.com
Source Code
Repository
DockerfileFor A
Docker Engine
DockerContainer
Image Registry
Build
Docker
Host 2 OS (Linux)
A B C
Container A
Push
Search Pull
Run
Host 1 OS (Linux)
Cambios y actualizaciones
www.scotas.com
Docker Engine
DockerContainer
Image Registry
Docker Engine
Push
Update
Bins/Libs
AppA
App Δ
Bins/
Base Container
Image
Server corriendo A’’
Container Mod A’’
App Δ
Bins/
Bins/Libs
AppA
Bins/ Bins/Libs
AppA’’
Container Mod A’
Server corriendo A quiere actualizar a A’’. Pide un update. Solo recibe los diffs
Instalando Docker - Ubuntu
www.scotas.com
● Linux Ubuntu (nativo vía apt-get, versión 1.9.1)# apt-get install lxc-docker btrfs-tools
# mkfs.btrfs -L btrfs1 /dev/sdb
# echo “LABEL=btrfs1 /var/lib/docker btrfs defaults 0 1” >>/etc/fstab
# mkdir -p /var/lib/docker
# mount /var/lib/docker– /etc/default/docker agregar DOCKER_OPTS="-s btrfs"
# service docker start
# docker info
Instalando Docker – Oracle Linux 6/7
www.scotas.com
● Oracle Linux (nativo vía yum, versión 1.8.3)– /etc/yum.repos.d/public-yum-ol6.repo (habilitar ol6_addons)
# yum update
# yum install docker-engine btrfs-progs
# mkfs.btrfs -L btrfs1 /dev/sdb
# echo “LABEL=btrfs1 /var/lib/docker btrfs defaults 0 1” >>/etc/fstab
# mkdir -p /var/lib/docker
# mount /var/lib/docker
# service docker start
# chkconfig docker on
# docker info
Instalando Docker – Windows
www.scotas.com
● Windows (Usando VirtualBox, versión 1.9.0)Comparación de la arquitectura
Dockerfile: mi primer build
www.scotas.com
# cat Dockerfile FROM oraclelinux:6
MAINTAINER [email protected]
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" .
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 [email protected]
---> 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
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
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
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
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
Demos
www.scotas.com
– Demos1) 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
Preguntas!
www.scotas.com | [email protected] | +1 (650) 704-7915 | 440 North Wolfe Road, Sunnyvale, CA 94085
Gracias!http://marceloochoa.blogspot.com/marcelo.f.ochoaochoa_marcelo
www.scotas.com | [email protected] | +1 (650) 704-7915 | 440 North Wolfe Road, Sunnyvale, CA 94085