GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Docker vs containerd vs CRI-O:una comparación en profundidad

Introducción

La implementación de contenedores es un método práctico para garantizar la portabilidad, la escalabilidad y la agilidad en el mundo de DevOps. Desde las pruebas hasta la producción, los contenedores facilitan todo el proceso de desarrollo de software.

Las plataformas para la gestión y orquestación de contenedores están diseñadas para ser intuitivas y sencillas para el usuario final. Sin embargo, las plataformas en sí son complejas y consisten en múltiples proyectos coordinados.

Este artículo explicará las diferencias entre tres partes importantes del ecosistema de gestión de contenedores:Docker, containerd y CRI-O.

El ecosistema de contenedores

Docker y Kubernetes son dos plataformas líderes en el ecosistema de contenedores. Para garantizar la interoperabilidad, la comunidad acordó varios estándares.

Los dos estándares más importantes son:

  • IRC - Interfaz de tiempo de ejecución del contenedor. Permite que Kubernetes sea compatible con diferentes tiempos de ejecución de contenedores, incluido containerd de Docker. .
  • OCI - Iniciativa de contenedores abiertos. Estandariza las imágenes de contenedores y los tiempos de ejecución.

La siguiente infografía muestra cómo CRI y OCI ayudan a conectar Kubernetes con Docker:

Docker

Docker es un conjunto de proyectos de gestión de contenedores ejecutados por la empresa llamada Docker. Estos proyectos trabajan juntos para proporcionar una plataforma integral para la implementación de contenedores.

Los proyectos más importantes son:

  • CLI de la ventana acoplable - Un programa de interfaz de línea de comandos. Los usuarios crean y administran contenedores de Docker emitiendo comandos CLI de Docker.
  • contenedor - Un demonio que escucha los comandos del usuario. Extrae y almacena las imágenes solicitadas y controla el ciclo de vida del contenedor.
  • ejecutar C - Un tiempo de ejecución de contenedor ligero y portátil. runC es un componente de bajo nivel que integra componentes necesarios para que Docker interactúe con el sistema local. Los contenedores que crea esta herramienta son compatibles con OCI.

Imágenes acoplables

Una imagen de Docker es una plantilla de solo lectura que contiene el código de la aplicación, junto con las bibliotecas, las herramientas y otras dependencias necesarias para que la aplicación funcione correctamente. Cuando un usuario emite el comando ejecutar en Docker, la plantilla de imagen se usa para implementar un contenedor de aplicaciones.

Las imágenes de Docker se crean utilizando Dockerfile, un documento de texto que contiene la información de imagen necesaria. La build El comando usa Dockerfile y un contexto para crear la imagen.

Docker para Kubernetes

Container Runtime Interface es un complemento que permite a Kubernetes comunicarse con otros entornos de ejecución de contenedores. Sin embargo, dado que Docker no implementa CRI, Kubernetes introdujo una capa de compatibilidad llamada dockershim. . Esta capa une las dos API.

A partir de la versión 1.23, Kubernetes requiere que los tiempos de ejecución sean compatibles con CRI. Significa que dockershim ahora está obsoleto y Docker Engine ya no es compatible como tiempo de ejecución. Sin embargo, Kubernetes aún puede comunicarse con Docker a través de containerd, que puede cumplir con CRI con un complemento.

Interfaz de tiempo de ejecución del contenedor (CRI)

Aunque Kubernetes es una plataforma de orquestación de contenedores, en el nivel más bajo, también necesita crear y administrar contenedores. Para lograr esto, Kubernetes utiliza tiempos de ejecución de contenedores.

Al principio, Docker Engine era el único tiempo de ejecución disponible en la plataforma. Pero la popularidad de la contenedorización dio lugar a soluciones competitivas y la necesidad de que Kubernetes las admitiera a todas. Con la interfaz de tiempo de ejecución del contenedor complemento, Kubernetes puede comunicarse con todos los tiempos de ejecución principales.

contenedor

containerd es una solución de tiempo de ejecución hecha por Docker. Este demonio está disponible para sistemas operativos Linux y Windows. Como parte del proyecto Docker, containerd gestiona la transferencia y el almacenamiento de imágenes, así como la creación, ejecución y supervisión de contenedores.

Kubernetes no necesita toda la plataforma Docker para usar containerd. Con el complemento de compatibilidad CRI, Kubernetes y containerd pueden comunicarse directamente.

CRI-O

CRI-O es una implementación ligera compatible con OCI de CRI. Fue creado como una alternativa a Docker Engine.

Con CRI-O, puede iniciar pods de Kubernetes y extraer las imágenes necesarias. Sin embargo, no es un tiempo de ejecución. En su lugar, se usa para lanzar otros tiempos de ejecución compatibles con OCI de bajo nivel, como runC o Kata.

Iniciativa de contenedor abierto (OCI)

Docker y otros actores importantes de la industria de contenedores establecieron la Open Container Initiative (OCI) en 2015. La OCI tiene como objetivo crear estándares para formatos y tiempos de ejecución de contenedores. Actualmente, la OCI tiene dos especificaciones:

  • especificación de imagen - la especificación de la imagen que describe cómo crear una imagen compatible con OCI.
  • especificación de tiempo de ejecución - la especificación de tiempo de ejecución para desempaquetar el paquete del sistema de archivos.

ejecutar C

runC es un tiempo de ejecución de contenedor universal creado por Docker. Aunque es parte del conjunto de herramientas de Docker, no requiere la plataforma Docker para ejecutarse.

Algunas características importantes de runC son:

  • Compatibilidad completa con espacios de nombres de Linux.
  • Compatibilidad nativa con funciones de seguridad de Linux, como AppArmor, SELinux, etc.
  • Compatibilidad nativa con contenedores de Windows 10.
  • Los contenedores que crea y administra runC son compatibles con OCI.

Docker
  1. Instale ModSecurity con Apache en un contenedor Docker

  2. Algunos comandos DOCKER

  3. Una introducción a Docker

  4. Cómo ejecutar MySQL en un contenedor Docker

  5. Cómo listar contenedores Docker

Cómo ejecutar PHPMyAdmin en un contenedor Docker

Cómo ejecutar Grafana en un contenedor Docker

Cómo configurar un contenedor Apache Docker

Cómo ejecutar contenedores Docker

Qué hacer si un contenedor Docker sale inmediatamente

Uso de Docker Desktop para administrar un contenedor