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
• Otras cosas
3. Qué es Docker
• Una empresa
• Un software para gestionar contenedores
• No es el único
• Ofrece un servicio pago
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
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ó
7. Diferencias con una máquina virtual
http://apachebooster.com/kb/wp-content/uploads/2017/09/VM_vs_Docker.png
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.
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
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
15.
16. Registry
• De donde se bajan imágenes
• Docker hace una copia local
• Por defecto dockerhub
• Podemos usar uno propio
• Ej: Azure
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)
19. Creación de una imagen
• dockerfile
• Es una sucesión de “layers”
• Provee un lenguaje común sobre el entorno de ejecución
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
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
23. Resumen
• Un contenedor es un proceso aislado (propia red, fs. Rápido y liviano)
• Una imagen es una molde para crear contenedores (es inmutable)
• Docker es un software para gestionar contenedores
• Un contenedor no es un microservicio y viceversa
• 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
• Una imagen es una forma excelente de distribuir una app porque lo hago
junto con sus dependencias o simplemente un dockerfile
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
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
• Permite hacer transformaciones basado en entornos
26.
27. 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
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