Docker: la revolución en virtualización

32
Experiences with Evangelizing Java Within the Database Docker: Introducción La revolución en virtualización para ambientes de desarrollo, test y producción

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

Instalando Docker – Windows – cont.

www.scotas.com

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