Hay algunas preguntas sobre los contenedores , como:
- ¿Qué papel juegan las herramientas de administración de configuración en la infraestructura inmutable?
- ¿Qué problemas resuelve una orquestación de contenedores?
- Contenedores simples de CI / CD en AWS
Mis preguntas :
- ¿Qué es realmente un "contenedor" (en el contexto de DevOps)?
- ¿Por qué se usan?
terminology
containers
Pierre.Vriens
fuente
fuente
Respuestas:
Lo primero que debe saber sobre un contenedor es:
Es, ante todo, un proceso.
Una vez que se entiende eso, uno puede comenzar a comprender cómo los contenedores se comparan y contrastan con las máquinas virtuales. Los contenedores y las máquinas virtuales comparten el aislamiento de sus hosts. El método de aislamiento es la diferencia crítica.
Los procesos de contenedor usan extensiones para el host del núcleo del sistema operativo en el que se ejecutan para aislarse de otros procesos. Otras extensiones también proporcionan aislamiento de disco y recursos. Los contenedores comparten su núcleo y memoria con el sistema operativo host.
Las máquinas virtuales usan un hipervisor para aislar máquinas virtuales de sus hosts. Esta es una capa de software que envía solicitudes de recursos de "invitados" (VM) al hardware. El aislamiento del disco lo proporciona la virtualización del disco. Las máquinas virtuales no comparten un núcleo con el host: cargan sus propios núcleos en el espacio de memoria dedicado a la máquina virtual.
Un impacto importante de esta diferencia es que un contenedor debe ser compatible con el núcleo de su host. Por ejemplo, no es posible ejecutar un contenedor basado en Windows Nano Server en un host de Linux o un contenedor de Ubuntu directamente en un host de Windows. Las máquinas virtuales, por el contrario, pueden ejecutar cualquier núcleo independientemente del sistema operativo host. Al ejecutar un contenedor de Linux en un host de Windows, Docker ejecuta el contenedor en una VM de Linux.
Las diferencias operativas están en la agilidad: los contenedores comienzan y se detienen casi tan rápido como un proceso normal. Las máquinas virtuales son "más pesadas" y requieren recursos dedicados destinados a ellas y tardan más en iniciarse y apagarse.
Los contenedores ofrecen mucha flexibilidad a un modelo operativo DevOps:
fuente
La palabra contenedor se refiere a una tecnología de virtualización liviana disponible en los núcleos modernos de Linux, esta tecnología es muy similar a las cárceles de FreeBSD.
Un kernel de Linux más antiguo, no apto para contenedores, puede ejecutar procesos simultáneamente. Algunos atributos del sistema son privados de procesar, como el entorno del proceso o la memoria del proceso: solo el proceso que posee estos atributos y el propio sistema operativo pueden acceder a estos datos. (Hay muchas lagunas, como algunas implementaciones de ps , ¡pero eso es esencialmente cierto!) Algunos otros atributos se comparten entre los procesos, como el sistema de archivos y las interfaces de red, por ejemplo.
Un kernel de Linux moderno y apto para contenedores puede manejar más atributos del sistema como datos privados asociados a un proceso o grupo de procesos. El contexto resultante es un contenedor y, en lugar de ejecutar un programa en los "contenedores iniciales" utilizando el sistema de archivos y las interfaces de red inicializadas por el sistema operativo, es posible ejecutar procesos en otros contenedores, para que vean un sistema de archivos diferente y un lista diferente de interfaces de red. Por lo tanto, dos procesos que se ejecutan en contenedores distintos solo comparten el núcleo. Quizás esté familiarizado con el comando chroot que puede ejecutar un proceso en una jerarquía de archivos distinta, los contenedores llevan la idea un paso más allá.
Por supuesto, esta es solo una explicación muy burda, pero espero que ayude a aclarar la idea de qué son los contenedores. Ahora, ¿para qué sirven?
Docker implementa una interfaz popular para las capacidades de contenedor de los núcleos de Linux , una utilidad de línea de comandos que se puede usar para producir artefactos que representan sistemas de archivos ( imágenes de docker ) y ejecutar procesos en contenedores donde estos sistemas de archivos son accesibles. Este paquete de software también puede construir sistemas de redes virtuales ad-hoc para permitir que varios contenedores se comuniquen en una red privada.
Las tecnologías basadas en contenedores son convenientes para:
(Como parece familiarizado con otras tecnologías de virtualización como Virtual Box, puede observar que estas tecnologías también pueden abordar convenientemente los tres puntos anteriores. Hoy en día, existe un espectro bastante pequeño de tecnologías de virtualización, y podemos comparar la cuestión de su popularidad en ciertos contextos con la popularidad de los lenguajes de computadora: probablemente depende de los méritos técnicos de cada solución individual, pero también de muchos factores que simplemente denominaré "oportunidad".)
fuente
Por lo general, los contenedores se refieren a algo como los contenedores acoplables que han popularizado el nombre
Cito allí de la definición de docker:
La denominación de raíz proviene de los contenedores de Linux (lxc) cuyo objetivo era aislar un proceso de su sistema host, el primer objetivo era evitar comprometer el proceso para hacerse cargo del sistema host.
Ahora se usan en un ámbito más amplio. En una definición moderna de 'contenedor', lanzará más o menos un paquete para el tiempo de ejecución que ya incluye su aplicación, es middleware subyacente si es necesario y todas las bibliotecas necesarias y asegúrese de que se ejecutará en cualquier sistema compatible.
La segunda ventaja es que permite utilizar múltiples aplicaciones con la misma dependencia en diferentes versiones sin tener que modificar mucho sus variables de entorno para que cargue la correcta.
Poco probable para un sistema VM como una máquina virtual de caja virtual o una instancia EC2 en AWS, los contenedores son virtuales solo en el nivel del sistema de archivos y aislados solo en la pila de memoria. Todavía comparten el mismo host y el sistema operativo bajo ellos arbitrará los ticks de la CPU.
Una máquina virtual es virtual a nivel de hardware, y ejecuta un sistema operativo dentro, un contenedor es virtual a nivel de sistema operativo y ejecuta un proceso dentro.
fuente
De la definición de AWS :
Contenedor es empacar todas las necesidades esenciales necesarias para realizar una tarea / entorno particular, de modo que sea autosuficiente y pueda ejecutarse en cualquier plataforma, lo que quita mucho dolor a la hora de configurar e instalar cosas.
fuente