GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo usar Docker de manera práctica (parte 1 - Introducción)

Parte 1:Introducción a la terminología

Prefacio

No es una situación poco común, para los primeros usuarios de conceptos y tecnologías recién introducidos, estar totalmente confundidos cuando estos pueden cambiar fundamentalmente las formas de desarrollar y brindar servicios. Especialmente cuando todo el mundo habla de algo como Docker, y de lo increíble y revolucionario que es. Esta confusión ocurre cuando probamos las cosas desde el principio y nos apresuramos directamente a probarlas sin comprender el concepto completo y los antecedentes de esta tecnología recién introducida.

Esta es la razón por la que puede haber abandonado toda la tendencia de los contenedores de Linux, o porque leyó algún artículo controvertido de los que dicen sí y los detractores. En esta primera parte, de una serie de artículos, haremos todo lo posible para aclarar las cosas y poner todo en la perspectiva correcta para cualquier desarrollador, administrador de sistemas, ingenieros de Q/A o incluso entusiastas que solo necesitan la inspiración adecuada para usar contenedores de Linux. y resolver sus problemas especiales de TI.

Comenzaremos desde el principio, con una descripción necesaria de los eventos y conceptos históricos y luego mostraré cómo podemos comenzar a trabajar con contenedores Docker. De esta forma, podrá comprender "qué condujo a la creación de contenedores", "cuáles son los componentes básicos" y "cómo funcionan".


Cómo surgieron los contenedores

Durante muchos años, los servidores se utilizaron tal cual, con una única configuración de hardware, que contenían un único sistema operativo (SO, para abreviar), para proporcionar miles de sitios web y algunas versiones anteriores de software empresarial en la misma máquina.

Para lograr la escalabilidad necesaria, las empresas necesitaban comprar hardware nuevo y planificar cuidadosamente los pasos para cualquier implementación nueva. En este período de tiempo, la automatización estaba en sus inicios y la mayoría de las configuraciones se realizaban a mano.

Virtualización

Luego apareció la virtualización, que permitió a las personas utilizar el mismo servidor de hardware para poder generar múltiples servidores virtuales para diferentes propósitos y venderlos individualmente. Esto no solo redujo enormemente los costos de propiedad del hardware del servidor, sino que también proporcionó los medios para automatizar y administrar fácilmente cientos de instancias de servidor.

La virtualización es en realidad ensamblar componentes de hardware como CPU, RAM, discos, tarjetas de red, etc. que son emulados por un software especial. Es como construir una PC, con sus componentes principales mencionados anteriormente, dentro de un sistema operativo y ensamblarlos para que funcionen como si fuera una PC real. De esta manera, la PC virtual se convierte en un "invitado" dentro de una PC real que con su sistema operativo se denomina host.

Aunque la virtualización de hardware se introdujo hace aproximadamente 10 años, los desarrolladores y administradores de sistemas la usaron ampliamente en varios tipos de servidores, utilizando la función KVM (Máquina virtual basada en el kernel) que está integrada en el kernel de Linux desde 2007. Con Intel "VT -x" y las extensiones "AMD-V" de AMD que ayudan a crear cualquier número de sistemas operativos virtualizados (limitados solo por los recursos de hardware), cada desarrollador podría crear de manera económica múltiples máquinas virtuales (VM para abreviar) con SO, incluso con diferentes versiones de a ellos. De esta forma, pueden probar sus aplicaciones sin necesidad de comprar un equipo completamente nuevo o varios de ellos, según el sistema operativo que necesiten.

Una de las grandes ventajas de la virtualización es la capacidad de crear instantáneas. Una instantánea es el estado de una máquina virtual en un momento exacto. Puede considerarlo como un estado "congelado" de la máquina virtual en un momento determinado. De esta forma, un desarrollador o un administrador de sistemas puede crear una máquina virtual, instalar un sistema operativo particular y las herramientas que necesita y crear una instantánea de todo. Luego, puede comenzar a probar, configurar o cualquier tarea que necesite realizar y luego volver a la instantánea anterior al instante, en cualquier momento.

Además, las máquinas virtuales se pueden migrar de una máquina host a otra y continuar con su estado de funcionamiento sin ninguna configuración especial. Esto se debe a que toda la máquina virtual es en realidad algunos archivos enormes que generalmente se denominan imágenes. Puede pensar en imágenes, como el archivo ISO de su distribución de Linux favorita. Como el archivo ISO contiene todos los componentes esenciales para ejecutar realmente un sistema operativo completo desde un USB/DVD en vivo, de la misma manera que una imagen de máquina virtual contiene el sistema operativo y los componentes de hardware virtual.

Todo lo anterior creó toda una industria de empresas de alojamiento de servidores privados virtuales (VPS) donde los clientes podían lanzar instantáneamente imágenes preconfiguradas de servidores para cualquier propósito. Estos proveedores de VPS suelen tener 10 o 20 instantáneas de máquinas virtuales en un servidor host principal que se clonan varias veces por solicitud del cliente para proporcionarles los servidores virtuales que necesitan

Contenedores

Como puede imaginar, una máquina virtual es un sistema operativo completo que se ejecuta dentro de un sistema operativo host. Los sistemas operativos invitados, aunque están aislados, comparten y utilizan los recursos de hardware de la máquina host. Algunas veces, hay varios sistemas operativos invitados que ejecutan la misma pila completa de un sistema operativo específico.

Esta situación creó una oportunidad para que los desarrolladores del kernel de Linux y los piratas informáticos presentaran una idea que se llama virtualización de procesos ligeros. Entonces, en lugar de usar un sistema operativo completo, podrían reducir los componentes "innecesarios" del sistema operativo virtual para crear una versión mínima del mismo. Esto condujo a la creación de LXC (Linux Containers).

Antes de profundizar, debemos mencionar que la virtualización de procesos livianos no es algo nuevo. Solaris tiene Zones, BSD tiene jails y hay otras tecnologías similares como OpenVZ. El problema es que frecuentemente cambian de nombre o propósito cuando se utiliza el mismo concepto base en otros proyectos. Es cierto que no todos son iguales, pero los principios fundamentales son más o menos los mismos. Todos quieren aislar, implementar y crear una forma desechable de brindar servicios de software sin la molestia de reconstruir todo y cada vez de abajo hacia arriba.

El proyecto LXC se diferencia de las máquinas virtuales antes mencionadas en que es un entorno de virtualización a nivel de sistema operativo y no un entorno de virtualización de hardware. Ambos hacen lo mismo, pero LXC proporciona virtualización a nivel de sistema operativo a través de un entorno virtual que tiene su propio proceso y espacio de red, en lugar de crear una máquina virtual completa. Como consecuencia, un sistema operativo virtual LXC tiene requisitos de recursos mínimos y se inicia en cuestión de segundos.

Como puede ver en la siguiente imagen, el Ubuntu virtual LXC de la izquierda usa 11 MB en una instalación predeterminada.

Docker

Como de costumbre, las cosas no se detuvieron simplemente eliminando las partes innecesarias de un sistema operativo. Varias tecnologías cobraron vida al ampliar aún más los límites de la virtualización de procesos livianos. En 2013, los desarrolladores de dotCloud (una empresa que luego cambió su nombre a Docker Inc.) presentaron Docker.

Docker es un motor de código abierto cuyo objetivo principal es automatizar la implementación de aplicaciones dentro de contenedores de software y la automatización de la virtualización a nivel del sistema operativo en Linux. Un contenedor docker, a diferencia de una máquina virtual y lxc, no requiere ni incluye un sistema operativo separado. En su lugar, se basa en la funcionalidad del kernel de Linux y utiliza el aislamiento de recursos.

Los contenedores de Docker se crean a partir de imágenes de Docker (recuerde las instantáneas). Puede imaginar un contenedor docker como el estado en vivo de una aplicación web que se ejecuta desde un archivo iso. Pero esta vez la iso, que en nuestro ejemplo es el equivalente a la imagen de la ventana acoplable, contiene solo la aplicación y sus dependencias.

Una gran característica de la ventana acoplable, que discutiremos en la segunda parte, es el archivo de la ventana acoplable. Un archivo acoplable es la receta que contiene todos los pasos necesarios para crear una imagen acoplable. Hay literalmente toneladas de archivos docker "listos para usar" que puede personalizar y usarlos tal como están.

Resumen

Como puede imaginar, el alcance de pasar de servidores completos a la virtualización del sistema operativo y luego a los contenedores es eliminar la carga de construir, implementar y mantener un sistema operativo completo cuando lo que solo necesitan es solo la capa de aplicación.

Con esta introducción, intentamos presentarles algunos eventos fundamentales que nos llevaron a la creación de los contenedores Docker. También traté de simplificar algunos de sus conceptos, para que pueda comprender las diferencias entre las diversas tecnologías de virtualización y dónde se aplican.

La segunda parte, que se publicará la próxima semana, mostrará exactamente cómo podemos instalar y usar contenedores Docker de una manera práctica, así que permanezca atento.


Ubuntu
  1. Cómo instalar y usar Docker en Ubuntu 20.04

  2. Cómo usar Docker Compose

  3. Cómo usar un Dockerfile para crear una imagen de Docker

  4. Cómo utilizar el comando de inspección de Docker

  5. Cómo configurar docker para usar proxy

Cómo instalar y usar Docker Compose en Debian 9

Cómo instalar y usar Docker-Compose en CentOS 7

Docker:Cómo usarlo de manera práctica - Parte 3

Cómo instalar y usar Podman (alternativa de Docker) en Ubuntu 20.04

Cómo instalar y usar Docker en Ubuntu 22.04

Cómo instalar y usar Docker en AlmaLinux 8