Docker es un software para gestionar contenedores ligeros que aíslan procesos. Una imagen es un molde para crear contenedores, mientras que un contenedor es una instancia de ejecución de una imagen. Puedo crear mis propias imágenes mediante Dockerfiles y luego distribuir aplicaciones mediante imágenes que incluyen las dependencias.
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
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
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
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
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