Beruflich Dokumente
Kultur Dokumente
NDICE
IntroduccionaDocker
QueesDocker?
Introduccinacontenedores
ContenedoresvsMquinasvirtuales
ConceptosdeDockeryTerminologa
DockeryelkerneldeLinux
ComoinstalarDocker?
ElclientedeDockeryelDemonio
ContenedoreseimagenesenDocker
Registroyrepositorio
DockerHub
OrquestacindeDocker
BeneficiosdeDocker
IntroduccinalasImgenes
Mostrarlasimgeneslocales
Etiquetasenimgenes
Empezandoconcontenedores
Creaciondeuncontenedor
Procesosdeuncontenedor
Encontrarsuscontenedores
Ejecutandoenmodoindependiente
FundamentosdeDocker
Construccindeimgenes
Capasdeimgenes
Lacapaescribibledelcontenedor
Dockercommit
ElDockerfile
IntroduccionaDocker
QueesDocker?
Dockeresunaplataformaparadesarrollar,entregaryejecutaraplicacionesusandola
tecnologadevirtualizacinporcontenedores.
LaplataformaDockerestcompuestapormltiplesproductos/herramientas
DockerEngine
DockerHub
DockerMachine
DockerSwarm
DockerCompose
Kitematic
Unpocoparaentenderlatecnologadedockernecesitamosentendercmofuncionaba
todoantesdeDocker
Unaaplicacinenunservidorfsico
Enunservidorfsicoesinstaladoelsistemaoperativoysobreestelaaplicacin
Cualessonlosproblemasdeesemodelo?,muchos
Tiemposdedesplieguelentos
Costosexcesivos
Prdidaderecursos
Dificultadparaescalar
Dificultadparamigrar
Atadoaunproveedor
HypervisorbasedVirtualizationotambinconocidocomomquinasvirtuales
Unservidorfsicopuedecontenermltiplesaplicaciones
Cadaaplicacinejecutaunamquinavirtual
Beneficiosdelasmquinasvirtuales
Mejorusodelosrecursoscomunes
Unamquinafsicadivididaenmltiplesmquinasvirtuales
Fcildeescalar
Mquinasvirtualesenlanube
Elasticidadrpida
modelodepagoporuso
Limitacionesdelasmquinasvirtuales
Cadamquinavirtualtodavarequiere
AsignacindeCPU
Almacenamiento
RAM
Unsistemaoperativohuspedcompleto
Entremsmquinasvirtualesejecute,msrecursosnecesita
UnSistemaoperativohuspedsignificaprdidaderecursos
Laportabilidaddelaaplicacinnoestgarantizada
Introduccinacontenedores
Lavirtualizacinbasadaencontenedoresutilizaelkernelenelsistemaoperativoanfitrinpara
ejecutarmltiplesinstanciashusped
Cadainstanciahuespedesllamadauncontenedor
Cadacontenedortienesupropio
Sistemadearchivosraz
Procesos
Memoria
Dispositivos
Puertosdered
ContenedoresvsMquinasvirtuales
Loscontenedoressonmaslivianos
Nonecesitaninstalarunsistemaoperativohuesped
MenorCPU,RAMoespaciodealmacenamientorequerido
Mscontenedorespormquinaquelasmquinasvirtuales
Mejorportabilidad
ConceptosdeDockeryTerminologa
DockeryelkerneldeLinux
ElmotordeDockereselprogramaquepermitequelocontenedoresseanconstruidos,
empaquetadosyejecutados.
ElmotordeDockerusaelespaciodenombresdelKerneldeLinuxyelcontroldegrupos.
Losespaciosdenombrenosdanlosespaciosdetrabajoaislados.
ComoinstalarDocker?
1. Siguelasinstruccionespublicadasenhttps://docs.docker.com/installation
$wgetq0https://get.docker.com|sh
2. Ejecuteelcontenedorhelloworldparaprobarsuinstalacin
$sudodockerrunhelloword
3. Agreguesucuentadeusuarioalgrupodocker
$sudousermodaGdocker<usuario>
4. Salgadelaterminalyvuelvaaingresarparaqueloscambiostenganefecto
5. Verifiquequepuedeejecutarelcontenedorhelloworldsinusarsudo
$dockerrunhelloworld
ElclientedeDockeryelDemonio
Arquitecturacliente/servidor
Elclientetomalasentradasdelusuarioylasenvaaldemonio
Eldemonioconstruye,ejecutaydistribuyeloscontenedores
Elclienteyeldemoniosepuedenejecutarenelmismoanfitrinoendiferentesanfitriones
Clientebajolneadecomandosomedianteunainterfazgrfica(Kitematic)
Revisarlaversindelclienteyeldemonio
$sudodockerversion
ContenedoreseimagenesenDocker
Imgenes
Plantillasdesololecturausadaparacrearcontenedores
ConstruidaporusteduotrosusuariosdeDocker
AlmacenadaenDockerHubosuregistrolocal
Contenedores
plataformadeaplicacionaislada
Contienentodolonecesarioparaejecutarsuaplicacin(librerias,binarios)
Basadaenunaomsimgenes
Registroyrepositorio
UnejemploderegistroesDockerHub.dentrodelregistrolasimgenessonalmacenadasen
repositorios
DockerHub
Eselregistropblicoquecontieneunamplionmerodeimgenesdisponiblesparasuuso
OrquestacindeDocker
TresherramientasparaorquestaraplicacionesdistribuidasconDocker
DockerMachine:Herramientaqueprovisionalosanfitrionesdedockereinstalaelmotor
deDockerenellos.
DockerSwarm:HerramientaqueagrupamuchosMotoresycontenedoresprogramados.
DockerCompose:Herramientaparacrearygestionaraplicacionesmulticontenedores
BeneficiosdeDocker
Separacindepreocupaciones
Losdesarrolladoresseenfocanenconstruirsusaplicaciones
Losadministradoresdesistemasseenfocaneneldeployment
Ciclodedesarrollorpido
Portabilidaddelaaplicacion
Construidoenunentorno,entregadoenotro
Escalabilidad
Fcildesplieguedenuevoscontenedoressiesnecesario
Ejecucindemsaplicacionesenunasolamquina
IntroduccinalasImgenes
LasimgenespuedenserbuscadasenDockerhub,hayunmontndeimgenesdisponiblespara
serusadas
CreaunacuentaenDockerHub,navegaloparabuscarimgenesysuscaractersticas
Lasimagenesconellogodedockersonoficiales
Tagsdelasimagenes
Lasimgenesresidenenvariosrepositorios.
Mostrarlasimgeneslocales
$sudodockerimages
CuandoseestcreandouncontenedorapartirdeunaimagenIntentarausarprimerouna
imagenlocal
Silaimagenlocalnoesencontrada,eldemoniodeDockerbuscarendockerHubamenosque
otroregistroseaespecificado.
Etiquetasenimgenes
Lasimagenessonespecificadasporrepository:tag
Lamismaimagenpuedetenermultiplesetiquetas
Laetiquetapordefectoeslatest
ReviseelrepositorioenDockerHubparaverqueetiquetasestndisponibles
Empezandoconcontenedores
Creaciondeuncontenedor
Useelcomandodockerrun
$sudodockerrun[options][image][command][args]
Laimagenesespeificadaconrespository:tag
Ejemplos
$sudodockerrunubuntu:14.04echoHelloWorld
$sudodockerrunubuntupsax
Ejecutaruncontenedorsimple
1. Ensuterminaescriba
$sudodockerrunubuntu:14.04echoHelloWorld
2. Observelaalida
3. Entoncesescriba
$sudodockerrunubuntu:14.04psax
4. Observelasalida
5. Notequelaejecucinfuemuchomsrpidasisecomparaelprimercontenedorquefue
ejecutad.estoesdebidoalhechodequedockerahoratienelaimagen14.04localmentey
noesnecesariodescargarla.
Contenedoresconlaterminal
Useiytcondockerrun
LamarcailediceadockerqueconecteaSTDIN
(https://es.wikipedia.org/wiki/Entrada_est%C3%A1ndar)enelcontenedor
Lamarcatespecificaqueobtengaunapseudoterminal
IMPORTANTE:Necesitaejecutarunprocesodeterminalcomosucomando(Ej:/bin/bash)
Ejemplo:
$sudodockerrunitubuntu:latest/bin/bash
Ejercicio:Ejecutauncontenedoryaccedealaterminal
1. Creaauncontenedorusandolaimagendeubuntuyeltag14.04yconectedalSTDINya
laterminal.
$sudodockerrunitubuntu:14.04/bin/bash
2. Ensucontenedorcreeunnuevousuariousandosupnombreyapellidocomonombrede
usuario
$sudoadduserminombre
3. Agregueelusuarioalgruposudo
$adduserninombresudo
4. Salgadelconenedor
$exit
5. Notecomoelcontenedorseapaga
6. Denuevoejecute
$sudodockerrunitubuntu:14.04/bin/bash
7. Pruebeencontrarsuusuario
8. Notequeesteyanoexiste
Procesosdeuncontenedor
Uncontenedorsoloseejecutaeltiempoqueelprocesoquehaespecificadocondockerrunse
estejecutando.
SuprocesosiempreesPID1dentrodelcontenedor
IDdelcontenedor
LoscontenedorespuedeserespecificadosusandosuIDonombre
IDgrandeyIDcorto
ElIDcortoynombrepuedenserobtenidosusandoelcomandodockerpsparalistarlos
contenedores
elIDlargoobtenidoinspeccionandouncontenedor
Encontrarsuscontenedores
Usedockerpsparalistarloscontenedores.
Lamarcaaparalistartodosloscontenedores(incluidosloscontenedoresqueestn
detenidos)
Ejecutandoenmodoindependiente
Tambinconocidocomoejecutarabajonivelocomoundemonio
Uselamarcad
Observelasalida,usedockerlogs[containerid]
FundamentosdeDocker
Quehemosaprendido
IntroduccinaDocker
Beneficiosdelavirtualizacinbasadaencontenedores
ConceptosytrminosdeDocker
Ejemplossencillosdecontenedores
Comandos
dockerrun
dockerps
dockerimages
Construccindeimgenes
Vamosavercmopodemosenviarloscambiosquehemoshechoenuncontenedor
Capasdeimgenes
Lasimagenesestncompuestasdemltiplescapas
Unacapaestansolootraimagen
Cadaimagencontieneunacapabase
Dockerusacopiasobreelsistemadeescritura
Lascapassondesololectura
Lacapaescribibledelcontenedor
Dockercreaunacapasuperiorescribibleparaloscontenedores
Lasimagenespadresolosondelectura
Todosloscambiossonhechosenlacapaescribible
Dockercommit
Elcomandodockercommitguardaloscambiosenuncontenedorcomounanueva
imagen
Sintaxis
dockercommit[options][containerID][repository:tag]
Elnombredelrepositoriodeberaserdelaformanombredeusuario/aplicacion
PuedereferenciarelcontenedorconelnombredelcontenedorenlugardelID
Ejemplo:
GuardedelcontenedorconelID984d25f537c5comounanuevaimagenenelrepositorio
johnnytu/myapplication.Etiquetelaimagencomo1.0
dockercommit984d25f537c5johnnytu/myapplication:1.0
Ejercicio:Construyeunanuevaimagen
1. Creauncontenedordesdelaimagendeubuntuyejecuteunaterminaldebash
dockerrun-i-tubuntu:14.04/bin/bash
2. Dentrodelcontenedorinstalecurl
aptgetinstallcurl
3. Salgadelcontenedor
exit
4. Ejecutedockerpsa
ytomenotadelIDdelcontenedor
5. Guardeelcontenedorcomounanuevaimagen,paraelnombredelrepositoriouse
<sunombre>/curl.Etiquetelaimagencomo1.0
dockercommit<IDdelcontenedor><sunombre>/curl:1.0
6. Ejecutedockerimages
yverifiquequepuedeversuimagen
Ejercicio:Usaunanuevaimagen
1. Creeuncontenedorusandolanuevaimagenquehacreadoenelanteriorejercicio.
Ejecute/bin/bashcomoelprocesoparaobteneraccesoalaterminal
dockerrunit<sunombre>/curl:1.0/bin/bash
2. Verifiquequecurlestinstalado
whichcurl
ElDockerfile
Anteriormentehemosaprendidocomoguardarloscambioshechosenuncontenedorcomouna
imagen,otromtodoesusarelDockerfile
IntroduccinalDockerfile
UnDockerfileesunarchivodeconfiguracinquecontienelasinstruccionesparaconstruiruna
imagendedocker
Proporcionaunaformasmasefectivadeconstruirimagenescomparadoconelusode
dockercommit
Seadaptafcilmenteasuscondicionesdeintegracincontinuaprocesosdedespliegue
InstruccionesdeunDockerfile
Lasinstruccionesespecificanquehacercuandoseestconstruyendolaimagen
LasinstruccionesFROMespecificanculdeberaserlaimgenbase
LasinstruccionesRUNespecificanuncomandoaejecutar
#Ejemplodeuncomentario
FROMubuntu:14.04
RUNaptgetinstallvim
RUNaptgetinstallcurl
InstruccionRUN
CadainstruccinRUNejecutaelcomandoenlacapasuperiorescribibleyrealizaun
commitdelaimagen
PuedeagregarmltiplesinstruccionesRUNusando&&
RUNaptgetupdate&&aptgetinstally\
curl\
vim\
openjdk7jdk
DockerBuild
Sintaxis
dockerbuild[options][ruta]
Opcincomnparaetiquetar
dockerbuildt[repositorio:etiqueta][ruta]
Ejercicio
Construyaunaimagenusandolacarpetaactualcomolarutacontextual.Pongalaimagenenel
repositoriojohnnytu/myimageyetiquetelocomo1.0
dockerbuildtjohnnytu/myimage:1.0.
Talcomoloanteriorperouselacarpetamiproyectocomolarutadecontexto
dockerbuildtjohnnytu/myimage:1.0miproyecto
Ejercicio:ConstruyedesdeunDockerfile
Ensudirectoriodeusuario,creeunacarpetallamadatest
Enlacarpetatest,creeunaarchivollamadoDockerfile
Enelarchivoespecifiqueusarubuntu14.04comolaimagenbase
FROMubuntu:14.04
Escribaunainstruccinparainstalarcurlyvimdespusdeunaptgetupdate
RUNaptgetupdate&&aptgetinstallycurl\vim
ConstruyeunaimagendesdeelDockerfile.Deleelrepositorio<sunombre>/testimagey
etiquetelocomo1.0
dockerbuildtjohnnytu/testimage:1.0.
Creeuncontenedorusandosunuevaimagencreadayverifiquequecrulyvimestn
instalados.
InstruccinCMD
CMDdefineuncomandopordefectoparaserejecutadocuandoelcontenedorescreado.
CMDnorealizaaccionesdurantelaconstruccindelaimagen
SoportaFormatoShellyformatoEXEC
SolopuedeserespecificadounavezenelDockerfile
Puedesersobreescritoentiempodeejecucin
Ejemplo
FormatoShell
CMDping127.0.0.1c30
FormatoExec
CMD[ping,127.0.0.1,c,30]
Ejercicio:PruebaelCMD
1. VealacarpetadepruebasyabretuDockerfiledelanteriorejercicio
2. Agregalasiguientelneaalfinal
CMD[ping,127.0.0.1,c,30]
3. Construyelaimagen
dockerbuildt<sunombre>/testimage:1.1
4. Ejecuteuncontenedordesdelaimagenyobservelasalida
dockerrun<sunombre>/testimage:1.1
5. Ejecuteotrocontenedordesdelaimagenyespecifiqueelcomandoecho
dockerrun<sunombre>/testimage:1.1echohelloworld
6. ObservecomoelargumentodelcontenedorsobreescribelainstruccinCMD
InstruccinENTRYPOINT
Defineelcomandoqueejecutarcuandouncontenedoresejecutado
LosargumentosentiempodeejecucinylasinstruccionesCMDsonpasadascomo
parmetrosalainstruccinENTRYPOINT
FormaShellyEXEC
laformaEXECespreferidayaquealaformaShellnopuedeaceptarargumentosen
tiempodeejecucin
Bsicamenteloscontenedoresseejecutancomounejecutable
Ejemplo
ENTRYPPINT[ping]
Administracindeimgenesycontenedores
Iniciarydetenercontenedores
Encuentresuscontenedoresprimerocondockerps
ytomenotadelIDoelnombre
dockerstart
ydockerstop
Ejemplo:
listartodosloscontenedores
dockerpsa
IniciaruncontenedorusandoelID
dockerstart<IDdelcontenedor>
DeteneruncontenedorusandoelID
dockerstop<IDdelcontenedor>
Comoobteneraccesoalaterminaldelcontenedor
Useelcomandodockerexecparainiciarotroprocesodentrodeuncontenedor
Ejecute/bin/bashparateneraccesoalbashshell
dockerexecit[IDdelcontenedor]/bin/bash
Salirdelaterminalnodetendrelcontenedor
Eliminacindecontenedores
Solosepuedeneliminarcontenedoresquehansidodetenidos
useelcomandodockerrm
EspecifiqueelIDdelcontenedoroelnombre
Eliminacindeimgeneslocales
Useelcomandodockerrmi
dockerrmi[IDdelcontenedor]
dockerrmi[repo:tag]
Siunaimagenesetiquetadavariasveces,eliminecadaetiqueta
RepositoriosdeDockerHub
LosusuariospuedencrearsuspropiosrepositoriosenDockerHub
Hayrepositoriospblicosyprivados
Sepuedenenviarimgeneslocalesaunrepositorio
EnviarimgenesaDockerHub
1. Useelcomandodockerpush
2. sintaxis:dockerpush[repo:tag]
3. Elrepositoriolocaldebetenerelmismonombreyetiquetaqueelrepositorioen
DockerHub
Etiquetadodeimgenes
UsadopararenombrarelrepositoriodeunaimagenlocalantesdeenviarloaDockerHub
sintaxis:dockertag[IDdelaimagen][repo:etiqueta]dockertag[repolocal:etiqueta]
[repoDockerHub:etiqueta]
Ejemplo:
EtiquetarunaimagenconelID(trainingtema/testexampleeselnombredelrepositorioen
DockerHub)
dockertagedfc212de17btrainingteam/testexample:1.0
Etiquetarunaimagenuandolaetiquetadelrepositoriolocal
dockertagjohnnytu/testimage:1.5trainingteam/testexample
Ejercicio:EnviaraDockerHub
AccedaasucuentadeDockerHub.
Creeunnuevorepositoriopblicollamadotestexample.
Etiquetesuimagenlocalparadarleelmismonombrequeelrepositorioquehacreadoen
DockerHub.
dockertag<sunombre>/testimage:1.1<sunombre>/testexample:1.1
EnvelanuevaimagenaDockerHub
dockerpush<sunombre>/testexample:1.1
VeaturepositoriodeDockerHubyrevisesiexisteeltag
DistribuciondeimgenesenDockerhub
Volumenesdedocker
Redesbsicasdecontenedores
Dockerenintegracioncontinua