SlideShare una empresa de Scribd logo
1 de 34
Docker
From zero to Hero
Leonardo Micheloni
@leomicheloni
Agenda
• ¿Qué es Docker?
• ¿Qué es una imagen?
• ¿Qué es un contenedor?
• Diferencia entre contenedor y máquina virtual
• ¿Cómo crear nuestras imágenes?
• ¿Cómo crear contenedores?
• Otras cosas
• compose
• volumes
• orquestación
@leomicheloni
Qué es Docker
• Una empresa
• Un software para gestionar contenedores
• No es el único
• Ofrece un servicio pago
@leomicheloni
Qué es un contenedor?
@leomicheloni
The big picture
• Un container es un proceso aislado
• Tiene su propio file system
• Tiene su propia red
• Es la “base” de los microservicios actuales (pero no excluyente)
• Docker <> microservicios
• Microservicios no implica Docker
@leomicheloni
Capacidades
• Ejecutar una app sin instalar nada:
• Redis, Rabbit, PHP, Mongo, etc.
• Platform specific software
• Desarrollar en un entorno diferente.
• Desplegar lo mismo que se desarrolló.
@leomicheloni
Diferencias con una máquina virtual
http://apachebooster.com/kb/wp-content/uploads/2017/09/VM_vs_Docker.png
@leomicheloni
En Windows
Windows 10 pro 64
Windows 10 ent 64
Hyper-V
@leomicheloni
Imágenes y contenedores
https://cdn.dribbble.com/users/531222/screenshots/3477342/ingagro_nomos3-iloveimg-compressed.gif
@leomicheloni
Qué es una imagen?
• Es el “molde” para crear contenedores.
• Son inmutables.
• Se pueden crear localmente.
• Se pueden obtener desde “registros”
• Similar a npm, nuget, etc.
• Se pueden crear a partir de otras imágenes.
Imágenes vs Contenedores
• Imagen
• Es similar a una clase.
• Se utiliza para instanciar contenedores.
• Es inmutable.
• Se pueden crear múltiples “instancias”.
• Contenedor
• Es similar a un objeto.
• Se ejecuta en un entorno aislado.
• Tiene su propia red interna.
• Tiene su propio file system.
• Es donde se ejecuta nuestra app.
• Se encienden y apagan.
https://images.techhive.com/images/article/2016/06/docker-images-vs-containers-100664049-large.idge.png
@leomicheloni
Primer contacto
Todos los objetos se identifican con un hash o un nombre (opcional)
@leomicheloni
Primer contacto
• Docker run [nombre de imagen]
• Ejecuta una image => crear un container y ejecutarlo
• Busca la imagen localmente
• Busca en el registro
• Por defecto hub.docker.com
• Ejecuta el container
• (agregar diagrama)
@leomicheloni
@leomicheloni
Registry
• De donde se bajan imágenes
• Docker hace una copia local
• Por defecto dockerhub
• Podemos usar uno propio
• Ej: Azure container registry
@leomicheloni
Tags y versiones
@leomicheloni
Tags
• Son arbitrarios
• Por defecto se toma “latest”
• No es buena práctica apuntar a “latest” en producción
• “latest” y una versión particular pueden tener el mismo hash (ser lo
mismo)
@leomicheloni
Creación de una imagen
• dockerfile
• Es una sucesión de “layers”
• Provee un lenguaje común sobre el entorno de ejecución
@leomicheloni
Imágenes base en dockerhub
• Las imágenes “oficiales” son las raíz
• Ej. Ubuntu
• Excepto en el caso de Microsoft
• Ej. Microsoft/aspnetcore
@leomicheloni
Ejecutar una app en una imagen
• https://github.com/g0t4/aspnetcore-generator-api
• Publicación local.
• Crear nuestra imagen:
• Seleccionar runtime base.
• Copiar nuestro código publicado en la imagen.
• Indicar punto de inicio.
@leomicheloni
Comando útiles
@leomicheloni
Resumen
• Docker es un software para gestionar contenedores.
• Un contenedor es un proceso aislado (propio file system. Rápido y liviano).
• Una imagen es una molde para crear contenedores (es inmutable).
• Puedo crear mis propias imágenes.
• Existen registros públicos de imágenes.
• En general las imágenes son un conjunto de layers que pueden ser otras
imágenes.
• Un dockerfile me ayuda a agrupar los comandos para crear una imagen.
• Un contenedor es una instancia de una imagen.
• Un contenedor no es un microservicio y viceversa.
• Una imagen es una forma excelente de distribuir una app porque lo hago
junto con sus dependencias o simplemente un dockerfile.
@leomicheloni
Otros temas
@leomicheloni
Volúmenes
• Son “mapeos” un directorio del host hacía el contenedor
• Pueden ser bidireccionales
• Ej. Store de un servidor de bases de datos
• Todo lo que queremos que persista si borramos el contenedor
@leomicheloni
Compose
• docker-compose.yaml
• Es equivalente al dockerfile pero para lanzar contenedores
• Permite definir
• Grupos de contenedores para ser lanzados juntos
• Volúmenes
• Dependencias
• Dockerfile a usar
• Imágenes a usar
• Agrega flexibilidad al despliegue
• Genera un red interna privada
• Permite hacer transformaciones basado en entornos
@leomicheloni
@leomicheloni
@leomicheloni
Visual Studio support and debugging
Orquestación
• Cuando tenemos una app con muchos contenedores es complejo
manejar
• Despliegue
• Escalabilidad
• Dependencias
• Resilencia
• Para esto existen los orquestadores
• Swarn
• Kubernetes
• Service fabric
@leomicheloni
¿Preguntas?
@leomicheloni
Referencias
• https://thenewstack.io/finally-linux-containers-really-will-run-
windows-linuxkit/
• https://github.com/g0t4/aspnetcore-generator-api
• https://dev.to/schwamster/docker-tutorial-with-for-aspnet-core
• https://docs.microsoft.com/en-us/dotnet/core/docker/intro-net-
docker
• https://www.microsoft.com/en-us/cloud-platform/containers
• https://azure.microsoft.com/es-es/services/kubernetes-service/
• https://koukia.ca/configuring-docker-swarm-as-container-
orchestrator-on-windows-1f89a2037dac
@leomicheloni
@leomicheloni

Más contenido relacionado

Similar a FromZeroToHeroDocker

docker.pdf
docker.pdfdocker.pdf
docker.pdfKenn70
 
Docker Birthday Peru #dockerbday
Docker Birthday Peru #dockerbdayDocker Birthday Peru #dockerbday
Docker Birthday Peru #dockerbdayMario IC
 
Instalacion y uso basico de Docker.
Instalacion y uso basico de Docker.Instalacion y uso basico de Docker.
Instalacion y uso basico de Docker.Moisés Elías Araya
 
Azure AI South Azure Cognitive Services en contenedores Docker.pptx
Azure AI South Azure Cognitive Services en contenedores Docker.pptxAzure AI South Azure Cognitive Services en contenedores Docker.pptx
Azure AI South Azure Cognitive Services en contenedores Docker.pptxLuis Beltran
 
VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...
VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...
VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...Francisco Javier Barrena
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA_es
 
Docker para Dummies
Docker para DummiesDocker para Dummies
Docker para DummiesRaúl Unzué
 
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...Carlos Crisóstomo Vals
 
Desarrollando aplicaciones empresariales con Xamarin.Forms, Docker, MVVM y ....
Desarrollando aplicaciones empresariales con Xamarin.Forms, Docker, MVVM y  ....Desarrollando aplicaciones empresariales con Xamarin.Forms, Docker, MVVM y  ....
Desarrollando aplicaciones empresariales con Xamarin.Forms, Docker, MVVM y ....Yhorby Matias
 
Iniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de Maven
Iniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de MavenIniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de Maven
Iniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de MavenVíctor Leonel Orozco López
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJCMicael Gallego
 
Game of pods - Kubernetes
Game of pods - KubernetesGame of pods - Kubernetes
Game of pods - Kubernetesjdezine
 
Inteligencia artificial in house con servicios cognitivos y docker
Inteligencia artificial in house con servicios cognitivos y dockerInteligencia artificial in house con servicios cognitivos y docker
Inteligencia artificial in house con servicios cognitivos y dockerLuis Beltran
 
Docker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos AiresDocker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos AiresBel Rey
 
Que son las nubes de internet
Que son las nubes de  internetQue son las nubes de  internet
Que son las nubes de internetfernanda2795
 

Similar a FromZeroToHeroDocker (20)

Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf
 
docker.pdf
docker.pdfdocker.pdf
docker.pdf
 
Docker Birthday Peru #dockerbday
Docker Birthday Peru #dockerbdayDocker Birthday Peru #dockerbday
Docker Birthday Peru #dockerbday
 
Jug málaga docker 101 - final
Jug málaga   docker 101 - finalJug málaga   docker 101 - final
Jug málaga docker 101 - final
 
Docker containers-itb-2021
Docker containers-itb-2021Docker containers-itb-2021
Docker containers-itb-2021
 
Instalacion y uso basico de Docker.
Instalacion y uso basico de Docker.Instalacion y uso basico de Docker.
Instalacion y uso basico de Docker.
 
Azure AI South Azure Cognitive Services en contenedores Docker.pptx
Azure AI South Azure Cognitive Services en contenedores Docker.pptxAzure AI South Azure Cognitive Services en contenedores Docker.pptx
Azure AI South Azure Cognitive Services en contenedores Docker.pptx
 
VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...
VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...
VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a Docker
 
Docker para Dummies
Docker para DummiesDocker para Dummies
Docker para Dummies
 
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
 
Docker and networking
Docker and networkingDocker and networking
Docker and networking
 
Desarrollando aplicaciones empresariales con Xamarin.Forms, Docker, MVVM y ....
Desarrollando aplicaciones empresariales con Xamarin.Forms, Docker, MVVM y  ....Desarrollando aplicaciones empresariales con Xamarin.Forms, Docker, MVVM y  ....
Desarrollando aplicaciones empresariales con Xamarin.Forms, Docker, MVVM y ....
 
Iniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de Maven
Iniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de MavenIniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de Maven
Iniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de Maven
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJC
 
Game of pods - Kubernetes
Game of pods - KubernetesGame of pods - Kubernetes
Game of pods - Kubernetes
 
Inteligencia artificial in house con servicios cognitivos y docker
Inteligencia artificial in house con servicios cognitivos y dockerInteligencia artificial in house con servicios cognitivos y docker
Inteligencia artificial in house con servicios cognitivos y docker
 
Docker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos AiresDocker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos Aires
 
Que son las nubes de internet
Que son las nubes de  internetQue son las nubes de  internet
Que son las nubes de internet
 
docker.pdf
docker.pdfdocker.pdf
docker.pdf
 

Más de Leonardo Micheloni

Más de Leonardo Micheloni (15)

Docker_K8S_lecciones_netcoreconf_2022.pdf
Docker_K8S_lecciones_netcoreconf_2022.pdfDocker_K8S_lecciones_netcoreconf_2022.pdf
Docker_K8S_lecciones_netcoreconf_2022.pdf
 
Mas alla de javascript con typescript
Mas alla de javascript con typescriptMas alla de javascript con typescript
Mas alla de javascript con typescript
 
Workshop clean code javascript
Workshop clean code javascriptWorkshop clean code javascript
Workshop clean code javascript
 
2019 commit solid typescript
2019 commit solid typescript2019 commit solid typescript
2019 commit solid typescript
 
Solid con typescript
Solid con typescriptSolid con typescript
Solid con typescript
 
Tdd desde las trincheras
Tdd desde las trincherasTdd desde las trincheras
Tdd desde las trincheras
 
Pipeline continuo con VSTS Azure DevOps
Pipeline continuo con VSTS Azure DevOpsPipeline continuo con VSTS Azure DevOps
Pipeline continuo con VSTS Azure DevOps
 
Clean code javascript + live coding
Clean code javascript + live codingClean code javascript + live coding
Clean code javascript + live coding
 
Un viaje por Cosmos DB
Un viaje por Cosmos DBUn viaje por Cosmos DB
Un viaje por Cosmos DB
 
Cosmos db gab2018
Cosmos db gab2018Cosmos db gab2018
Cosmos db gab2018
 
Cosmos DB in a nutshell
Cosmos DB in a nutshellCosmos DB in a nutshell
Cosmos DB in a nutshell
 
Esp8266 iothub Azure data analysis in real time
Esp8266 iothub Azure data analysis in real timeEsp8266 iothub Azure data analysis in real time
Esp8266 iothub Azure data analysis in real time
 
Clean code javascript
Clean code javascriptClean code javascript
Clean code javascript
 
Tdd y pair programming
Tdd y pair programmingTdd y pair programming
Tdd y pair programming
 
Blockchain, smart contracts y azure
Blockchain, smart contracts y azureBlockchain, smart contracts y azure
Blockchain, smart contracts y azure
 

FromZeroToHeroDocker

  • 1.
  • 2. Docker From zero to Hero Leonardo Micheloni @leomicheloni
  • 3. Agenda • ¿Qué es Docker? • ¿Qué es una imagen? • ¿Qué es un contenedor? • Diferencia entre contenedor y máquina virtual • ¿Cómo crear nuestras imágenes? • ¿Cómo crear contenedores? • Otras cosas • compose • volumes • orquestación @leomicheloni
  • 4. Qué es Docker • Una empresa • Un software para gestionar contenedores • No es el único • Ofrece un servicio pago @leomicheloni
  • 5. Qué es un contenedor? @leomicheloni
  • 6. The big picture • Un container es un proceso aislado • Tiene su propio file system • Tiene su propia red • Es la “base” de los microservicios actuales (pero no excluyente) • Docker <> microservicios • Microservicios no implica Docker @leomicheloni
  • 7. Capacidades • Ejecutar una app sin instalar nada: • Redis, Rabbit, PHP, Mongo, etc. • Platform specific software • Desarrollar en un entorno diferente. • Desplegar lo mismo que se desarrolló. @leomicheloni
  • 8. Diferencias con una máquina virtual http://apachebooster.com/kb/wp-content/uploads/2017/09/VM_vs_Docker.png @leomicheloni
  • 9. En Windows Windows 10 pro 64 Windows 10 ent 64 Hyper-V @leomicheloni
  • 11. Qué es una imagen? • Es el “molde” para crear contenedores. • Son inmutables. • Se pueden crear localmente. • Se pueden obtener desde “registros” • Similar a npm, nuget, etc. • Se pueden crear a partir de otras imágenes.
  • 12. Imágenes vs Contenedores • Imagen • Es similar a una clase. • Se utiliza para instanciar contenedores. • Es inmutable. • Se pueden crear múltiples “instancias”. • Contenedor • Es similar a un objeto. • Se ejecuta en un entorno aislado. • Tiene su propia red interna. • Tiene su propio file system. • Es donde se ejecuta nuestra app. • Se encienden y apagan. https://images.techhive.com/images/article/2016/06/docker-images-vs-containers-100664049-large.idge.png @leomicheloni
  • 13. Primer contacto Todos los objetos se identifican con un hash o un nombre (opcional) @leomicheloni
  • 14. Primer contacto • Docker run [nombre de imagen] • Ejecuta una image => crear un container y ejecutarlo • Busca la imagen localmente • Busca en el registro • Por defecto hub.docker.com • Ejecuta el container • (agregar diagrama) @leomicheloni
  • 16. Registry • De donde se bajan imágenes • Docker hace una copia local • Por defecto dockerhub • Podemos usar uno propio • Ej: Azure container registry @leomicheloni
  • 18. Tags • Son arbitrarios • Por defecto se toma “latest” • No es buena práctica apuntar a “latest” en producción • “latest” y una versión particular pueden tener el mismo hash (ser lo mismo) @leomicheloni
  • 19. Creación de una imagen • dockerfile • Es una sucesión de “layers” • Provee un lenguaje común sobre el entorno de ejecución @leomicheloni
  • 20. Imágenes base en dockerhub • Las imágenes “oficiales” son las raíz • Ej. Ubuntu • Excepto en el caso de Microsoft • Ej. Microsoft/aspnetcore @leomicheloni
  • 21. Ejecutar una app en una imagen • https://github.com/g0t4/aspnetcore-generator-api • Publicación local. • Crear nuestra imagen: • Seleccionar runtime base. • Copiar nuestro código publicado en la imagen. • Indicar punto de inicio. @leomicheloni
  • 23. Resumen • Docker es un software para gestionar contenedores. • Un contenedor es un proceso aislado (propio file system. Rápido y liviano). • Una imagen es una molde para crear contenedores (es inmutable). • Puedo crear mis propias imágenes. • Existen registros públicos de imágenes. • En general las imágenes son un conjunto de layers que pueden ser otras imágenes. • Un dockerfile me ayuda a agrupar los comandos para crear una imagen. • Un contenedor es una instancia de una imagen. • Un contenedor no es un microservicio y viceversa. • Una imagen es una forma excelente de distribuir una app porque lo hago junto con sus dependencias o simplemente un dockerfile. @leomicheloni
  • 25. Volúmenes • Son “mapeos” un directorio del host hacía el contenedor • Pueden ser bidireccionales • Ej. Store de un servidor de bases de datos • Todo lo que queremos que persista si borramos el contenedor @leomicheloni
  • 26. Compose • docker-compose.yaml • Es equivalente al dockerfile pero para lanzar contenedores • Permite definir • Grupos de contenedores para ser lanzados juntos • Volúmenes • Dependencias • Dockerfile a usar • Imágenes a usar • Agrega flexibilidad al despliegue • Genera un red interna privada • Permite hacer transformaciones basado en entornos @leomicheloni
  • 27.
  • 30. Visual Studio support and debugging
  • 31. Orquestación • Cuando tenemos una app con muchos contenedores es complejo manejar • Despliegue • Escalabilidad • Dependencias • Resilencia • Para esto existen los orquestadores • Swarn • Kubernetes • Service fabric @leomicheloni
  • 33. Referencias • https://thenewstack.io/finally-linux-containers-really-will-run- windows-linuxkit/ • https://github.com/g0t4/aspnetcore-generator-api • https://dev.to/schwamster/docker-tutorial-with-for-aspnet-core • https://docs.microsoft.com/en-us/dotnet/core/docker/intro-net- docker • https://www.microsoft.com/en-us/cloud-platform/containers • https://azure.microsoft.com/es-es/services/kubernetes-service/ • https://koukia.ca/configuring-docker-swarm-as-container- orchestrator-on-windows-1f89a2037dac @leomicheloni

Notas del editor

  1. Linux en Windows https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/
  2. VM: you can size it. VM: hypervisor => software, hardware
  3. Docker image ls Docker container ls Docker ps Docker images Docker ps -a
  4. Docker run hello-world
  5. Docker –it alpine Docker –name test alpine Reusar containers docker run –n hello hello-world
  6. Las imágenes tiene diferentes tags pero son las mismas Los tags indican “versiones” en general “latest” es la última pero no es recomendable usarla Docker run --rm –it Microsoft/donet-runtime dotnet
  7. Docker container inspect nro
  8. Docker build –t test:1 .
  9. El container tiene su propio file system aislado
  10. docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=P@ssword123' -p 1433:1433 -d microsoft/mssql-server-linux:2017-CU8 docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=P@ssword123' -p 1433:1433 -d -v mssql-server-linux-data:/var/opt/mssql/data microsoft/mssql-server-linux:2017-CU8
  11. Ejemplo de lanzar sqlserver con el volumen montado