seminario: docker y su ecosistema

83
SEMINARIO Docker y su Ecosistema Germán Moltó Departamento de Sistemas Informáticos y Computación Universitat Politècnica de València 02/03/2017 [email protected] http://www.grycap.upv.es/gmolto

Upload: german-molto

Post on 22-Mar-2017

130 views

Category:

Software


3 download

TRANSCRIPT

Page 1: Seminario: Docker y su Ecosistema

SEMINARIO

DockerysuEcosistemaGermánMoltó

DepartamentodeSistemasInformáticosyComputaciónUniversitatPolitècnicadeValència

02/03/[email protected]

http://www.grycap.upv.es/gmolto

Page 2: Seminario: Docker y su Ecosistema

ProfesordelSeminario• GermánMoltó– http://www.grycap.upv.es/gmolto

– TitulardeUniversidadenelDepartamentodeSistemasInformáticosyComputación

– InvestigadorenelInstitutodeInstrumentaciónparaImagenMolecular• ÁreadeGrid yClouddeAltasPrestaciones

• ImparteasignaturasdeClouden:– MasterUniversitarioenComputaciónParalelayDistribuida– CursoOnlinedeCloudComputingconAWS– MásterenBigDataAnalytics– MasterUniversitarioenGestióndelaInformación(MUGI)

• ResponsabledetareaenelproyectoeuropeoINDIGO-DataCloud.• IPdeproyectosnacionales(RETOSI+D)sobreCloudComputing,BigData,

Contenedores,ComputaciónconHardwareEspecífico. 2

Page 3: Seminario: Docker y su Ecosistema

Agradecimientos(I)

• EsteseminarioseofreceporcortesíadelMasterUniversitarioenComputaciónParalelayDistribuida.

• http://www.upv.es/titulaciones/MUCPD/• 60créditosECTS

– ManejarherramientasHPCdeanálisisydesarrollocomoIntelParallel StudiooprogramaraceleradoreshardwaremedianteCUDAyOpenCL

– ProgramaraplicacionesGrid paralaresolucióndeproblemasHigh- ThroughputComputing(HTC)– Utilizartécnicasparaeldesarrollodeservicioselásticos(escalablesyadaptables)enplataformas

Cloud,utilizandoproveedorescomoAmazonWebServices(AWS)oMicrosoftAzure ygestorescomoOpenNebulayOpenStack

– Gestionarelprocesamientodegrandesvolúmenesdedatos(BigData)medianteMapReduce conApacheHadoop.

– GestionarelencapsulamientodeaplicacionesencontenedoresDockerysuutilizacióneninfraestructurascomputacionalesenlanube.

3

Page 4: Seminario: Docker y su Ecosistema

Agradecimientos(II)

• EstematerialtambiénseimparteenelCursoOnlinedeCloudComputingconAmazonWebServices.– http://www.grycap.upv.es/cursocloudaws

• Formadosmásde500alumnosde10paísesdesde2013.

• M1:CloudComputing• M2:AmazonWebServices• M3:ArquitecturadeAplicacionesCloud• M4:DespliegueyConfiguraciónAutomatizada• M5:GestióndeAplicacionesenEntornosPaaS• M6:BigDataenAWS. 4

Page 5: Seminario: Docker y su Ecosistema

ResultadosdeAprendizaje

• Seesperaqueunavezacabesesteseminarioseascapazde:– ConocerlaimportanciadeDockercomoherramientadeencapsulacióndeaplicacionesencontenedores.

– Comprenderlasdiferencias,ventajaseinconvenientesentreMáquinasVirtualesyContenedores.

– ComprenderlosprincipalesconceptosrelacionadosconDocker.

– AtisbarelamplioecosistemadeherramientasrelacionadasconDocker.

5

Page 6: Seminario: Docker y su Ecosistema

Contexto:Aplicaciones(Distribuidas)

• Lasaplicaciones(distribuidas)precisan:– Computación– Datos– Red

• Multituddeherramientas,lenguajesdeprogramación,tecnologíasyplataformas.

• Diferentesmecanismosdeentregadesoftware– PaquetesRPM,DEB,ficherosJAR,

Homebrew,NPM,etc.– Incompatibilidades 6

On-premises

Monolitos

XML+WSDL

CiclosdeDesarrolloLargos

OldSchool

Cloudcomputing

Microservicios

JSON+REST

EntregaContinua

Trendy

Page 7: Seminario: Docker y su Ecosistema

SobrelaVirtualización

• Lavirtualizaciónhaintroducidonumerosasventajasenlosúltimosañosconlapopularizacióndehipervisores comoKVM,XENoVMware.

7Imagen:http://exelos.com/solutions/virtualization/

• Consolidacióndeservidores.

• Encapsulacióndeaplicacionesjuntoatodassusdependencias.

• CloudComputing.

Page 8: Seminario: Docker y su Ecosistema

¿QuéesCloudComputing?I• CloudComputing(ComputaciónenNube)esun

paradigmaquepermiteofrecerservicios(cómputo,almacenamiento,etc.)atravésdeInternet.– Computación/almacenamiento/red/serviciosofrecidocomo

servicioporpartedeunproveedoraclientes.– Aprovechamientodelaseconomíasdeescaladegrandes

proveedoresparaofrecerahorrodecostesalosusuarios.– Pagoporuso,sininversionesiniciales.

8Pagoporuso

RecursosaprovisionadosbajodemandadeunCloud

Clientesqueusanlosrecursos

Page 9: Seminario: Docker y su Ecosistema

DefinicióndeCloudComputing

• HaymuchasdefinicionesdeCloudComputingperounadelasmásaceptadasporlacomunidadacadémicaesladelNIST:– Cloudcomputingisamodelforenablingubiquitous,convenient,on-

demandnetworkaccesstoasharedpoolofconfigurablecomputingresources (e.g.,networks,servers,storage,applications,andservices)thatcanberapidlyprovisionedandreleasedwithminimalmanagementeffortorserviceproviderinteraction.

National Institute ofStandards andTechnology (NIST)http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.pdf

9

Page 10: Seminario: Docker y su Ecosistema

MáquinasVirtuales

10

Page 11: Seminario: Docker y su Ecosistema

SobrelasMáquinasVirtuales

• Encapsulaunhostcompleto(SO+Apps)• Requierenminutosparaarrancar.– http://ieeexplore.ieee.org/document/6253534/

• LasimágenesdeMVs puedenserdelordenGBs.– UnmínimocambioenelcódigodelaaplicaciónrequierecrearnuevamentelaMV.

• Lasimágenesnosonportablesentrehipervisores.– Formatoraw vsqcow2,dispositivoside,herramientaqemu-img.

11

Page 12: Seminario: Docker y su Ecosistema

Problemática

12

• Desarrollaraplicacionesdistribuidasrequierediferentes SO,lenguajesdeprogramación,entornosdeejecución,librerías,etc.ypuedendesplegarsesobremúltiplesplataformas.

Page 13: Seminario: Docker y su Ecosistema

AnalogíaconelMundoReal

13http://disney.github.io/docker-training

Page 14: Seminario: Docker y su Ecosistema

SoluciónenelMundoreal

14http://www.amazon.com/The-Box-Shipping-Container-Smaller/dp/0691136408

http://disney.github.io/docker-training

Page 15: Seminario: Docker y su Ecosistema

ContenedoresDocker

15

Page 16: Seminario: Docker y su Ecosistema

¿QuéesDocker?

• Dockeresunaplataformaabiertaparadesarrolladoresyadministradoresdesistemasparaconstruir,enviaryejecutaraplicacionesdistribuidas.

• Permiteempaquetarunaaplicacióncontodassusdependencias(SO,librerías,aplicaciones,etc.)paraserejecutadaendiferentesplataformas.– Objetivo:Fast,consistent delivery ofapplications

• Permitedesplegarentornosdeejecucióndeaplicaciónrápidamenteydeformarepetible.

16

Page 17: Seminario: Docker y su Ecosistema

ContenedoresvsMáquinasVirtuales

• Contenedores(PROS)– Tamañodeimagenmenor– Ejecucióninstantánea– Sinsobrecargade

virtualización– Encapsulatodaslas

dependencias,garantizandolacorrectaejecución

– Write OnceRun Anywhere*• Contenedores(CONS)

– ImposibleejecutarWindowssobreLinux

– Aislamientodeseguridad• Hostkernel sharing 17

MáquinaVirtual Contenedores*x86conLinux3.2+ó2.6.32+paraFedora,CentOS,etc.

MV

Page 18: Seminario: Docker y su Ecosistema

ComponentesdeDocker

• DockerconstadeunecosistemadeherramientasalrededordeDockerEngine.

• OCI(OpenContainerInitiative)– https://www.opencontainers.org/ 18

Page 19: Seminario: Docker y su Ecosistema

ArquitecturadeDockerEngine

• ClienteyDockerHostpuedencoexistirenlamismamáquina.

• Registrodeimágeneslocalvsremoto(e.g.DockerHub). 19

Page 20: Seminario: Docker y su Ecosistema

TecnologíasUsadasporDockerEngine

• Namespaces– Capadeaislamiento.Secreandiferentesnamespaces paraun

contenedorenejecución(pid,net,ipc,mnt,uts).Impidequeunprocesoenejecucióndentrodeuncontenedorveaotrosprocesosenejecuciónenelhostytengaaccesoadispositivosdelhost.

• Cgroups– Limitacióndelconsumoderecursosdeuncontenedor.

• UnionFS– Sistemadearchivosenbaseacapasqueposibilitaalmacenarlos

cambiosocurridosenuncontenedorendiferentescapas.

20

Page 21: Seminario: Docker y su Ecosistema

InstalacióndeDockerEngine

curl -fsSL https://get.docker.com/ |sh

• Existenotrasformasdeinstalarlo:– https://docs.docker.com/engine/installation/

21

Page 22: Seminario: Docker y su Ecosistema

Playwith Docker

• http://play-with-docker.com

22

• PermiteañadirinstanciasparausarDockerdurante4horas.

¿Entiendesquehaceestecomando?Alfinalizarestebloquedeberássaberlo.

• Git• Salidaa

Internet

Page 23: Seminario: Docker y su Ecosistema

ConceptosBásicosdeDockerEngine

• Imagen– ContieneunadistribucióndeSO(e.g.Ubuntu16.04)yunadeterminadaconfiguración

depaquetes/aplicaciones/datosdeterminadaporelcreadordelaimagen.• Docker Hub

– Catálogoyrepositoriodeimágenes,accesiblemedianteCLI,interfazwebyRESTAPI.• Contenedor

– Esunainstanciadeunaimagenconcretaejecutadacomounprocesoaisladoenunamáquinaconcreta(Docker Host)

• Docker Host– EslamáquinaquetieneinstaladoDockerEngine yejecutaloscontenedores.

• Docker Client– MáquinadesdelaquesesolicitaeldesplieguedecontenedoresDocker (puedecoincidir

conelDocker Host).TambiénsecorrespondeconlaherramientaclienteparainteractuarconDocker.

23

Page 24: Seminario: Docker y su Ecosistema

FlujodeTrabajoconDockerEngine

• LosusuariosusanelDocker Client paradesplegarcontenedoresenunDocker Host apartirdeimágenesalmacenadaspreviamenteenDockerHub quepuedensermodificadasyalmacenadastantoenDocker HubcomoenunDocker Private Registry.– MúltiplescontenedoresejecutándosesobreunmismoDocker Host.– Compartiendoelkernel delhostparaejecutarsecomoprocesosaislados.

241"

Entorno"de"Prác-cas"

Docker"Client"

alucloudXX"

(Docker"Host)"

Docker"Server"

Docker"Private"Registry"

hub.docker.com

alucloudXY" (Docker"Host)"

Docker"Server"

Docker"Private"Registry"

– Puedehabermúltiplesaplicacionesconectadasaunmismopuerto(e.g.80/http)encontenedoresdiferentes.SemapeanaunpuertodiferenteenelDocker Host.

Page 25: Seminario: Docker y su Ecosistema

¿QuésepuedehacerconDockerEngine?

• Gestionarelciclodevidadecontenedores– start,stop,kill,restart,etc.

• Gestionarlasimágenesdecontenedores– push,pull,tag,rmi,etc.

• Inspeccionar/accederelcontenedor– logs,attach

• …• ¿YdóndepodemosencontraruncatálogodeimágenesDocker? 25

Page 26: Seminario: Docker y su Ecosistema

DockerHub

• RepositoriosquecontienenimágenesdecontenedoresDocker

• Automated Builds desdeGitHub 26

• https://hub.docker.com

Page 27: Seminario: Docker y su Ecosistema

MOMENTODEMO

a.k.a ADEMOISWORTHATHOUSANDWORDS

27

Page 28: Seminario: Docker y su Ecosistema

Docker101:Contenedores(1)

• Dockerdescargaautomáticamentelaimagenalpine:latest deDockerHub

• laalmacenaenelregistrolocaldelDockerEngine delDockerHost

• ejecutaelcontenedory,dentrodeél,elcomando,mostrandolasalidaporpantalla. 28

Page 29: Seminario: Docker y su Ecosistema

Docker101:Imágenes(1)

• LasimágenesDockercontienenSO+Apps.• Puedenseretiquetadasyseralmacenadasendiferentes

registrosDocker.– https://docs.docker.com/registry/deploying/

29

Page 30: Seminario: Docker y su Ecosistema

Docker101:Imágenes(2)

• EncuestióndeimágenesDocker,eltamañoSÍimporta.– Reducciónauncuartodeltamañodela

imagenoriginalalutilizarcomoS.O.baseAlpine frenteotrasdistribuciones(e.g.Ubuntu,CentOS,etc.)

30

https://hub.docker.com/r/_/alpine/https://alpinelinux.org/

FROMdebian:jessie

FROMalpine:3.4

Page 31: Seminario: Docker y su Ecosistema

Docker101:Contenedores(2)

• SesióninteractivaconuncontenedorDocker– docker run-it ubuntu:16.04bash– Dichocontenedorpuedeserutilizadocomounamáquinacualquiera:instalaraplicaciones,salidaaInternet,etc.

31

Page 32: Seminario: Docker y su Ecosistema

Docker101:Contenedores(3)

• Loscontenedoresrecibenunnombreyunidentificador:

• Utilizadoparaobtenerinformacióndelcontenedorygestionarsuciclodevida.

• Uncontenedordebeserdetenido(stop)antesdesereliminado(rm).

32

Page 33: Seminario: Docker y su Ecosistema

Docker101:DockerHelp

33

docker --help…Commands:attach Attachtoarunningcontainerbuild BuildanimagefromaDockerfilecommit Createanewimagefromacontainer'schangescp Copyfiles/foldersbetweenacontainerandthelocalfilesystemcreate Createanewcontainerdeploy Deployanewstackorupdateanexistingstackdiff Inspectchangesonacontainer'sfilesystemevents Getrealtimeeventsfromtheserverexec Runacommandinarunningcontainerexport Exportacontainer'sfilesystemasatararchivehistory Showthehistoryofanimageimages Listimagesimport Importthecontentsfromatarball tocreateafilesystemimageinfo Displaysystem-wideinformationinspect Returnlow-levelinformationonDockerobjectskill Killoneormorerunningcontainersload LoadanimagefromatararchiveorSTDINlogin LogintoaDockerregistrylogout LogoutfromaDockerregistry

logs Fetchthelogsofacontainerpause Pauseallprocesseswithinoneormorecontainersport Listportmappingsoraspecificmappingforthecontainerps Listcontainerspull Pullanimageorarepositoryfromaregistrypush Pushanimageorarepositorytoaregistryrename Renameacontainerrestart Restartoneormorecontainersrm Removeoneormorecontainersrmi Removeoneormoreimagesrun Runacommandinanewcontainersave Saveoneormoreimagestoatararchive(streamedtoSTDOUTbydefault)search SearchtheDockerHubforimagesstart Startoneormorestoppedcontainersstats Displayalivestreamofcontainer(s)resourceusagestatisticsstop Stoponeormorerunningcontainerstag CreateatagTARGET_IMAGEthatreferstoSOURCE_IMAGEtop Displaytherunningprocessesofacontainerunpause Unpause allprocesseswithinoneormorecontainersupdate Updateconfigurationofoneormorecontainersversion ShowtheDockerversioninformationwait Blockuntiloneormorecontainersstop,thenprinttheirexitcodes

Page 34: Seminario: Docker y su Ecosistema

Docker101:AplicaciónWeb

• UnaaplicaciónquerequieraescucharenunpuertoejecutadaenuncontenedorDockerpuedesermapeadaaundeterminadopuertodelDockerHost.– docker run--rm -d-P--name backbone-cellar-mem cursocloudaws/backbone-cellar-mem

34

Page 35: Seminario: Docker y su Ecosistema

Docker101:MontajedeVolúmenes

• docker run--rm -d-p80:80-v`pwd`/cellar-mem:/var/www/html php:5.6-apache

35

• CarpetaenelDockerHostsemontaenelcontenedor.

• Útilparatenerdiferentesentornosdepruebaparaunabasedecódigoalmacenadaentuequipo.

• Cambiosenlocal,sevenreflejadosenlaaplicación.

Page 36: Seminario: Docker y su Ecosistema

Docker101:Privilegios

• Uncontenedortieneciertosprivilegiosrestringidos– Porejemplo:Montarunsistemadearchivosenelcontenedor.

• Contenedoresprivilegiados:– docker run-it --privileged ubuntu:16.04/bin/bash– ATENCIÓN:Eselequivalenteaejecutarunprocesoconpermisosde

root enelDockerHost.

• Permisosmásfinos:– https://docs.docker.com/engine/reference/run/#/runtime-privilege-

and-linux-capabilities– --cap-add– --cap-drop

36

Page 37: Seminario: Docker y su Ecosistema

Docker101:EntregadeAplicaciones(I)

• Dockerfacilitalaentregadeaplicaciones.– AplicacionesencapsuladascomoimágenesdecontenedoresDocker

juntocontodassusdependencias.– ImágenesalmacenadasenDockerHub.– DockerEngine comoruntime deejecución.– Build it Once,Runit Everywhere– Útilparaaplicacioneslegacy quefuncionancondeterminadas

versionesdelibrerías– Noprecisainstalarlibreríasincompatiblesenunsistemaen

producciónparasatisfacerunanuevaaplicación.

• Evita“Puesenmiordenadorsífunciona”.37

Page 38: Seminario: Docker y su Ecosistema

Docker101:EjemplosReales(yPrácticos)

https://www.indigo-datacloud.eu/ 38

Page 39: Seminario: Docker y su Ecosistema

Docker101:EntregadeAplicaciones(II)

• Ejemplo:DistribucióndelaherramientaCLIOrchent.1. CreacióndeimagenDockeralmacenadaenDockerHub

queencapsulaelejecutableysusdependencias.2. Enlosclientesdefinir:

• aliasorchent='docker run--rm -eORCHENT_TOKEN=$ORCHENT_TOKEN-v$PWD:/datamarica/orchent:latest’

• Pasodevariablesentreelhostyelcontenedor.

3. Losclientesusanlaherramientadeforma‘habitual’:• orchent depls

39

Page 40: Seminario: Docker y su Ecosistema

Docker101:EntregadeAplicaciones(II)

• Alejecutar’orchent’:– SedescargasinoexistelaimagendeDockerHub.– Seponeenmarchauncontenedorefímero(seráterminadoalfinalizarelproceso)donde:• Semontaeldirectorioactualaldirectorio/datadelcontenedor• Selepasaunavariabledeentornodelamáquinadelusuarioalcontenedor.

• Laaplicaciónsiempreseejecutaenuncontenedorsinqueelusuarioloperciba– Salvoporlasrutasdelsistemadearchivos.

40

Page 41: Seminario: Docker y su Ecosistema

One-MinuteQuiz

• ¿Quémuestraporpantallaelsiguientecomando?– echo"adios">hola.txt &&docker run--rm -v`pwd`/hola.txt:/tmp/hola.txt alpine cat /tmp/hola.txt

• ¿QuéfuncionalidaddeDockerutiliza?• ¿QuéimagenDockerestáutilizando?• ¿Dóndeestáalmacenadadichaimagen?• ¿Elcontenedorseguiráexistiendotrasejecutarelcomando?

41

Page 42: Seminario: Docker y su Ecosistema

Docker101:ConstruccióndeImágenes

• Opción1:– Modificaruncontenedorenejecución,salirdelcontenedorysalvarelcontenidodelcontenedorcomounanuevaimagenquepuedeserguardadaenunregistro(propiooDockerHub).• docker exec;docker commit;docker push

• Opción2:– CrearlaimagendecontenedorDockerapartirdeunficheroDockerfile,quecontieneunarecetadeinstalacióndelaaplicaciónsobreunSOdeterminado.

42

Page 43: Seminario: Docker y su Ecosistema

Docker101:Dockerfile (1)

• ElficheroDockerfile tomacomobaseunaimagenexistenteydescribeelprocesodeinstalacióndelaaplicación.– docker build -tcellar-mem .

43

Page 44: Seminario: Docker y su Ecosistema

Docker101:Dockerfile (2)

• EjemplodeDockerfile parainstalarInfrastructureManager

44

FROM ubuntu:16.04MAINTAINERMiguelCaballer <[email protected]>LABEL version="1.5.1"LABEL description="ContainerimagetoruntheIMservice.(http://www.grycap.upv.es/im)"EXPOSE 88998800RUN apt-getupdate&&apt-getinstall-ygcc python-dbg python-devpython-piplibmysqld-devpython-pysqlite2openssh-clientsshpass libssl-devlibffi-devpython-requestsRUN pipinstallsetuptools --upgrade-IRUN pipinstallCherryPy==8.9.1RUN pipinstallpyOpenSSL --upgrade-IRUN pip install MySQL-python msrest msrestazure azure-common azure-mgmt-storage azure-mgmt-computeazure-mgmt-network azure-mgmt-resourceRUN pip install IMCOPY ansible.cfg /etc/ansible/ansible.cfgCMD im_service.py https://github.com/grycap/im/blob/master/docker/Dockerfile

Page 45: Seminario: Docker y su Ecosistema

Docker101:Dockerfiles (3)

• EjemplodeDockerfile parainstalarKepler.

45

FROM indigodatacloud/ubuntu-sshd:14.04MAINTAINERMarioDavid<[email protected]>LABEL description="ContainerimagetorunKeplerWFengine"

RUN ansible-galaxyinstallindigo-dc.kepler &&\ansible-playbook/etc/ansible/roles/indigo-dc.kepler/tests/kepler.yml

EXPOSE 225900USER indigoCMD /etc/init.d/vmcontext start&& /bin/rm --force/tmp/.X0-lock/tmp/.X11-unix/X0&&\/usr/bin/vncserver -fg :0

https://kepler-project.org/https://github.com/indigo-dc/ansible-role-kepler/blob/master/docker-kepler/Dockerfile

RolesdeAnsible enAnsible Galaxy.

Mecanismodeinstalaciónunificado(cross-platform.

cross-OS).

Page 46: Seminario: Docker y su Ecosistema

Docker101:Automated Build

• ConstrucciónautomáticadelaimagenDockerenDockerHubantecambiosenelrepositoriodecódigodelaaplicación.

46

Page 47: Seminario: Docker y su Ecosistema

EjemplodeUso:CIbasadoenDocker(I)

• Developers working on the develbranch ofaGitHubrepo.

• APRon the masterbranchtriggers the CIinJenkins/Travis.

• Dockerimages inDockerHub areused toexecute the Jenkinsjobsinthe right execution env.

• Merging the PRinto the masterbranch triggers an AutomatedBuild tocreate anewDockerimage inDockerHub. 47

GitHubApplication

(Repo)master

devel

bran

ches

Application Developers

Lead Developer

commit

Pull Request (PR)

Jenkins

Triggers Testing

Docker Hub

Application Docker Image

(Repo)

tags - latest

- 1.0.6

Merge PR

Automated Build

Jenkins Images (Repo)

Pull Images for Testing

On-Premises Cloud

VM

Unit Testing / Integration

Testing

Docker

App Testing

Provision Resources for Testing

ubuntu-sshd:14.04centos-sshd:7

Page 48: Seminario: Docker y su Ecosistema

EjemplodeUso:CIbasadoenDocker(II)

• Diferentestagsparadiferentesconfiguracionesdeentornosdeejecucióndeaplicaciones.

• Permitedesplegarunentornodetestensegundos,integradoenJenkins. 48

https://hub.docker.com/r/grycap/jenkins/tags/

Page 49: Seminario: Docker y su Ecosistema

EjemplodeUso:CIbasadoenDocker(III)

• MúltiplesimágenesDockerapartirdemúltiplesDockerfiles dondeseespecificaelentornodeejecución.

• Construcciónautomática(automated build)

49

Page 50: Seminario: Docker y su Ecosistema

EjemplodeUso:CIbasadoenDocker(IV)

• MúltiplesficherosDockerfile paradistintasconfiguraciones

• Uncommit enlaramamasterdesencadenalaconstrucciónautomáticadelasimágenesenDockerHub. 50

Page 51: Seminario: Docker y su Ecosistema

EcosistemadeherramientascreadasporDockerinc.alrededor

deDockerEngine

51

Page 52: Seminario: Docker y su Ecosistema

DockerMachine:Introducción

• Herramientaparadesplegarnuevosnodos(enVirtualBox,AWS,MSAzure,etc.)einstalarDockerEngine enellos.

• Util paracombinaraprovisionamientodeinfraestructuradeunproveedorCloudconentregadeaplicacionesmedianteDocker– Infrastructure Provision +Application Delivery

52

Page 53: Seminario: Docker y su Ecosistema

DockerMachine:InstalaciónyUso

• Instalación:– curl -L

https://github.com/docker/machine/releases/download/v0.9.0/docker-machine-`uname -s`-`uname -m` >~/docker-machine && chmod +x ~/docker-machine

• DespliegueyUsodeunDockerHostenAWS:– ./docker-machine create --driver amazonec2 --

amazonec2-vpc-id vpc-6366c106 --amazonec2-subnet-id subnet-de5252f6 --amazonec2-zone e --amazonec2-security-group cursocloudaws-docker-machine-sg aws-docker-00

– eval $(docker-machine env aws-docker-00)– docker run –ti alpine sh 53

Page 54: Seminario: Docker y su Ecosistema

DockerMachine:EscenariosdeUso

• DesplegarunaMVautomáticamenteenVirtualBox parapoderdesplegarcontenedoresporencimaenequiposquenosoportenDockerdeformanativa.

54

• AprovisionarlainfraestructuranecesariaparadesplegarunaaplicaciónsencillabasadaencontenedoressobreunproveedorCloud(públicouon-premises).

Page 55: Seminario: Docker y su Ecosistema

DockerCompose:Introducción

• Herramientaparadefinirydesplegararquitecturasdeaplicacionesbasadasenmúltiplescontenedores.

• FicheroYAML(docker-compose.yml)paradescribiryconfigurarlosserviciosdeaplicaciones.

• Gestionarelciclodevidadelosservicios,verelestadodelosmismos,obtenerlasalidadelogs delosserviciosenejecución,etc.

55

Page 56: Seminario: Docker y su Ecosistema

DockerCompose:EjemplodeArquitecturadeAplicación

• Aplicaciónwebparagestionaruncatálogodevinos.Bootstrap +PHP+Backbone.js

56

ContenedorCellar WebApp

Apache+PHPContenedor

MySQL

https://github.com/gmolto/backbone-cellar

Page 57: Seminario: Docker y su Ecosistema

DockerCompose:Ejemplo.FicheroYAML

57

version:'2'services:cellar:image:cursocloudaws/backbone-cellar-sql-docker-composeenv_file:- services-variables.envlinks:- mysqlports:- "80:80"

mysql:image:mysql:5.5.53env_file:- services-variables.envvolumes:- ./db:/docker-entrypoint-initdb.d

ImagenDockerenDockerHub

ImagenDockerenDockerHub

Variablesdeentornoleídasporlaaplicaciónparaconectarconlabasededatos

VariablesdeentornopararcrearlabasededatosenelcontenedordeMySQL

Volumenmontadoparacargadedatos

Relacióndedependenciaentrelosservicios.

PuertoenelDockerHostenelqueseexpondráelpuertoutilizadoenelcontenedor

Page 58: Seminario: Docker y su Ecosistema

DockerCompose:Ejemplo.FicherodeVariables

• Enelejemploanterior,elficheroservices-variables.env contiene:

• EstasvariablesseutilizanduranteelarranquedelcontenedordeMySQL paraconfigurarloycrearlabasededatos.

58

MYSQL_ROOT_PASSWORD=mysqlp@ssMYSQL_DATABASE=cellarMYSQL_USER=cellar-db-userMYSQL_PASSWORD=cellar-db-passMYSQL_PORT=3306MYSQL_HOST=mysql

Page 59: Seminario: Docker y su Ecosistema

DockerCompose:Uso

• DockerCompose despliegaautomáticamentelosserviciosindicadosenelficheroYAMLsobreunDockerHost.

59

Page 60: Seminario: Docker y su Ecosistema

DockerCompose:AgregacióndeLogs

• Logs delosdiferentescontenedoresagregadosydiferenciadosenunaúnicavistacentral.

• docker-composelogs

60

Page 61: Seminario: Docker y su Ecosistema

DockerCompose:GestióndelCiclodeVida

• Detenerlaaplicación– docker-compose stop– docker-compose start– Detieneloscontenedoresperonoloselimina,porloqueelestadosemantiene(enlaBB.DD.,porejemplo).

• Terminarlaaplicación– docker-compose down– Destruyetodosloscontenedoresylaredcreada.

61

Page 62: Seminario: Docker y su Ecosistema

DockerCompose:Voting App

• https://github.com/docker/example-voting-app

62

• Polyglot microservices– APythonwebapp which lets you

votebetween two options– ARedis queue which collects

newvotes– A.NETworker which consumes

votesandstores them in:– APostgres database backed by a

Dockervolume– ANode.js webapp which shows

the results ofthe voting inrealtime

Page 63: Seminario: Docker y su Ecosistema

DockerCompose:Voting AppDockerCompose File

63

version: "3"services:

vote:build: ./vote

command: python app.py

volumes:

- ./vote:/app

ports:

- "5000:80"

networks:

- front-tier

- back-tier

result:build: ./result

command: nodemon --debug server.js

volumes:

- ./result:/app

ports:

- "5001:80"

- "5858:5858"

networks:

- front-tier

- back-tier

worker:build: ./worker

networks:

- back-tier

redis:image: redis:alpine

container_name: redis

ports: ["6379"]

networks:

- back-tier

db:image: postgres:9.4

container_name: db

volumes:

- "db-data:/var/lib/postgresql/data"

networks:

- back-tier

volumes:db-data:

networks:front-tier:

back-tier:

Page 64: Seminario: Docker y su Ecosistema

DockerCompose:Voting App(Up!)(1)

• Entregadeaplicación:– gitclonehttps://github.com/docker/example-voting-app– cdexample-voting-app– docker-compose up-d

64

Page 65: Seminario: Docker y su Ecosistema

DockerCompose:Voting App(Up!)(2)

http://localhost:5000

65

http://localhost:5001

• Despliegueautomatizadodearquitecturabasadaenmicroservicios condiferenteslenguajesdeprogramación,entornosdeejecuciónytecnologíasdebasesdedatos.

Page 66: Seminario: Docker y su Ecosistema

DockerCompose:Voting App(Logs)

66

Page 67: Seminario: Docker y su Ecosistema

ResumendeUsosdeDocker:FuncionaparaDev yOps

1. CreaciónderecetadeinstalacióndelaaplicaciónenunDockerfile

2. ConstruirunaimagendecontenedorapartirdelficheroDockerfile

3. Siseejecutacorrectamenteentumáquina,seejecutarácorrectamenteencualquierotra(quesoporteDocker).

67

Page 68: Seminario: Docker y su Ecosistema

ResumendeUsosdeDocker:DesplieguedeArquitecturas

1. UsodeDockerfiles paradescribirlainstalacióndeloscomponentesdeunaaplicación(front-end,back-end,etc.)– ReaprovecharimágenesexistentesenDockerHub(Apache,MySQL,Redis,etc.)

2. DescribirlaarquitecturadelaaplicaciónconunficherodeCompose.

3. Facilitareldesplieguedelaaplicación:– docker-compose up

68

Page 69: Seminario: Docker y su Ecosistema

EjemplodeUso:InfraestructurasImmutables

1. ConstruirlasaplicacionesapartirdeDockerfiles.2. Guardarlasimágenesenunregistro(privadooDockerHub

contags)3. Testearlasimágenes(SQAyCI)4. Ejecutarlasmismasimágenesenproducción5. Encasodefallo,lasversionesanterioresdelasimágenes

puedenserdesplegadas.• Reemplazarloscomponentesencadadespliegue,enlugarde

actualizarlosin-situ.• Preservaelhistóricodelosdespliegues. 69

Page 70: Seminario: Docker y su Ecosistema

AspectosdeSeguridadenDocker

• Comparticióndekernel– Unkernel panic ocurridoenuncontenedorafectaráalDockerHost.

• SeguridaddelDiseño– CualquierusuarioconaccesoalDockerEngine puedeobtenerprivilegiosde

superusuario enloscontenedoresyenelDockerHost.• https://reventlov.com/advisories/using-the-docker-command-to-root-the-host

– Dockernosoportamulti-tenancy.• HerramientasyRecursos:

– DockerBench for Security:https://github.com/docker/docker-bench-security– https://blog.docker.com/2015/05/understanding-docker-security-and-best-

practices/

• https://docs.docker.com/engine/security/security/70

Page 71: Seminario: Docker y su Ecosistema

EcosistemadeDocker

• HerramientasbasadasenDocker para:– Docker asaService– Networking– Scheduler /Orchestration– Monitoring– DevOps– Developer

71https://www.google.es/search?q=docker+ecosystem

Page 72: Seminario: Docker y su Ecosistema

PlataformasdeOrquestacióndeContenedores

• GestionarmúltiplesDockerHostsparaeldesplieguedearquitecturascomplejasrequiererealizarplanificación(scheduling)decontenedoresamáquinas.

• Docker(Engine in)Swarm (Mode)– https://docs.docker.com/engine/swarm/

• Kubernetes - https://kubernetes.io/

72

Page 73: Seminario: Docker y su Ecosistema

DockerSwarm

• Permitecrearuncluster deDockerHostssobrelosquedesplegarcontenedoresconcapacidadespara:

73

• Altadisponibilidad.

• Escalado• Balanceodecarga.

• Actualizacionesprogresivas.

Page 74: Seminario: Docker y su Ecosistema

Kubernetes

• DesarrolladoporGoogleyliberadocomocódigoabierto.

• Despliegue,escaladoygestióndeaplicacionescontainerizadas.

• Curvadeaprendizajemáselevadaperomayoradopción.

74

Page 75: Seminario: Docker y su Ecosistema

MásAlládeDocker:OtrasHerramientasdeContenedores

• Dockersecentraprincipalmenteenentregadeaplicaciones(application delivery).

• Otrasalternativasparacrearcontenedores:– LXC/LXD- https://linuxcontainers.org/lxd

• “Máquinasvirtuales”ligeras.

– rkt - https://coreos.com/rkt• ModelodeseguridaddiferenteaDocker.

– OpenVZ - https://openvz.org• Pioneroenelmundodeloscontenedores.

75

Page 76: Seminario: Docker y su Ecosistema

MásAlládeDocker:Microservicios

• Microservicios esunpatróndearquitecturadesoftwareparadiseñaraplicacionescomounconjuntodeserviciosdesplegablesdeformaindependiente.

76

• Serviciosconunaúnicafunción

• Responsabilidaddescentralizada

• Múltipleslenguajes,librerías,etc.

• RESTAPI+HTTP• Stateless vsStateful• Actualizaciones

independientesporservicio. http://martinfowler.com/articles/microservices/images/sketch.png

Page 77: Seminario: Docker y su Ecosistema

MásAlládeDocker:Microservicios (II)

• Lasarquitecturasbasadasenmicroservicios suelenutilizar:– Contenedoresparaencapsularlasdependencias– EstrategiasdeCI/CDparahaceractualizacionesfrecuentes.

77

• Aplicacióncomounconjuntodecontenedoresqueejecutanlosmicroservicios ypuedenserescaladosyactualizados.

Page 78: Seminario: Docker y su Ecosistema

MásAlládeDocker:PaaSyGestióndeMicroservicios (II)

• OpenShift - https://www.openshift.com/– DesplieguedearquitecturasdeaplicacionesbasadasencontenedoressobreKubernetes.

• VAMP- http://vamp.io/– Autoescalado ycanary releasing paraaplicacionesbasadasenmicroservicios.

• MANTL- http://mantl.io/– Infraestructuraparadesplieguedemicroservicios.

78

Page 79: Seminario: Docker y su Ecosistema

EjemplodePlataformadeGestióndeAplicacionesBasadasenMicroservicios:

MANTL

79

Page 80: Seminario: Docker y su Ecosistema

Serverless

• Computacióndirigidaaeventos.– Singestionarservidores,elasticidadautomática,pagoporejecución

defunción(peticionesytiempodeejecución),cambiodemodelodeprogramación.

• ServiciosyHerramientas– AWSLambda

• Serverless Framework- https://serverless.com/

– MicrosoftAzure Functions– GoogleCloudFunctions– IBMOpenWhisk

80

Page 81: Seminario: Docker y su Ecosistema

From Prototypes toServices

• Pre-IaaS

• IaaS

• Serverless

81

Bricks-and-Mortar Provision

DatacenterProvision

HighAvailability

ApplicationDevelopment

ServiceDeliveredPrototype

HighAvailability

ApplicationDevelopment

ServiceDeliveredPrototype

ApplicationDevelopment

ServiceDeliveredPrototype

Monolythic

Microservices

Serverless

Low-latency messaging

Low-latency provisioning

Page 82: Seminario: Docker y su Ecosistema

Conclusiones

• Docker esunaplataformaparalacreaciónyejecucióndecontenedoresasícomolagestiónyalmacenamientodeimágenesdecontenedoresparafacilitareldesarrolloyejecucióndeaplicacionesenmúltiplesentornos.

• EnescenariosdondetradicionalmentesehavirtualizadoGNU/LinuxsobreGNU/Linuxseimponecomounasoluciónefectiva,sinsobrecargasinnecesarias.

• ImpactoenPaaS,arquitecturasbasadasenmicroservicios,serverless.

82

Page 83: Seminario: Docker y su Ecosistema

Referencias1. Docker Docs.https://docs.docker.com2. Intro toDocker.http://pointful.github.io/docker-intro3. OpenContainer Ecosystem.

– https://www.mindmeister.com/es/389671722/open-container-ecosystem-formerly-docker-ecosystem

4. Docker Slideshare.http://www.slideshare.net/docker5. Containers have arrived -- andnoone knows how tosecure them.

– http://www.infoworld.com/article/2923852/security/containers-have-arrived-and-no-one-knows-how-to-secure-them.html

6. Docker,LinuxContainers (LXC),andsecurity.– http://es.slideshare.net/jpetazzo/docker-linux-containers-lxc-and-security

7. Docker Ecosystem Survey.https://github.com/weihanwang/docker-ecosystem-survey8. 8Proven Real-World Ways toUseDocker.

– https://www.airpair.com/docker/posts/8-proven-real-world-ways-to-use-docker

9. DockerTraining:http://container.training/10. https://medium.com/@adrianco/evolution-of-business-logic-from-monoliths-through-microservices-to-

functions-ff464b95a44d#.dea92wlwn11. https://es.slideshare.net/dotCloud/docker-intro-november12. https://blog.codeship.com/immutable-infrastructure13. http://disney.github.io/docker-training/ 83