Skip to content

Instantly share code, notes, and snippets.

@JoseIgnacioFernandezMamani
Last active April 27, 2024 17:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JoseIgnacioFernandezMamani/5e55d9d3cf6c343fceb709cd06f402fe to your computer and use it in GitHub Desktop.
Save JoseIgnacioFernandezMamani/5e55d9d3cf6c343fceb709cd06f402fe to your computer and use it in GitHub Desktop.
docker

Docker

¿Qué es Docker?

Docker es una plataforma de código abierto que permite a los desarrolladores empaquetar, enviar y ejecutar aplicaciones en contenedores. Los contenedores son una forma de virtualización ligera que facilita la implementación de aplicaciones en entornos aislados.

¿Qué es un contenedor?

Un contenedor es una unidad de software que empaqueta una aplicación y todas sus dependencias para que la aplicación se ejecute de manera rápida y confiable en cualquier entorno. Los contenedores aíslan la aplicación del entorno subyacente, lo que garantiza que la aplicación se ejecute de la misma manera, independientemente de las diferencias entre los entornos.

¿Cuál es la diferencia entre una máquina virtual y un contenedor?

Las máquinas virtuales (VM) y los contenedores son tecnologías de virtualización que permiten a los desarrolladores crear entornos aislados para ejecutar aplicaciones. La principal diferencia entre una máquina virtual y un contenedor es que una máquina virtual incluye un sistema operativo completo, mientras que un contenedor solo incluye la aplicación y sus dependencias.

Como funciona la ejecución de aplicaciones

Como se ejecutan aplicaciones?

En un entorno tradicional, las aplicaciones se ejecutan en un servidor físico con un sistema operativo que proporciona los recursos necesarios, como el motor de bases de datos y Node.js. Sin embargo, si se necesita aislar aplicaciones para evitar conflictos de recursos, tradicionalmente se requeriría la instalación de múltiples servidores.

operation-SO isolation

El uso de maquinas virtuales

Hipervisores

software que permite la virtualización, es decir, la ejecución de múltiples sistemas operativos (máquinas virtuales) en una sola máquina física.

hipervisor

Hipervisores Tipo 1 (Bare-Metal)

También conocidos como hipervisores nativos o de metal desnudo. Se instalan y ejecutan directamente sobre el hardware físico, sin necesidad de un sistema operativo host. Ejemplos: VMware ESXi, Microsoft Hyper-V, Citrix Hypervisor.

Hipervisores Tipo 2 (Hosted)

Se ejecutan como una aplicación dentro de un sistema operativo host. Deben acceder a los recursos de hardware de forma indirecta, a través del sistema operativo host. Tienen un rendimiento y seguridad ligeramente inferiores a los hipervisores tipo 1.Más fáciles de instalar y configurar que los tipo 1. Ejemplos: VMware Workstation, Virtualbox.

types-of-hipervisors

Con este esquema, podría surgir la necesidad de utilizar 5 sistemas operativos exactamente iguales en una única infraestructura de hardware. Sin embargo, esto sería costoso e innecesario, ya que instanciar el mismo kernel 5 veces consumiría demasiados recursos.

5-SO

Por otro lado, si empleamos el esquema de Docker, podemos prescindir de los hipervisores y utilizar el motor de Docker para ejecutar varios contenedores con sistemas operativos independientes.

engine-docker

¿Por qué son más eficientes los contenedores?

Todos los sistemas basados en UNIX, como Ubuntu, Alpine y Fedora, comparten un kernel común. Los contenedores aprovechan esta característica y utilizan el kernel base del sistema operativo. Esto significa que los contenedores no necesitan instanciar un kernel aislado e independiente, como lo hacen las máquinas virtuales, lo que los hace más pequeños y eficientes.

kernel-SOs

Además, el kernel, que es el software encargado de administrar los recursos del hardware, proporciona dos funcionalidades clave que permiten el aislamiento y la asignación de recursos:

  • Espacios de nombres: Los espacios de nombres son una técnica que separa recursos del sistema, como procesos o sistemas de archivos, para proporcionar aislamiento a los procesos, dándoles la ilusión de operar de forma independiente dentro de su propio entorno.
  • Grupos de control (cgroups): Asignación de recursos a determinados grupos de procesos, esta asignación se realiza de acuerdo al grupo de procesos al que pertenece.

Estas características garantizan que los contenedores puedan ejecutarse de manera aislada y segura, utilizando recursos de forma eficiente.

MV-contenedores

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment