Containers vs VMs: What's the difference?

IBM Technology
10 Sept 202008:08

Summary

TLDREl guión compara y contrasta las máquinas virtuales y los contenedores, dos tecnologías fundamentales para la arquitectura de aplicaciones en la nube. Explica que las máquinas virtuales utilizan la virtualización de hardware, aislando máquinas completas, mientras que los contenedores logran la virtualización a nivel de sistema operativo, aislando procesos. Las máquinas virtuales ofrecen flexibilidad infinita de hardware, mientras que los contenedores brindan portabilidad infinita. Ambas tecnologías pueden complementarse, aprovechando sus fortalezas respectivas. El video invita a los espectadores a explorar más sobre estos conceptos clave de la computación en la nube.

Takeaways

  • 🤖 Las máquinas virtuales (VMs) son una forma de virtualización de hardware, donde un hipervisor crea instancias virtualizadas de componentes físicos como procesadores, RAM, almacenamiento y tarjetas de red.
  • 🐳 Los contenedores son una forma de virtualización a nivel de sistema operativo, donde se ejecutan múltiples contenedores aislados sobre un único kernel del sistema operativo anfitrión.
  • 🔒 Las VMs aíslan máquinas virtuales completas, mientras que los contenedores aíslan procesos individuales dentro de un sistema operativo compartido.
  • 💻 Las VMs ofrecen flexibilidad infinita en cuanto a los recursos de hardware virtualizados, mientras que los contenedores brindan portabilidad infinita al definirse mediante un único archivo de configuración.
  • ☁️ Las VMs y los contenedores juegan un papel importante en la arquitectura de aplicaciones nativas de la nube moderna, ya sea por separado o trabajando juntos.
  • 🧱 Las VMs se crean a nivel de hardware mediante un hipervisor, mientras que los contenedores utilizan características del kernel Linux como espacios de nombres y grupos de control.
  • ⚖️ Las VMs proporcionan aislamiento completo de máquinas virtuales, mientras que los contenedores comparten el kernel del sistema operativo anfitrión.
  • 🧪 Los contenedores ofrecen mayor densidad de empaquetado y eficiencia de recursos en comparación con las VMs, lo que los hace ideales para microservicios y aplicaciones nativas de la nube.
  • 🔄 Las VMs son más adecuadas para cargas de trabajo que requieren un sistema operativo completo y personalizado, mientras que los contenedores son mejores para aplicaciones livianas y portátiles.
  • 🤝 Las tecnologías de VMs y contenedores están madurando para permitir su uso conjunto, como se ve en proyectos como KubeVirt y las últimas versiones de Kubernetes y OpenShift.

Q & A

  • ¿Cuál es la principal diferencia entre las máquinas virtuales y los contenedores?

    -La principal diferencia radica en el nivel en el que ocurre la virtualización. Las máquinas virtuales utilizan la virtualización de hardware, donde un hipervisor crea instancias virtualizadas de los componentes de hardware como procesadores, RAM, almacenamiento y tarjetas de red. Por otro lado, los contenedores utilizan la virtualización a nivel de sistema operativo, donde múltiples contenedores comparten el mismo kernel y sistema operativo anfitrión, pero se aíslan a nivel de procesos.

  • ¿Qué tipo de aislamiento ofrecen las máquinas virtuales y los contenedores?

    -Las máquinas virtuales ofrecen aislamiento a nivel de máquina, donde cada máquina virtual se comporta como un servidor o estación de trabajo independiente, sin conocimiento de las demás máquinas virtuales. Los contenedores, por su parte, ofrecen aislamiento a nivel de procesos, donde cada contenedor parece tener su propio sistema operativo, pero comparte el kernel del sistema operativo anfitrión con otros contenedores.

  • ¿Cómo acceden a los recursos las máquinas virtuales y los contenedores?

    -En el caso de las máquinas virtuales, el hipervisor gestiona el acceso a los recursos de hardware subyacentes, creando la ilusión de que cada máquina virtual tiene su propio hardware. En el caso de los contenedores, se utilizan características del kernel de Linux como espacios de nombres (namespaces) y grupos de control (cgroups) para aislar y controlar el acceso a los recursos del sistema operativo anfitrión para cada contenedor.

  • ¿Qué ventajas ofrecen las máquinas virtuales y los contenedores en términos de flexibilidad y portabilidad?

    -Las máquinas virtuales ofrecen una gran flexibilidad al permitir configurar los recursos de hardware virtuales de cada máquina virtual según las necesidades. Por otro lado, los contenedores ofrecen una gran portabilidad, ya que se definen mediante un archivo de configuración que puede ejecutarse en diferentes entornos sin limitaciones de hardware.

  • ¿Qué es la virtualización de Tipo 1 y la de Tipo 2?

    -La virtualización de Tipo 1, también conocida como virtualización completa o de sistema completo, ocurre cuando el hipervisor se ejecuta directamente sobre el hardware. La virtualización de Tipo 2, en cambio, ocurre cuando el hipervisor se ejecuta sobre un sistema operativo anfitrión, como en el caso de programas como VirtualBox o Parallels.

  • ¿Cómo pueden trabajar juntas las máquinas virtuales y los contenedores en entornos modernos?

    -Tecnologías como KubeVirt y las nuevas versiones de Kubernetes y OpenShift permiten ejecutar máquinas virtuales y contenedores en el mismo entorno, aprovechando las fortalezas de cada uno según los casos de uso. Esto significa que las máquinas virtuales y los contenedores no son tecnologías competidoras, sino complementarias.

  • ¿Qué es un Dockerfile y cuál es su importancia en los contenedores?

    -Un Dockerfile es un archivo de texto que contiene las instrucciones necesarias para construir una imagen de contenedor. Es fundamental en el uso de contenedores porque define todos los componentes y pasos necesarios para ejecutar una aplicación en un entorno aislado y portátil.

  • ¿Qué son los espacios de nombres (namespaces) y los grupos de control (cgroups) en el contexto de los contenedores?

    -Los espacios de nombres (namespaces) son una característica del kernel de Linux que permite aislar y virtualizar los recursos del sistema operativo para cada contenedor, creando la ilusión de que cada contenedor tiene su propio sistema operativo. Los grupos de control (cgroups) son otra característica del kernel de Linux que permite limitar y monitorizar el uso de recursos por parte de los contenedores.

  • ¿Cuál es la importancia de las máquinas virtuales y los contenedores en la arquitectura de aplicaciones nativas de la nube?

    -Las máquinas virtuales y los contenedores son pilares fundamentales de la arquitectura de aplicaciones nativas de la nube, ya que permiten desplegar y escalar aplicaciones de manera eficiente, portátil y aislada. Los contenedores, en particular, son esenciales para implementar arquitecturas de microservicios y facilitar la modernización de aplicaciones.

  • ¿Qué recursos o herramientas se mencionan en el guión para aprender más sobre máquinas virtuales y contenedores?

    -En el guión, se menciona que IBM CloudLabs ofrece laboratorios interactivos y gratuitos basados en navegador web relacionados con Kubernetes, que pueden ser útiles para aprender sobre máquinas virtuales y contenedores en entornos de nube.

Outlines

00:00

🤖 Máquinas virtuales y contenedores: diferencias y relaciones

Este párrafo introduce los conceptos de máquinas virtuales y contenedores, destacando sus diferencias fundamentales. Explica que las máquinas virtuales utilizan la virtualización de hardware, donde un hipervisor crea instancias virtualizadas de componentes de hardware en una sola máquina física. Por otro lado, los contenedores utilizan la virtualización a nivel de sistema operativo, donde múltiples contenedores comparten el mismo kernel del sistema operativo anfitrión. Además, destaca que las máquinas virtuales brindan aislamiento a nivel de máquina, mientras que los contenedores proporcionan aislamiento a nivel de proceso. El párrafo también menciona características clave de los contenedores, como los espacios de nombres y los grupos de control (cgroups).

05:00

🌐 Portabilidad, flexibilidad y el futuro de las máquinas virtuales y los contenedores

Este párrafo aborda la portabilidad y flexibilidad de las máquinas virtuales y los contenedores. Explica que las máquinas virtuales ofrecen flexibilidad infinita en cuanto a los recursos de hardware que se pueden asignar, mientras que los contenedores brindan portabilidad infinita al ser definidos en un solo archivo (como un Dockerfile) que se puede ejecutar en diferentes entornos. Luego, menciona la existencia de la virtualización de Tipo 2, donde hipervisores livianos como VirtualBox o Parallels se ejecutan sobre un sistema operativo anfitrión. Finalmente, destaca que las tecnologías de máquinas virtuales y contenedores están madurando y se pueden utilizar en conjunto, como lo demuestra KubeVirt y las versiones recientes de Kubernetes y OpenShift.

Mindmap

Keywords

💡Máquinas virtuales

Las máquinas virtuales (VMs) son una técnica de virtualización de hardware que crea instancias virtualizadas de componentes físicos como procesadores, memoria RAM, almacenamiento y tarjetas de red. Cada máquina virtual se comporta como un sistema independiente, aislado de los demás. En el video, se menciona que las máquinas virtuales han sido populares durante más tiempo y se crean mediante un 'hipervisor' que gestiona los recursos de hardware.

💡Contenedores

Los contenedores son una forma de virtualización a nivel de sistema operativo, donde se aíslan procesos en lugar de máquinas completas. Comparten el mismo kernel del sistema operativo anfitrión, pero tienen la ilusión de tener su propio sistema operativo con solo las bibliotecas y código necesarios para ejecutar una aplicación. En el video, se mencionan como una nueva forma de construir y arquitecturar aplicaciones, especialmente para modernización de aplicaciones, microservicios y entornos 'cloud-native'.

💡Virtualización

La virtualización es el proceso de crear representaciones lógicas de recursos físicos, como hardware o sistemas operativos. En el video, se explica que tanto las máquinas virtuales como los contenedores son diferentes formas de lograr la virtualización, la primera a nivel de hardware y la segunda a nivel de sistema operativo.

💡Hipervisor

Un hipervisor es un software que crea y gestiona máquinas virtuales, virtualizando los recursos de hardware subyacentes. En el video, se explica que el hipervisor es responsable de crear instancias virtualizadas de componentes como procesadores, RAM, almacenamiento y tarjetas de red para las máquinas virtuales.

💡Aislamiento

El aislamiento se refiere a la separación lógica de recursos o procesos. En el video, se explica que las máquinas virtuales brindan aislamiento a nivel de máquina, creando instancias independientes que se comportan como sistemas separados, mientras que los contenedores brindan aislamiento a nivel de proceso, donde cada contenedor solo puede ver los recursos necesarios para ejecutar su aplicación.

💡Núcleo (kernel)

El kernel es el componente central del sistema operativo que actúa como intermediario entre el software y el hardware. En el video, se menciona que los contenedores se construyen sobre el kernel del sistema operativo anfitrión, aprovechando características como los espacios de nombres (namespaces) y los grupos de control (cgroups) para lograr el aislamiento de procesos.

💡Espacios de nombres (namespaces)

Los espacios de nombres son una característica del kernel Linux que permite la personalización y la ilusión de que cada contenedor tiene su propio sistema operativo. En el video, se explica que los espacios de nombres son uno de los mecanismos que permiten el aislamiento de procesos en los contenedores.

💡Grupos de control (cgroups)

Los grupos de control (cgroups) son una función del kernel Linux que permite monitorear y limitar el uso de recursos por parte de los procesos. En el video, se menciona que los cgroups son responsables de controlar y medir los recursos que se asignan a cada contenedor, evitando que se sobrecargue el sistema.

💡Portabilidad

La portabilidad se refiere a la capacidad de ejecutar una aplicación o sistema en diferentes entornos o plataformas. En el video, se explica que los contenedores ofrecen una mayor portabilidad que las máquinas virtuales, ya que se definen en un solo archivo (como un Dockerfile) que puede ejecutarse en diferentes máquinas sin limitaciones de hardware.

💡Flexibilidad

La flexibilidad se refiere a la capacidad de adaptarse y configurar los recursos según las necesidades. En el video, se menciona que las máquinas virtuales ofrecen una mayor flexibilidad de hardware, ya que se pueden configurar con diferentes cantidades de procesadores, RAM, almacenamiento, etc. En cambio, los contenedores ofrecen una mayor portabilidad, pero menor flexibilidad de hardware.

Highlights

Virtual machines (VMs) and containers are different ways of achieving virtualization, with VMs being hardware virtualization and containers being operating system level virtualization.

With VMs, a hypervisor creates virtualized instances of hardware components like processors, RAM, storage, and network cards, allowing for the creation of separate virtual machines on a single physical server.

With containers, the host operating system is used to run multiple isolated containers, sharing the kernel but providing process isolation so each container appears to have its own operating system.

VMs provide isolation of machines, creating separate virtual servers from a single physical server, while containers provide process isolation within the same operating system.

In VMs, the hypervisor manages the interaction with what appears to be hardware, while in containers, namespaces and cgroups (control groups) in the Linux kernel enable process isolation and resource management.

VMs offer infinite flexibility in hardware configuration, allowing customization of processors, RAM, and other resources, while containers offer infinite portability through a single file defining the container's setup and dependencies.

Type 1 hypervisors run directly on the hardware, while Type 2 hypervisors run on top of an existing operating system, allowing for lightweight virtualization and the ability to run VMs and containers together.

Technologies like KubeVirt and newer versions of Kubernetes and OpenShift enable the integration of VMs and containers, allowing them to work together based on use cases rather than competing.

Namespaces in the Linux kernel enable the customization and appearance of each container having its own operating system.

Control groups (cgroups) in the Linux kernel are responsible for monitoring and metering resources, ensuring containers do not overtax the system and limiting the resources each container can access.

Docker files define how to build and run a container, specifying the necessary libraries, steps, and configurations in a single file that can be run on different machines, providing portability.

While VMs and containers have hardware limitations based on the underlying architecture (e.g., ARM or x86), containers generally offer more flexibility in running across different environments.

IBM CloudLabs provides free, browser-based, interactive Kubernetes labs to help grow skills and earn badges.

Virtual machines provide the illusion of separate workstations or servers, appearing independent and unaware of each other.

Containers share the same operating system and kernel but appear to have their own operating system to each container, with only the necessary libraries and code installed.

Transcripts

play00:00

What's up y'all?

play00:01

I've got a question for you.

play00:03

What are virtual machines and containers,

play00:06

and how do they fit into our modern,

play00:08

cloud-native way of building and architecting applications?

play00:12

My name's Nigel

play00:13

and I'm going to try to answer that question for you in four parts.

play00:17

First, let's talk about some of the differences between virtual machines and containers.

play00:24

On one side we've got virtual machines, which I'm going to abbreviate as VMs,

play00:28

which you may have used because they've been popular for longer.

play00:32

And then containers over here on this other side,

play00:35

which may be a bit newer to you

play00:38

but you've probably seen them if you're working in the spaces of app modernization,

play00:43

or you're dealing with microservices,

play00:45

or anything that demands this new way of building and architecting applications.

play00:50

And I should say that it's not necessarily new,

play00:53

but it's been that we're dealing with them a lot more lately.

play00:56

So, the first thing that i want to bring up is the the level at which virtualization happens.

play01:04

So, these two technologies are different ways of achieving virtualization,

play01:10

and virtual machines are what's called "hardware virtualization",

play01:13

because it happens at the hardware level.

play01:15

So, we're going to start with our hardware down at the bottom,

play01:18

because these are computers after all.

play01:21

And what we have on top of our hardware is what's called a "hypervisor".

play01:26

And our hypervisor is what's responsible for creating these virtualized

play01:31

instances of each of the components that make up our machines.

play01:34

We're talking about processors, RAM, storage, network, cards,

play01:38

all of these things are being virtualized by our hypervisor.

play01:42

Whereas with containers,

play01:44

we start, again, with the hardware down at the bottom,

play01:47

but we build them up a little bit differently

play01:49

because we have, on top of our hardware, our kernel,

play01:52

which is what helps our software and hardware talk to each other.

play01:56

And, on top of our kernel, we have our operating system

play02:00

and we call it our "Host OS" because it's going to be what's hosting all of our containers.

play02:04

And then, on top of the operating system, we have each container that's running,

play02:09

C1, C2, containers ... we can run many dozens of containers in one instance of an operating system.

play02:17

And that's why this is called "operating system level virtualization",

play02:20

because it happens at the operating system level,

play02:23

whereas with our virtual machines we're working at the hardware level.

play02:26

And this model that I've drawn out is our Type 1 hypervisor,

play02:30

or we call it like ... "full virtualization", or "full system virtualization".

play02:36

The second thing that I want to bring up

play02:38

is about the type of isolation that we're achieving.

play02:42

With our virtual machines we're achieving isolation of machines.

play02:46

So, if we can imagine at our base layer we have one server that's in a rack somewhere,

play02:52

but we want to take our resources and split them up so that we're getting much more use out of what we have.

play02:58

So, we take our hypervisor and we make a "Machine 1",

play03:01

and we make a "Machine 2", and we make a "Machine 3".

play03:04

We're creating what looks like separate workstations, separate servers out of one,

play03:08

we're making our one server look like it's many different machines.

play03:12

And each machine is relatively independent of each other,

play03:15

like they don't really know about each other

play03:17

and we, interacting with them, wouldn't necessarily know that we're even in a virtual machine.

play03:22

It just appears as if it is another completely different server, machine somewhere else.

play03:28

Whereas with our containers, we're dealing with process isolation.

play03:32

So, when we're running applications on our laptops

play03:37

we have them running in usually the same environment.

play03:41

They can all see what's running at the same time and talk to each other and share resources and things like that,

play03:46

but when we're dealing with containers, perhaps for security,

play03:48

we want to make sure that our applications can only see what's absolutely necessary for them to run and nothing else.

play03:54

And that's what containers allow us to do,

play03:56

where they're sharing the same operating system, they're sharing the same kernel,

play03:59

but it's appearing to each container as if they have their own operating system

play04:03

and only what's installed in them is the the libraries that are needed,

play04:07

as well as the scripts, the code, everything that we need to run our applications

play04:11

and that's it.

play04:12

And we're able to run all these applications side-by-side and they don't necessarily know about each other.

play04:16

So, we're dealing with isolation of the process,

play04:20

as opposed to isolation of the machine.

play04:22

And the third thing that I want to bring up

play04:24

is about how these resources are accessed.

play04:27

So, again, our hypervisor is creating ...

play04:29

... with our Type 1 hypervisor, we're creating different machines out of our server,

play04:33

and that's mainly where the interaction is happening.

play04:35

We're interacting with what we think is hardware,

play04:38

but that'sbeing managed for us by the hypervisor to what the actual hardware is.

play04:42

Whereas with containers,

play04:44

we're using a couple of features, there are more, but I just want to draw your attention to two features

play04:48

of the Linux kernel that are allowing this illusion of isolation for our processes.

play04:53

And the first one that I want to bring up are namespaces,

play04:56

and they're what is allowing the customization

play05:00

and the appearance that each instance of the container has its own operating system.

play05:05

And then we have our "cgroups" (control groups),

play05:07

which are responsible for monitoring and metering our resources

play05:11

to make sure that we never tax our system with containers,

play05:14

we're limiting the amount of resources they're accessing,

play05:17

we're monitoring what it is, and being able to control exactly what it is we're giving each container control of.

play05:22

So, we have a bit of granular control over the resources that are flowing to our containers.

play05:28

Whereas in our hypervisor, we're creating ... we have the the isolation of our different machines.

play05:36

And the last thing that I want to talk about is this difference in portability and flexibility.

play05:41

So, with our virtual machines we have what I like to think of as infinite flexibility of our hardware,

play05:47

because we're making a different machine out of our server,

play05:50

we're saying, "this is how many processors that I want this machine to have",

play05:54

"this is how much RAM I would like it to have",

play05:56

and we're able to be flexible about the kind of system that we're building.

play06:01

Whereas with containers, we have infinite portability, is how I like to think of it,

play06:06

because we have our container that's being defined in a single file

play06:11

and this is known to a lot of people as a Docker file.

play06:14

But we have essentially a few lines of text that are saying exactly how to build our container,

play06:20

how to run our container, what libraries are necessary,

play06:23

what steps to take to build our container up.

play06:25

And we take this one file, we run it on our machine, we can spin up our application.

play06:29

We store it in a repository somewhere else

play06:33

and then we're able to run that on different machines.

play06:36

We can take our one file and be able to make it run pretty much wherever,

play06:40

there's no hardware limitations, anything like that.

play06:42

Well, there are some hardware limitations if you built your containers for ARM or x86,

play06:49

but, aside from that, you have a lot of flexibility

play06:52

in how you're able to run your containers.

play06:55

I've been speaking a lot about Type 1 virtualization, about Type 1 hypervisors,

play07:03

but the truth is there's another type of virtualization called Type 2.

play07:07

So, in our Type 1, where we're dealing with our hypervisor right on top of our hardware,

play07:11

our Type 2 deals a little bit higher.

play07:13

And this is probably the kind of virtualization that you may be used to interacting with daily,

play07:18

where we're running something like a virtual box or parallels.

play07:22

So, we can take the flexibility that's offered by our lightweight Type 2 hypervisors,

play07:27

and the portability that's offered by containers, and run these together.

play07:31

We see the technologies around virtual machines maturing, like with KubeVirt,

play07:35

and we're seeing in newer versions of Kubernetes and OpenShift,

play07:39

that we can run virtual machines and containers not as competing technologies,

play07:44

but as technologies that can work together depending on our use-cases.

play07:48

Thank you so much for sticking with us through the video.

play07:51

If you have any questions please drop us a line below,

play07:53

and if you want to see more videos like this in the future please like and subscribe to our channel.

play07:58

And don't forget,

play07:59

you can grow your skills and earn a badge with IBM CloudLabs,

play08:03

which are free browser-based, interactive Kubernetes labs.

Rate This

5.0 / 5 (0 votes)

Étiquettes Connexes
virtualizacióncontenedoresmáquinas virtualesarquitectura de aplicacionescloud-nativemicroserviciosseguridadportabilidadKubernetesIBM CloudLabs
Besoin d'un résumé en anglais ?