Í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
- Modo Bridge
Espacios de nombres de red
Pares Veth
Puente docker0
- Modo Host
- Modo Container
- Modo None
- Modo Overlay
Componentes clave:
- 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
docker0en 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:
- Contenedores (
Container A/B/C)
- Cada uno recibe una IP única en la red Overlay (ej.
10.0.0.2/24).
- Pares Veth
- Conectan contenedores con la pila de red del host (ej.
vethA ↔ eth0).
- docker_gwbridge
- Puente en el host que maneja tráfico saliente de contenedores (no Overlay).
- Red Overlay (VXLAN)
- Red virtual entre hosts, usando encapsulación UDP en puerto 4789.
- Red física
- Capa subyacente (ej. VPC de AWS, datacenter local), transporta tráfico VXLAN.