Sunteți pe pagina 1din 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

@leomicheloni http://apachebooster.com/kb/wp-content/uploads/2017/09/VM_vs_Docker.png
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.

@leomicheloni
https://images.techhive.com/images/article/2016/06/docker-images-vs-containers-100664049-large.idge.png
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

S-ar putea să vă placă și