Tecnologías de virtualización, contenedores y Docker

Índice

I. ¿Qué problemas resuelve la tecnología de virtualización y cuáles son sus ventajas?

1.1 Problemas abordados por la virtualización

1.2 Ventajas de la virtualización

II. Capacidad mejorada por los contenedores y sus casos de uso

2.1 Capacidades potenciadas por los contenedores

III. Comparación entre virtualización y contenerización

IV. Docker

4.1 Definición

4.2 Pasos para instalar Docker

4.3 Operaciones básicas en Docker

4.4 Principios de funcionamiento de red en Docker

4.5 Modos de red en Docker

  1. Modo Bridge

Espacios de nombres de red

Pares Veth

Puente docker0

  1. Modo Host
  2. Modo Container
  3. Modo None
  4. Modo Overlay

Componentes clave:

  1. Modo Load Balance

I. ¿Qué problemas resuelve la tecnología de virtualización y cuáles son sus ventajas?

1.1 Problemas abordados por la virtualización

1. Bajo rendimiento del uso de recursos físicos

  • Problema: Los servidores tradicionales ejecutan normalmente una sola aplicación, con una utilización del CPU inferior al 20%, dejando grandes cantidades de memoria y almacenamiento sin usar.
  • Solución: La virtualización permite dividir un servidor físico en múltiples máquinas virtuales o contenedores, aumentando la utilización de recursos hasta más del 70%.

2. Alta dependencia del hardware

  • Problema: Las aplicaciones están vinculadas al hardware físico (por ejemplo, modelos específicos de servidores), lo que complica la migración o expansión.
  • Solución: La virtualización abstrae la capa física, permitiendo que las aplicaciones se ejecuten como imágenes en cualquier plataforma compatible (desde local hasta la nube).

3. Inconsistencia de entornos

  • Problema: Las diferencias en configuraciones entre entornos de desarrollo, prueba y producción causan problemas comunes como "funciona en mi máquina".
  • Solución: Plantillas de máquinas virtuales o imágenes de contenedores garantizan consistencia en todo el ciclo de vida.

4. Dificultad en disponibilidad alta y recuperación ante desastres

  • Problema: Un fallo en el servidor físico puede provocar interrupciones del servicio con tiempos largos de recuperación.
  • Solución: Instantáneas, migración en vivo y orquestación de contenedores (como Kubernetes) permiten transferencias de fallos en segundos.

5. Costos elevados

  • Problema: La compra y mantenimiento de muchos servidores físicos implica altos costos de energía, enfriamiento y espacio en datacenter.
  • Solución: Consolidación de servidores (por ejemplo, 10 servidores físicos en uno corriendo 10 VMs) reduce costos de hardware y operación.

6. Aislamiento de seguridad insuficiente

  • Problema: Múltiples aplicaciones corriendo en el mismo sistema operativo pueden propagar vulnerabilidades.
  • Solución: Máquinas virtuales (aislamiento completo) o contenedores (aislamiento a nivel de proceso) ofrecen entornos independientes.

1.2 Ventajas de la tecnología de virtualización

1. Agrupación y asignación dinámica de recursos

2. Aislamiento y seguridad

3. Despliegue rápido y automatización

4. Alta disponibilidad y escalabilidad

5. Reducción de costos

6. Compatibilidad y portabilidad multiplataforma

II. Capacidad mejorada por los contenedores y sus casos de uso

2.1 Capacidades potenciadas por los contenedores

1. Ligereza y alto rendimineto

2. Consistencia del entorno

3. Escalado rápido y flexible

  • Combinado con herramientas de orquestación (como Kubernetes), permite escalado en segundos, adaptándose automáticamente a picos de tráfico.
  • Soporta equilibrio de carga dinámico y auto-reparación (reinicio automático de contenedores fallidos).

4. Despliegue multiplataforma e híbrido

III. Comparación entre virtualización y contenerización

Dimensión de comparación Virtualización (VM) Contenerización (Docker)
Nivel de aislamiento A nivel de hardware (aislamiento completo del SO) A nivel de proceso (comparte kernel)
Velocidad de inicio Minutos Segundos
Uso de recursos Elevado (cada VM requiere un SO) Bajo (comparte kernel del host)
Pérdida de rendimiento Alta (necesita hipervisor para traducir instrucciones) Mínima (llama directamente al kernel del host)
Casos de uso típicos Aplicaciones empresariales tradicionales, necesidad de múltiples SOs Microservicios, CI/CD, aplicaciones nativas en la nube

IV. Docker

4.1 Definición

Docker es una plataforma de código abierto para contenerización que permite construir, desplegar y ejecutar rápidamente aplicaciones. Utiliza tecnologías de "contenedores" ligeros para empaquetar la aplicación junto con su entorno de ejecución.

4.2 Pasos para instalar Docker

# Cambiar nombre del host
[root@localhost ~]# hostnamectl set-hostname docker-luck-cloud01
[root@localhost ~]# su

# Desactivar firewall y SELinux (permanentemente)
[root@docker-luck-cloud01 ~]# systemctl stop firewalld
[root@docker-luck-cloud01 ~]# systemctl disable firewalld
[root@docker-luck-cloud01 ~]# setenforce 0
[root@docker-luck-cloud01 ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config


# Instalar dependencias
[root@docker-luck-cloud01 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

# Configurar repositorio de Alibaba Cloud
[root@docker-luck-cloud01 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
# Instalar Docker CE (Community Edition)
[root@docker-luck-cloud01 ~]# yum install -y docker-ce docker-ce-cli containerd.io
# Activar arranque automático y ejecutar ahora
[root@docker-luck-cloud01 ~]# systemctl enable docker.service --now


# Configurar acelerador de imagen de Huawei Cloud

cd /etc/docker
vim daemon.json

{
    "registry-mirrors": [ "https://0f8a3388042b4b0ab6611ccc6e866ab3.mirror.swr.myhuaweicloud.com" ]
}

systemctl daemon-reload
systemctl restart docker

4.3 Operaciones básicas en Docker

# Gestión de imágenes
docker images                               Listar imágenes

docker pull image_name:tag                  Descargar imagen

docker tag image_name:tag new_name:new_tag  Etiquetar imagen

docker rmi image_id/image_name:tag          Eliminar imagen

docker inspect image_id/image_name:tag      Ver detalles de imagen

docker save -o file_name image_name:tag     Exportar imagen como archivo

docker load -i file_name                    Importar archivo como imagen


# Gestión de contenedores

docker ps -a                                            Listar todos los contenedores

docker run -itd image_name:tag [/bin/bash...]           Ejecutar imagen como contenedor (-i para entrada, -t para terminal, -d para modo demonio)

docker rm [-f]                                          Eliminar contenedores no activos, -f fuerza eliminación

docker ps -aq                                           Listar IDs de todos los contenedores

docker export container_id > file_name                  Exportar contenedor como archivo

cat file_name | docker import - new_image_name          Importar archivo como nueva imagen

docker start/stop/restart container_id                Iniciar, detener o reiniciar contenedor

docker inspect container_id                           Ver detalles del contenedor

docker exec -it container_id bash [-c cmd]            Entrar al contenedor, -c ejecuta comando dentro

docker run -itd -P/-p image_name:tag   -P mapea puertos desde 32768, -p mapea puertos específicos, ej: ‘83:80’

# Operaciones de red en contenedores

docker network ls                                       Ver modos de red actuales

docker network create --driver name --subnet subnet --gateway gateway net_name Crear red personalizada

docker run -itd --name container_name --network net_name image_name:tag Usar red personalizada

docker run -itd --name c2 --network=container:c1_name image_name:tag Usar modo container

4.4 Principios de funcionamiento de red en Docker

Docker emplea la tecnología de puente (bridge) de Linux, creando un puente virtual llamado docker0 en el host. Al iniciar un contenedor, se le asigna una dirección IP de ese rango (docker0). Como todos los contenedores en el mismo host están conectados al mismo puente, pueden comunicarse directamente mediante sus IPs.

Este puente es virtual, por lo tanto no es accesible desde fuera. Para permitir acceso externo, se usa el mapeo de puertos con los parámetros -p o -P.

4.5 Modos de red en Docker

1. Modo Bridge

  • Por defecto, cuando no se especifica un modo, Docker usa Bridge.
  • El contenedor se comunica con el host a través de docker0, adecuado para redes locales de contenedores.
  • Características: Asignación de IP única, acceso a Internet mediante NAT.
Espacios de nombres de red
  • Cada contenedor crea un espacio de nombres de red independiente, aislado de dispositivos, IPs, puertos y rutas.
Pares Veth
  • Se generan pares de dispositivos virtuales veth:
  • Uno dentro del contenedor (normalmente eth0).
  • Otro conectado a docker0 en el host.
  • Función: Permiten comunicación entre contenedor y host.
Puente docker0
  • Es un puente de Linux (conmutador virtual) creado por defecto por Docker.
  • Funciones:
  • Asigna IPs a los contenedores (por defecto 172.17.0.0/16).
  • Permite comunicación entre contenedores en el mismo host.
  • Habilita acceso a internet mediante NAT.

docker0 funciona como puerta de enlace, realiza mapeo de puertos y balanceo de carga.

Pregunta común: Explica el puente docker0

docker0 es la puerta de enlace predeterminada para todos los contenedores

docker0 se comunica con los contenedores mediante pares veth

docker0 permite mapear puertos internos del contenedor al host para acceso externo

2. Modo Host

El contenedor utiliza directamente la IP y puertos del host, sin tener una IP propia.

3. Modo Container

  • Compartición de red: Dos contenedores comparten IP y espacio de puertos, pueden comunicarse por localhost.
  • Sistema de archivos: Aunque comparten red, otros espacios de nombres (procesos, filesystem) siguen siendo independientes.
  • Útil para microservicios que deben compartir configuración de red.

4. Modo None

El contenedor carece de configuración de red, está completamente desconectado.

5. Modo Overlay

Permite crear una red virtual distribuida entre múltiples hosts Docker, facilitando la comunicación entre contenedores en distintos nodos.

+-------------------------------------------------------+
|                  Red física (Underlay)                  |
|   (ej., 192.168.1.0/24, 10.0.0.0/16, VPC de proveedor) |
+-------------------------------------------------------+
           ↑               ↑               ↑
           |Encapsulación VXLAN |Encapsulación VXLAN |
+----------+-------+ +------+--------+ +----+----------+
|   Nodo Docker1   | |   Nodo Docker2  | | Nodo Docker3  |
| +--------------+ | | +-------------+ | | +-----------+ |
| | Contenedor A | | | | Contenedor B | | | |Contenedor C| |
| | 10.0.0.2     | | | | 10.0.0.3    | | | | 10.0.0.4  | |
| +-------+------+ | | +------+-------+ | | +-----+-----+ |
|         |eth0    | |        |eth0     | |       |eth0   |
|         v        | |        v         | |       v       |
| +-------+------+ | | +------+-------+ | | +-----+-----+ |
| | veth (vethA) | | | | veth (vethB)| | | |veth (vethC)| |
| +-------+------+ | | +------+-------+ | | +-----+-----+ |
|         |        | |        |         | |       |       |
| +-------+------+ | | +------+-------+ | | +-----+-----+ |
| | docker_gwbridge| | | docker_gwbridge| | |docker_gwbr| |
| | (172.18.0.1)  | | | (172.18.0.2)   | | | (172.18.0.3)|
| +-------+------+ | | +------+-------+ | | +-----+-----+ |
|         |        | |        |         | |       |       |
| +-------+------+ | | +------+-------+ | | +-----+-----+ |
| | Red Overlay  | | | | Red Overlay  | | | | Red Overlay|
| | (VXLAN)      | | | | (VXLAN)      | | | | (VXLAN)    |
| +--------------+ | | +-------------+ | | +-----------+ |
+------------------+ +----------------+ +---------------+

Componentes clave:
  1. Contenedores (Container A/B/C)
  • Cada uno recibe una IP única en la red Overlay (ej. 10.0.0.2/24).
  1. Pares Veth
  • Conectan contenedores con la pila de red del host (ej. vethA ↔ eth0).
  1. docker_gwbridge
  • Puente en el host que maneja tráfico saliente de contenedores (no Overlay).
  1. Red Overlay (VXLAN)
  • Red virtual entre hosts, usando encapsulación UDP en puerto 4789.
  1. Red física
  • Capa subyacente (ej. VPC de AWS, datacenter local), transporta tráfico VXLAN.

6. Modo Load Balance

Etiquetas: virtualización contenedores Docker redes cloud

Publicado el 9-7 14:05