Docker
From zero almost 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?
• Ejemplo con ASP.NET y Azure
• 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
@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
@leomicheloni
Demo
@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
Comando útiles
@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
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

Docker dotnet netbaires

  • 1.
    Docker From zero almostto Hero Leonardo Micheloni @leomicheloni
  • 2.
    Agenda • ¿Qué esDocker? • ¿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? • Ejemplo con ASP.NET y Azure • Otras cosas • compose • volumes • orquestación @leomicheloni
  • 3.
    Qué es Docker •Una empresa • Un software para gestionar contenedores • No es el único • Ofrece un servicio pago @leomicheloni
  • 4.
    Qué es uncontenedor? @leomicheloni
  • 5.
    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
  • 6.
    Capacidades • Ejecutar unaapp sin instalar nada: • Redis, Rabbit, PHP, Mongo, etc. • Platform specific software • Desarrollar en un entorno diferente. • Desplegar lo mismo que se desarrolló. @leomicheloni
  • 7.
    Diferencias con unamáquina virtual http://apachebooster.com/kb/wp-content/uploads/2017/09/VM_vs_Docker.png @leomicheloni
  • 8.
    En Windows Windows 10pro 64 Windows 10 ent 64 Hyper-V @leomicheloni
  • 9.
  • 10.
    Qué es unaimagen? • 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.
  • 11.
    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
  • 12.
    Primer contacto Todos losobjetos se identifican con un hash o un nombre (opcional) @leomicheloni
  • 13.
    Primer contacto • Dockerrun [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 @leomicheloni
  • 14.
  • 15.
    Registry • De dondese bajan imágenes • Docker hace una copia local • Por defecto dockerhub • Podemos usar uno propio • Ej: Azure container registry @leomicheloni
  • 16.
  • 17.
    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
  • 18.
    Creación de unaimagen • Dockerfile • Es una sucesión de “layers” • Provee un lenguaje común sobre el entorno de ejecución @leomicheloni
  • 19.
    Imágenes base endockerhub • Las imágenes “oficiales” son las raíz • Ej. Ubuntu @leomicheloni
  • 20.
  • 21.
    Resumen • Docker esun 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
  • 22.
  • 23.
  • 24.
    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
  • 25.
    Compose • docker-compose.yaml • Esequivalente 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.
  • 28.
  • 29.
    Orquestación • Cuando tenemosuna app con muchos contenedores es complejo manejar • Despliegue • Escalabilidad • Dependencias • Resilencia • Para esto existen los orquestadores • Swarn • Kubernetes • Service fabric @leomicheloni
  • 30.
  • 31.
    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

  • #8 Linux en Windows https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/
  • #9 VM: you can size it. VM: hypervisor => software, hardware
  • #14 Docker image ls Docker container ls Docker ps Docker images Docker ps -a
  • #15 Docker run hello-world
  • #16 Docker –it alpine Docker –name test alpine Reusar containers docker run –n hello hello-world
  • #18 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
  • #19 Docker container inspect nro
  • #20 Docker build –t test:1 .
  • #26 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
  • #29 Ejemplo de lanzar sqlserver con el volumen montado