Contenedor vs máquina virtual
Bienvenida
Bienvenido a Su primer contenedor con Docker. Esta píldora es para quien ya se mueve en una terminal y quiere dejar de ver los contenedores como magia, sea de soporte, SOC o desarrollo. Necesita una computadora con Docker Desktop o Docker Engine instalado.
Son cuatro lecciones cortas, un laboratorio en el que levanta nginx con una página escrita por usted y un quiz de 4 preguntas, unos 55 minutos en total. Al terminar sabrá distinguir un contenedor de una VM, correr imágenes oficiales, publicar un puerto solo en local, leer logs y dejar el equipo limpio.
Qué es Docker y por qué importa
Docker empaqueta una aplicación con todo lo que necesita y la ejecuta como un contenedor aislado. La empresa dotCloud lo liberó como software libre en 2013 y popularizó funciones que el kernel Linux ya tenía. Hoy buena parte del software de servidor se entrega así.
A quien defiende le importa por dos lados: levanta herramientas en segundos sin ensuciar su equipo, y le toca revisar contenedores ajenos, donde una imagen dudosa o un puerto mal publicado son una entrada cómoda.
El problema que resuelve
Una aplicación necesita más que su código: versión del lenguaje, librerías, configuración. Basta que una librería cambie entre la laptop y el servidor para oír "en mi máquina sí funciona". El contenedor lleva todo adentro y se comporta igual en cualquier equipo con Docker.
Máquina virtual y contenedor
Una máquina virtual (VM) simula hardware y corre un sistema operativo entero, con su propio kernel: pesa gigabytes y tarda en arrancar, pero aísla muy bien.
Un contenedor no simula hardware ni trae kernel. Es un proceso normal del anfitrión al que el kernel le pone paredes: los namespaces hacen que solo vea sus propios procesos, su red y sus archivos, y los cgroups limitan cuánta CPU y memoria puede usar. Pesa megabytes y arranca en menos de un segundo.
Máquina virtual Contenedor
+------------------------+ +------------------------+
| App + librerías | | App + librerías |
| SO invitado completo | +------------------------+
| con su kernel propio | | Motor de contenedores |
+------------------------+ +------------------------+
| Hipervisor | | SO anfitrión y su |
+------------------------+ | kernel (compartido) |
| Hardware físico | +------------------------+
+------------------------+ | Hardware físico |
+------------------------+En Windows y macOS, Docker Desktop crea por debajo una VM Linux pequeña, porque un contenedor Linux necesita un kernel Linux.
Mi regla: si necesita otro sistema operativo, o va a abrir malware, use una VM. Si quiere repetir un servicio, como un servidor web de pruebas, use un contenedor.
Comprobar la instalación
Instale Docker desde https://docs.docker.com y ejecute docker version. Muestra las dos piezas: el cliente (el comando que usted escribe) y el servidor o daemon (el servicio que crea los contenedores).
$ docker version
Client:
Version: 27.3.1
Server: Docker Engine - Community
Engine:
Version: 27.3.1Si falta la sección Server y aparece este error, el servicio no está corriendo:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?Abra Docker Desktop y espere a que arranque, o en Linux ejecute sudo systemctl start docker. Si el error dice permission denied, su usuario no tiene acceso al socket de Docker: use sudo o pida que lo agreguen al grupo docker, sabiendo que ese grupo equivale en la práctica a ser root en la máquina.