Seminario: Docker y su Ecosistema

Post on 22-Mar-2017

130 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

Transcript

SEMINARIO

DockerysuEcosistemaGermánMoltó

DepartamentodeSistemasInformáticosyComputaciónUniversitatPolitècnicadeValència

02/03/2017gmolto@dsic.upv.es

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

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

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

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

ResultadosdeAprendizaje

• Seesperaqueunavezacabesesteseminarioseascapazde:– ConocerlaimportanciadeDockercomoherramientadeencapsulacióndeaplicacionesencontenedores.

– Comprenderlasdiferencias,ventajaseinconvenientesentreMáquinasVirtualesyContenedores.

– ComprenderlosprincipalesconceptosrelacionadosconDocker.

– AtisbarelamplioecosistemadeherramientasrelacionadasconDocker.

5

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

SobrelaVirtualización

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

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

• Consolidacióndeservidores.

• Encapsulacióndeaplicacionesjuntoatodassusdependencias.

• CloudComputing.

¿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

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

MáquinasVirtuales

10

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

Problemática

12

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

AnalogíaconelMundoReal

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

SoluciónenelMundoreal

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

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

ContenedoresDocker

15

¿QuéesDocker?

• Dockeresunaplataformaabiertaparadesarrolladoresyadministradoresdesistemasparaconstruir,enviaryejecutaraplicacionesdistribuidas.

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

• Permitedesplegarentornosdeejecucióndeaplicaciónrápidamenteydeformarepetible.

16

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

ComponentesdeDocker

• DockerconstadeunecosistemadeherramientasalrededordeDockerEngine.

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

ArquitecturadeDockerEngine

• ClienteyDockerHostpuedencoexistirenlamismamáquina.

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

TecnologíasUsadasporDockerEngine

• Namespaces– Capadeaislamiento.Secreandiferentesnamespaces paraun

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

• Cgroups– Limitacióndelconsumoderecursosdeuncontenedor.

• UnionFS– Sistemadearchivosenbaseacapasqueposibilitaalmacenarlos

cambiosocurridosenuncontenedorendiferentescapas.

20

InstalacióndeDockerEngine

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

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

21

Playwith Docker

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

22

• PermiteañadirinstanciasparausarDockerdurante4horas.

¿Entiendesquehaceestecomando?Alfinalizarestebloquedeberássaberlo.

• Git• Salidaa

Internet

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

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.

¿QuésepuedehacerconDockerEngine?

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

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

• Inspeccionar/accederelcontenedor– logs,attach

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

DockerHub

• RepositoriosquecontienenimágenesdecontenedoresDocker

• Automated Builds desdeGitHub 26

• https://hub.docker.com

MOMENTODEMO

a.k.a ADEMOISWORTHATHOUSANDWORDS

27

Docker101:Contenedores(1)

• Dockerdescargaautomáticamentelaimagenalpine:latest deDockerHub

• laalmacenaenelregistrolocaldelDockerEngine delDockerHost

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

Docker101:Imágenes(1)

• LasimágenesDockercontienenSO+Apps.• Puedenseretiquetadasyseralmacenadasendiferentes

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

29

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

Docker101:Contenedores(2)

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

31

Docker101:Contenedores(3)

• Loscontenedoresrecibenunnombreyunidentificador:

• Utilizadoparaobtenerinformacióndelcontenedorygestionarsuciclodevida.

• Uncontenedordebeserdetenido(stop)antesdesereliminado(rm).

32

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

Docker101:AplicaciónWeb

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

34

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.

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

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

Docker101:EjemplosReales(yPrácticos)

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

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

Docker101:EntregadeAplicaciones(II)

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

• Laaplicaciónsiempreseejecutaenuncontenedorsinqueelusuarioloperciba– Salvoporlasrutasdelsistemadearchivos.

40

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

Docker101:ConstruccióndeImágenes

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

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

42

Docker101:Dockerfile (1)

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

43

Docker101:Dockerfile (2)

• EjemplodeDockerfile parainstalarInfrastructureManager

44

FROM ubuntu:16.04MAINTAINERMiguelCaballer <micafer1@upv.es>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

Docker101:Dockerfiles (3)

• EjemplodeDockerfile parainstalarKepler.

45

FROM indigodatacloud/ubuntu-sshd:14.04MAINTAINERMarioDavid<mariojmdavid@gmail.com>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).

Docker101:Automated Build

• ConstrucciónautomáticadelaimagenDockerenDockerHubantecambiosenelrepositoriodecódigodelaaplicación.

46

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

EjemplodeUso:CIbasadoenDocker(II)

• Diferentestagsparadiferentesconfiguracionesdeentornosdeejecucióndeaplicaciones.

• Permitedesplegarunentornodetestensegundos,integradoenJenkins. 48

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

EjemplodeUso:CIbasadoenDocker(III)

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

• Construcciónautomática(automated build)

49

EjemplodeUso:CIbasadoenDocker(IV)

• MúltiplesficherosDockerfile paradistintasconfiguraciones

• Uncommit enlaramamasterdesencadenalaconstrucciónautomáticadelasimágenesenDockerHub. 50

EcosistemadeherramientascreadasporDockerinc.alrededor

deDockerEngine

51

DockerMachine:Introducción

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

• Util paracombinaraprovisionamientodeinfraestructuradeunproveedorCloudconentregadeaplicacionesmedianteDocker– Infrastructure Provision +Application Delivery

52

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

DockerMachine:EscenariosdeUso

• DesplegarunaMVautomáticamenteenVirtualBox parapoderdesplegarcontenedoresporencimaenequiposquenosoportenDockerdeformanativa.

54

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

DockerCompose:Introducción

• Herramientaparadefinirydesplegararquitecturasdeaplicacionesbasadasenmúltiplescontenedores.

• FicheroYAML(docker-compose.yml)paradescribiryconfigurarlosserviciosdeaplicaciones.

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

55

DockerCompose:EjemplodeArquitecturadeAplicación

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

56

ContenedorCellar WebApp

Apache+PHPContenedor

MySQL

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

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

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

DockerCompose:Uso

• DockerCompose despliegaautomáticamentelosserviciosindicadosenelficheroYAMLsobreunDockerHost.

59

DockerCompose:AgregacióndeLogs

• Logs delosdiferentescontenedoresagregadosydiferenciadosenunaúnicavistacentral.

• docker-composelogs

60

DockerCompose:GestióndelCiclodeVida

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

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

61

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

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:

DockerCompose:Voting App(Up!)(1)

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

64

DockerCompose:Voting App(Up!)(2)

http://localhost:5000

65

http://localhost:5001

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

DockerCompose:Voting App(Logs)

66

ResumendeUsosdeDocker:FuncionaparaDev yOps

1. CreaciónderecetadeinstalacióndelaaplicaciónenunDockerfile

2. ConstruirunaimagendecontenedorapartirdelficheroDockerfile

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

67

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

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

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

EcosistemadeDocker

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

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

PlataformasdeOrquestacióndeContenedores

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

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

• Kubernetes - https://kubernetes.io/

72

DockerSwarm

• Permitecrearuncluster deDockerHostssobrelosquedesplegarcontenedoresconcapacidadespara:

73

• Altadisponibilidad.

• Escalado• Balanceodecarga.

• Actualizacionesprogresivas.

Kubernetes

• DesarrolladoporGoogleyliberadocomocódigoabierto.

• Despliegue,escaladoygestióndeaplicacionescontainerizadas.

• Curvadeaprendizajemáselevadaperomayoradopción.

74

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

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

MásAlládeDocker:Microservicios (II)

• Lasarquitecturasbasadasenmicroservicios suelenutilizar:– Contenedoresparaencapsularlasdependencias– EstrategiasdeCI/CDparahaceractualizacionesfrecuentes.

77

• Aplicacióncomounconjuntodecontenedoresqueejecutanlosmicroservicios ypuedenserescaladosyactualizados.

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

EjemplodePlataformadeGestióndeAplicacionesBasadasenMicroservicios:

MANTL

79

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

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

Conclusiones

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

• EnescenariosdondetradicionalmentesehavirtualizadoGNU/LinuxsobreGNU/Linuxseimponecomounasoluciónefectiva,sinsobrecargasinnecesarias.

• ImpactoenPaaS,arquitecturasbasadasenmicroservicios,serverless.

82

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

top related