Fundamentos y usos prácticos de Docker

Clase 1 : Introducción a contenedores Docker

Temas de clase 1

Introducción a contenedores Docker

Exportar clase

Introducción al curso

Presentación

Instructor: Cristian O. Giambruni

Organización del curso

  • Apuntes de clases teóricas: docker.idepba.com.ar
  • Entre uno y tres laboratorios luego de la explicación teórica
  • Trabajo final entregable a final de curso
  • Notificaciones mediante grupo WhatsApp/Telegram

Contenidos y alcance

  • Introducción a contenedores Docker
  • Conceptos básicos de imágenes Docker
  • Dockerfile
  • Redes en Docker
  • Volúmenes y persistencia en Docker
  • Docker Compose
  • Composes útiles

Requisitos inscripción

Requisitos para la inscripción formal en el CFL 410

Objetivos de la clase

Objetivos clase de hoy

  • Comprender el concepto de contenedor.
  • Identificar las ventajas de utilizar contenedores en comparación con otras tecnologías de virtualización.
  • Instalar Docker y crear un contenedor básico.

Introducción a contenedores

Contenedor

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.

Un poco de historia

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.

Máquinas virtuales

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.

Arquitectura Máquinas virtuales

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.

Arquitectura Contenedores

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.

Containers vs. VM

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.

Casos de usos de contenedores

  • Desarrollo de microservicios: Adecuados para arquitecturas de microservicios donde cada componente de la aplicación se despliega de manera independiente.
  • Integración Continua y Despliegue Continuo: Facilitan la creación de pipelines de CI/CD, permitiendo despliegues rápidos y frecuentes.
  • Containerización de aplicaciones: Se puede modernizar la infraestructura de aplicaciones no pensadas para contenedores. La conteinerización ayuda a la portabilidad y automatización de despliegues.
  • Despliegue sencillo de aplicaciones: Con solo copiar y pegar una instrucción o un archivo de texto es posible tener aplicaciones complejas deployadas para ambientes de prueba rápidamente.

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.

Consultas

Introducción a Docker

¿Qué es Docker?

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.

¿Por qué Docker?

  • Comunidad: Existe una gran comunidad aportando tanto al desarrollo de Docker como imágenes Docker. Hay numerosos foros, tutoriales y cursos en línea disponibles.
  • Facilidad de uso: Ofrece una interfaz de usuario sencilla y comandos intuitivos. Diversas herramientas gráficas.
  • Soporte empresarial: Muchas empresas ofrecen soporte y soluciones basadas en Docker para entorno empresariales.
  • Licencia: Docker no requiere una licencia para su uso.
  • Compatibilidad: Docker es compatible con diversas plataformas, sistemas operativos y arquitecturas, lo que facilita su instalación e implementación.

Componentes principales de Docker

Docker engine: Docker engine actúa como una aplicación cliente-servidor con:
  • Docker Daemon: Llamado dockerd es el daemon o servicio de Docker.
  • Docker API Es una api REST que permite la interacción entre la cli con el Docker engine.
  • Interfaz de usuario:
    • Docker CLI: Es la línea de comandos de Docker. CLI Cheat Sheet.
    • Docker Desktop: Es una app todo-en-uno que proporciona una interfaz gráfica y un entorno completo para trabajar con Docker. En Windows y MacOS incluye una VM liviana basada en Linux. Existen alternativas como Rancher Desktop.

Otros componentes de Docker

  • Images: Una imagen Docker es una plantilla de solo lectura que define qué software y configuraciones incluye el contenedor. Las imágenes son inmutables pero pueden versionar para hacer cambios.
  • Containers: Un contenedor Docker es una instancia en ejecución de una imagen. Los contenedores son entornos aislados donde se ejecutan aplicaciones.
  • Registry: También conocida como DockerHub es un registro o repositorio de imágenes de contenedores públicas y privadas. Los desarrolladores pueden usar Docker Hub para buscar y descargar imágenes, así como para compartir las suyas propias.

Ventajas de Docker

  • Consistencia: Garantiza que la aplicación se ejecute de la misma manera en todos los entornos.
  • Despliegue Rápido: Permite la creación y destrucción rápida de contenedores, lo que acelera el ciclo de desarrollo y despliegue.
  • Facilidad de Integración: Compatible con diversas herramientas y servicios, lo que facilita la integración en flujos de trabajo de CI/CD.

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.

Consultas

Tecnologías de contenedores

Otras tecnologías de contenedores

Docker es actualmente el sistema de gestión de contenedores más popular, pero no el único.

LXC (LinuX Containers)

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]

  • Está basado en la liblxc [2]
  • La versión 5.0 tiene soporte hasta Junio del 2027 [3]
  • Muy utilizada en entornos de virtualización Proxmox VE [4]. ProxmoxVE ofrece una manera fácil e intuitiva de manejar containers LXC, casi como si de una máquina virtual se tratara; asignando recursos como CPU, memoria, etc.

Podman

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]

  • Daemonless: No requiere de un daemon centralizado como Docker, lo que mejora la seguridad al no necesitar ejecutarse con permisos de root y brinda un entorno más ligero.
  • Compatibilidad con Docker: Es compatible con Docker. Casi todos los comandos son idénticos y también es compatible a nivel de imágenes.
  • Ecosistema: Tiene un ecosistema más reducido en comparación con Docker y no es tan popular..
  • Open source: Código abierto. Licencia Apache
  • GUI: Cuenta con una aplicación de escritorio llamada Podman Desktop

Instalación de Docker

Instalación de Docker

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.

Instalando DOcker Desktop en Windows

Una vez descargado el instalador, al instalar se verán las siguientes pantallas:

Instalando DOcker Desktop en Windows

Debemos aceptar los términos.

Instalando DOcker Desktop en Windows

Elegimos una opción.

Instalando DOcker Desktop en Windows

Podemos continuar sin iniciar sesión ni registrarnos. Pero luego nos pedirá la sesión para descargar las imágenes.

Instalando DOcker Desktop en Windows

Instalando DOcker Desktop en Windows

Es importante arrancar el Docker Engine antes de usar Docker. Sino dará un error:

                        DesktopLinuxEngine: The system cannot find the file specified.
                    

Instalando DOcker Desktop en Windows

Instalando DOcker Desktop en Windows

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
                    

Ejecutando nuestro primer contenedor


                        docker run hello-world
                    

Ejecutando nuestro primer contenedor

Vista desde Docker Desktop. Containers:

Ejecutando nuestro primer contenedor

Vista desde Docker Desktop. Images:

Consultas

Probando Docker sin instalar

Probando Docker sin instalar

Podemos usar y probar Docker sin instalarlo usando un navegador web desde el sitio PlayWithDocker. Es necesario iniciar sesión. Luego tendremos 4 horas para poder probar.

Laboratorios de actividad práctica

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.

  • Lab 1.1 - Instalación de Docker
  • Lab 1.2 - Primeros contenedores y comandos Linux