Guía de contenedores de Linux: una introducción a los contenedores

click fraud protection

Los contenedores han sido una palabra de moda durante años... pero ¿qué son exactamente?

Los contenedores son un método para ejecutar aplicaciones virtualizadas en su computadora, similar a las máquinas virtuales, pero utilizando un conjunto diferente de tecnologías subyacentes. Pueden ser complejos de entender, pero son esenciales para ejecutar todo, desde Minecraft servidores de Google. Y le mostraremos cómo configurarlos.

Usaremos Linux, un sistema operativo creado centrándose en la portabilidad, la modularidad y la estabilidad. Linux está en todo, desde servidores hasta microondas y consolas de videojuegos. Los contenedores no se limitan a ejecutarse en Linux, pero las tecnologías detrás de ellos se adaptan mejor y funcionan mejor en Linux. Si eres nuevo en Linux, te recomendamos que consultes nuestro Guía para principiantes antes de sumergirse.

¿Son los contenedores máquinas virtuales?

Los contenedores pueden ser un tema complejo, pero es mejor comenzar con un punto clave: un contenedor es

no una máquina virtual. Una máquina virtual es una versión simulada de un hardware específico y su software que se ejecuta en lo que se conoce como hipervisor. Si alguna vez ha utilizado software como VirtualBox o multipaso, entonces has utilizado un hipervisor.

El hipervisor normalmente se ejecuta como su propio sistema operativo (conocido como hipervisor de tipo 1) o dentro de los límites de otro sistema operativo como Windows o Ubuntu (un hipervisor de tipo 2). La responsabilidad del hipervisor es presentar al sistema operativo invitado el hardware simulado que necesita para ejecutarse. Luego, el sistema operativo completo puede ejecutarse encima. Esto incluye todo, desde una CPU y RAM simuladas hasta buses de datos, unidades de disco o adaptadores de red. Esta simulación es costosa desde el punto de vista computacional, por lo que las máquinas virtuales suelen tener una sobrecarga significativa.

Entonces, ¿qué es un contenedor?

Un contenedor es similar a una máquina virtual en que contiene y ejecuta software en un entorno aislado en un sistema host. Sin embargo, los contenedores reemplazan la virtualización de hardware tradicional al depender directamente del sistema operativo host. Los contenedores comparten las bibliotecas y los archivos binarios del sistema operativo host y solo tienen los recursos y dependencias necesarios para ejecutar la aplicación específica que contienen. Esto significa que no hay necesidad de un sistema operativo completo por contenedor, ya que todos los contenedores que se ejecutan en un El sistema puede compartir el sistema operativo de host único y al mismo tiempo conservar la segregación que se obtiene con el sistema virtual. máquinas.

Los contenedores acceden al sistema operativo host a través de un motor de contenedores, que administra los contenedores en ejecución y controla su acceso al sistema operativo subyacente. Esto podría incluir hacer cumplir la seguridad entre contenedores y otorgar o denegar acceso a archivos del sistema operativo o conexiones de red.

¿Cuáles son algunas ventajas y desventajas del uso de contenedores?

Si bien las máquinas virtuales y los contenedores son similares, el uso de contenedores tiene sus inconvenientes. Por un lado, las máquinas virtuales se consideran más seguras, ya que la superficie de ataque para "escapar" de la máquina virtual es significativamente más pequeña y más difícil de penetrar. Un contenedor puede no ser adecuado, por ejemplo, para probar malware.

El principal beneficio de usar contenedores es que son livianos, lo que evita la necesidad de virtualizar un sistema operativo completo, lo que significa tiempos de inicio mínimos y una sobrecarga reducida del sistema. Esto significa que se pueden ejecutar muchos más contenedores en un host, lo que no sería posible con máquinas virtuales.

Como los contenedores no requieren un sistema operativo completo, pueden empaquetarse fácilmente en imágenes más pequeñas y distribuirse. Mientras que una imagen completa de una máquina virtual puede tener fácilmente decenas de gigabytes, los contenedores pueden venir en imágenes de tan solo 15 KB. Esto hace que sea extremadamente fácil distribuir y utilizar contenedores. Lo demostraremos ejecutando algunos contenedores de ejemplo simples en Docker.

Instalación de ventana acoplable

Eso es mucha teoría, así que seamos prácticos. Para mostrarle cómo configurar un contenedor, instalaremos Docker en Ubuntu 23.10 y lo usaremos para ejecutar un contenedor Hello World simple. Nuestros pasos se prueban en una máquina virtual, pero también puede realizar un arranque dual desde su PC con Windows o usar una gran computadora portátil para Linux.

Docker se ha convertido rápidamente en la herramienta de facto para la contenedorización. Si bien existen otras herramientas, Docker se adopta ampliamente y es perfecto para todas las aplicaciones excepto las más exigentes. Hay documentación sobre las diferentes formas de instalar Docker, pero usaremos el script de instalación conveniente. Este comando descargará un script de get.docker.com a su máquina local:

$ curl -fsSL https://get.docker.com -o get-docker.sh

Luego puede ejecutar este script para instalar Docker. Puede verificar que Docker esté instalado correctamente verificando la versión con:

$ sudo sh ./get-docker.sh

Seguido de una verificación de versión con:

$ sudo docker version

También puedes verificar que el servicio Docker se esté ejecutando en segundo plano con:

$ sudo systemctl status docker

Debería indicar "activo (en ejecución)" en texto verde, como se resalta en la captura de pantalla a continuación. La versión del motor Docker también debería imprimirse sin errores.

Ejecutando un ejemplo simple

Ahora que Docker está instalado, puedes usarlo para descargar una imagen de contenedor. Las imágenes de contenedores se parecen mucho a los ISO para máquinas virtuales, excepto que suelen ser más pequeñas y más fáciles de construir. Descargue una imagen de contenedor simple de hola mundo con el siguiente comando:

$ sudo docker pull hello-world

Una vez descargada esa imagen, puede verificarla enumerando las imágenes descargadas en su sistema usando lo siguiente:

$ sudo docker images

Ahora deberías ver hello-world descargado. Tenga en cuenta el tamaño muy pequeño (13 Kb en nuestra máquina de prueba), así como su etiqueta. La etiqueta de una imagen es efectivamente su versión. De forma predeterminada, Docker descargará la última versión de una imagen. Ejecute un contenedor basado en esta imagen usando:

$ sudo docker run hello-world: latest

Esto generará el discurso del hola mundo de Dockers, que se ejecuta desde un programa C muy pequeño (que puedes consultar en GitHub).

Felicidades; ¡Has ejecutado tu primer contenedor! En este caso, el programa generó su resultado y finalizó su ejecución. El contenedor ahora está inactivo y ya no está en funcionamiento.

Cómo mantener vivos los contenedores

Después de ejecutar un contenedor básico, ahora podemos crear un ejemplo más complejo que no sale inmediatamente una vez que se completa una tarea. Los contenedores a menudo se construyen en torno a un solo proceso, lo que puede generar más procesos. Una vez que este proceso base salga, todo el contenedor saldrá con él. Esto puede parecer una limitación, pero en realidad es muy similar a cómo funcionan los sistemas init en el kernel completo de Linux.

Para ejecutar un ejemplo persistente, podemos extraer una imagen de Nginx, que es un servidor web utilizado para alojar un porcentaje significativo de los sitios web del mundo. Elegimos Nginx para este ejemplo porque es simple, no requiere configuración avanzada y es liviano. Descargue la última imagen de Nginx con el siguiente comando:

$ sudo docker pull nginx

Hemos agregado el -pag marque aquí para configurar el reenvío de puertos desde el contenedor al sistema operativo host. El puerto 80 se utiliza para tráfico HTTP (es decir, web) no cifrado. Esto le permitirá acceder al contenedor desde su máquina host:

$ sudo docker run -p 80:80 nginx

Este comando se ejecutará en su terminal en modo adjunto, lo que significa que el contenedor está literalmente conectado a su terminal, por lo que todos los registros del contenedor se imprimirán allí. Una vez que el contenedor se haya puesto en marcha, abra http://localhost en su navegador web. Verá una pantalla de bienvenida de Nginx similar a la siguiente:

El contenedor Nginx ahora se está ejecutando dentro de su motor de contenedor. Mientras Nginx se ejecuta en modo adjunto, solo continuará ejecutándose mientras esté abierto. Puede salir del contenedor Nginx presionando Ctrl+C en tu terminal.

Cómo ejecutar contenedores en segundo plano

Para ejecutar Nginx en segundo plano, agregaremos otra bandera, -d, para modo independiente. Esto iniciará el contenedor desconectado de su terminal, lo que significa que estará en segundo plano. Por ejemplo:

$ sudo docker run -d -p 80:80 nginx

Puede enumerar los contenedores en ejecución en un sistema. Observe cómo su contenedor Nginx ahora se ejecuta en segundo plano y se le ha asignado una ID.

$ sudo docker ps

Un contenedor en segundo plano en ejecución se puede eliminar utilizando su ID. También puede notar que al contenedor se le ha dado un nombre. Cuando no se especifica uno, Docker le dará a cada contenedor un nombre único y aleatorio.

$ sudo docker kill 

Sin embargo, puedes probar esto con algunas imágenes más interesantes. Hay muchos disponibles en el Centro acoplable, que funciona como un depósito central para imágenes de contenedores públicos.

Profundizando con contenedores

Esta ha sido una breve introducción a los contenedores. Los contenedores pueden ser infinitamente complejos, pero son un componente fundamental de los sistemas altamente distribuidos que ejecutan gran parte de nuestra Internet moderna. Sin embargo, ese poder no impide su uso a menor escala. La familiaridad con los conceptos básicos de los contenedores y Docker puede ser la puerta de entrada para ejecutar servicios locales útiles como un Servidor de Minecraft o Plex en una PC vieja.