Slides from presentation about Docker and dotnet for Dotnet Baires community.
Source code used during the talk can be found here https://github.com/leomicheloni/dotnet-docker-azure
2. 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
3. Qué es Docker
• Una empresa
• Un software para gestionar contenedores
• No es el único
• Ofrece un servicio pago
@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 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
7. Diferencias con una máquina virtual
http://apachebooster.com/kb/wp-content/uploads/2017/09/VM_vs_Docker.png
@leomicheloni
10. 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.
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
13. 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
15. Registry
• De donde se bajan imágenes
• Docker hace una copia local
• Por defecto dockerhub
• Podemos usar uno propio
• Ej: Azure container registry
@leomicheloni
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 una imagen
• Dockerfile
• Es una sucesión de “layers”
• Provee un lenguaje común sobre el entorno de ejecución
@leomicheloni
19. Imágenes base en dockerhub
• Las imágenes “oficiales” son las raíz
• Ej. Ubuntu
@leomicheloni
21. 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
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
• 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
29. 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
Linux en Windows
https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/
VM: you can size it.
VM: hypervisor => software, hardware
Docker image ls
Docker container ls
Docker ps
Docker images
Docker ps -a
Docker run hello-world
Docker –it alpine
Docker –name test alpine
Reusar containers
docker run –n hello hello-world
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