Instructor: Cristian O. Giambruni
Requisitos para la inscripción formal en el CFL 410
En informática, un contenedor o container, es una unidad ligera y portátil de software que empaqueta una aplicación y todas sus dependencias, permitiendo que se ejecute de manera consistente en cualquier entorno.

¿Por qué usar contenedores? . Principalmente, para portar nuestra aplicación y ejecutarla de manera consistente, ya sea en nuestra PC o en cualquier entorno de desarrollo. Además, permiten realizar despliegues de forma rápida y segura.
Puede ser una posible solución, al típico problema de EN MI MÁQUINA FUNCIONA.
En los años 1960-1970, IBM introdujo la virtualización en los mainframes, lo que permitió ejecutar múltiples sistemas operativos en una sola máquina física.
En 1992, el programador finlandés Linus Torvalds publicó bajo licencia GNU GPL la versión 0.12 del kernel de Linux. Desde entonces, Linux se considera software libre.
En 2008 surgieron los LinuX Containers , también conocidos por su acrónimo LXC. Utilizando características como cgroups y namespaces que ya estaban disponibles a partir de la versión 2.6.29 del kernel de Linux, LXC permite desarrollar una tecnología de virtualización a nivel de sistema operativo. LXC permite que una máquina que ejecuta Linux corra múltiples instancias de espacios de usuario aislados, dando origen al término contenedor.
En 2013 se liberó Docker como código abierto, inicialmente basado en LXC. Pero al año siguiente, con el lanzamiento de la versión 0.9 de Docker, dejó de utilizar LXC para usar su propio motor llamado libcontainer, escrito en Go.
Desde entonces, Docker ha crecido en popularidad, convirtiéndose en uno de los proyectos con más estrellas en GitHub, más forks y con miles de colaboradores.
A menudo, al introducir el concepto de contenedor, surge la confusión sobre si se trata de un tipo de máquina virtual. Repasemos los conceptos de máquina virtual:
Una máquina virtual (VM) es un entorno aislado que emula un sistema informático completo (a nivel hardware), permitiendo ejecutar un sistema operativo y aplicaciones como si fueran una computadora física, utilizando recursos compartidos del hardware del host.
Cada máquina virtual requiere la asignación de recursos como procesador, disco, memoria, red, etc., y un sistema operativo. Para gestionar estas tareas se necesita un hipervisor.
Cada máquina virtual requiere un sistema operativo completo (kernel, utilidades del sistema, interfaz de usuario, etc) para funcionar.
Esto implica que, para correr solo una aplicación o parte de una aplicación mas grande, se debe instalar y mantener un SO completo por cada VM. A menudo, el SO consume más recursos que la propia aplicación.
Cada container, utiliza el kernel del sistema operativo del host. Solo contienen las aplicaciones y sus dependencias necesarias para funcionar.
Los contenedores se aíslan a nivel de proceso, utilizando características del kernel del host para su funcionamiento. Es posible que entre contenedores compartan dependencias y sistemas de archivos si es necesario.
Además, podemos limitar el uso de CPU y memoria para cada contenedor, de manera similar a una máquina virtual.
Debido a su eficiencia, la arquitectura de contenedores se considera una forma de virtualización liviana.
| Caracteristica | VM | Container |
|---|---|---|
| Aislamiento | Completo (a nivel hw) | Liviano (proceso) |
| Recursos | Mas uso de recursos | Menos uso de recursos |
| Arranque | Lento | Rapido |
| SO | Multiples SO | Mismo kernel host |
| Portabilidad | Limitada, depende del hipervisor | Alta, ejecutable en cualquier entorno |
| Seguridad | Fuerte aislamiento de seguridad | Aislamiento a nivel de proceso |
Esto no significa que las máquinas virtuales sean obsoletas en comparación con los contenedores. En algunas situaciones, el uso de contenedores no será posible. Por ejemplo, cuando se necesitan diferentes sistemas operativos para cada aplicación.
Existen varias tecnologías que utilizan contenedores, entre ellas: LXC, LXD, Docker, Podman. Además, hay herramientas de orquestación y gestión de contenedores como Docker Swarm, Kubernetes, OKD.
Docker es una plataforma de código abierto que facilita la creación, despliegue y ejecución de aplicaciones dentro de contenedores. Docker permite a los desarrolladores empaquetar una aplicación con todas sus dependencias en un contenedor, asegurando que la aplicación se ejecute de manera consistente en cualquier entorno.
Docker, es hoy en día la tecnología de contenedores mas utilizada y más popular.
dockerd es el daemon o servicio de Docker.
Docker ha transformado la forma en que las aplicaciones se desarrollan, despliegan y gestionan. Ofrece una solución robusta y eficiente para la virtualización a nivel de sistema operativo, permitiendo a los desarrolladores y equipos de operaciones trabajar de manera más ágil y efectiva. Con una comprensión clara de los componentes y beneficios de Docker, estaremos listos para sumergirnos en la parte práctica y experimentar de primera mano cómo Docker puede simplificar y mejorar nuestros flujos de trabajo.
Docker es actualmente el sistema de gestión de contenedores más popular, pero no el único.
El objetivo de LXC es crear un entorno lo más parecido posible a una instalación estándar de Linux pero sin la necesidad de un kernel independiente. [1]
Podman es una herramienta nativa de Linux, de código abierto y sin daemon, diseñada para facilitar la búsqueda, construcción, compartición y despliegue de aplicaciones utilizando contenedores.[1]
Docker está disponible para las plataformas mas populares; Windows, GNU/Linux y MacOS.
En el curso veremos el uso de Docker CLI, ya que no siempre podemos contar con una interface gráfica, ejemplo cuando se corre en servidores.
Una vez descargado el instalador, al instalar se verán las siguientes pantallas:
Debemos aceptar los términos.
Elegimos una opción.
Podemos continuar sin iniciar sesión ni registrarnos. Pero luego nos pedirá la sesión para descargar las imágenes.
Es importante arrancar el Docker Engine antes de usar Docker. Sino dará un error:
DesktopLinuxEngine: The system cannot find the file specified.
Una vez instalado y corriendo. Es posible ejecutar comandos docker desde una consola de PowerShell (PS).
Para consultar la versión instalada ejecutamos:
docker --version
docker run hello-world
Vista desde Docker Desktop. Containers:
Vista desde Docker Desktop. Images:
En estos laboratorios aprenderemos a instalar Docker y daremos los primeros pasos con una terminal de Docker y la terminal de bash sobre un GNU/Linux Ubuntu.