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