Seguramente te ha pasado: un proyecto funciona perfecto en tu computadora, lo pasas a otra máquina o al servidor… y deja de funcionar. Falta una extensión de PHP, la versión de MySQL es otra o alguna configuración no coincide. La frase «en mi máquina sí funciona» es tan común entre desarrolladores que se volvió broma.

Docker nació para resolver exactamente ese problema. En este artículo verás qué es, cómo funciona por dentro y por qué hoy es una herramienta básica tanto para quien programa como para quien administra servidores.

¿Qué es Docker?

En palabras sencillas: Docker permite empaquetar una aplicación junto con todo lo que necesita para funcionar —su lenguaje, sus librerías, sus configuraciones— dentro de una «caja» llamada contenedor. Esa caja funciona igual en tu laptop, en la computadora de un compañero o en un servidor en la nube.

Piensa en los contenedores de carga de los barcos. Antes de que existieran, cada mercancía se cargaba de forma distinta: sacos, barriles, cajas de todos los tamaños. El contenedor estándar cambió todo: no importa qué lleve dentro, cualquier barco, grúa o camión sabe cómo moverlo. Docker hace lo mismo con el software.

En términos técnicos: Docker es una plataforma de código abierto para crear, distribuir y ejecutar aplicaciones en contenedores. Se presentó en 2013 y popularizó una tecnología que ya existía en Linux, haciéndola fácil de usar.

¿Por qué es importante?

  • Mismo entorno en todas partes. Lo que funciona en desarrollo funciona en producción, porque el contenedor lleva consigo sus dependencias.
  • Arranque en segundos. Un contenedor inicia mucho más rápido que una máquina virtual completa.
  • Aislamiento. Puedes tener un proyecto con PHP 8.4 y otro con PHP 7.4 en la misma computadora sin que choquen.
  • Infraestructura como código. La configuración queda escrita en archivos que se versionan con Git, se revisan y se comparten.
  • Base de la nube moderna. Herramientas como Kubernetes, las plataformas de CI/CD y muchos servicios cloud trabajan con contenedores.

¿Cómo funciona?

Docker se apoya en cuatro conceptos. Si entiendes estos cuatro, entiendes Docker.

1. Imagen

Una imagen es una plantilla de solo lectura con todo lo necesario para ejecutar una aplicación: un sistema base mínimo, el lenguaje, las librerías y tu código. Se construye por capas: cada instrucción agrega una capa encima de la anterior, y las capas se reutilizan entre imágenes para ahorrar espacio.

2. Contenedor

Un contenedor es una imagen en ejecución. De una misma imagen puedes levantar uno o cien contenedores. Si la imagen es la receta, el contenedor es el platillo servido.

3. Dockerfile

El Dockerfile es un archivo de texto con las instrucciones para construir una imagen. Por ejemplo, para una aplicación PHP con Apache:

FROM php:8.4-apache
RUN docker-php-ext-install pdo_mysql
COPY . /var/www/html
EXPOSE 80

Se lee casi como una receta: parte de la imagen oficial de PHP con Apache, instala la extensión para MySQL, copia el código y expone el puerto 80.

4. Registro

Un registro es un almacén de imágenes. El más conocido es Docker Hub, donde encuentras imágenes oficiales de MySQL, Nginx, Node, Python y miles más. También puedes tener un registro privado para las imágenes de tu organización.

¿Qué pasa por dentro?

En Linux, Docker usa dos funciones del propio núcleo del sistema:

  • Namespaces: hacen que cada contenedor «vea» solo sus propios procesos, su propia red y su propio sistema de archivos.
  • Cgroups (grupos de control): limitan cuánta CPU, memoria y disco puede usar cada contenedor.

En Windows y macOS, Docker Desktop ejecuta una máquina virtual Linux muy ligera y, dentro de ella, los contenedores. Por eso funciona igual en los tres sistemas.

Contenedores vs. máquinas virtuales

Las dos tecnologías aíslan aplicaciones, pero de forma distinta:

Máquina virtual Contenedor
Qué incluye Sistema operativo completo Solo la app y sus dependencias
Arranque Minutos Segundos
Tamaño típico Gigabytes Megabytes
Aislamiento Muy fuerte (núcleo propio) Por proceso (núcleo compartido)
Ideal para Ejecutar otros sistemas operativos Aplicaciones y microservicios

No compiten: en la nube es muy común que los contenedores se ejecuten dentro de máquinas virtuales. Tenemos una infografía que lo explica de un vistazo.

Un ejemplo real: el sistema de una escuela

Imagina el sistema de control escolar de una preparatoria: una aplicación en Laravel, una base de datos MySQL y, para desarrollo, un servidor de correo de pruebas. Sin Docker, cada persona del equipo tendría que instalar y configurar todo a mano, y cada instalación terminaría siendo un poco diferente.

Con Docker Compose se describe todo el sistema en un solo archivo:

services:
  app:
    build: ./docker/php
    ports:
      - "8080:8080"
    volumes:
      - ./src:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:8.4
    environment:
      MYSQL_DATABASE: escuela
      MYSQL_USER: escuela
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

Con docker compose up -d se levanta el sistema completo. Una persona nueva en el equipo clona el repositorio, ejecuta ese comando y en unos minutos tiene exactamente el mismo entorno que los demás.

Limitaciones y riesgos

Docker no es magia. Conviene conocer sus límites:

  • Curva de aprendizaje. Redes, volúmenes y permisos confunden al principio.
  • No reemplaza a una VM en todo. Si necesitas otro sistema operativo o un aislamiento muy estricto, una máquina virtual sigue siendo la opción.
  • Los datos no se guardan solos. Lo que no esté en un volumen se pierde al eliminar el contenedor.
  • Las imágenes también tienen vulnerabilidades. Una imagen desactualizada puede incluir software con fallas conocidas.

Preguntas frecuentes

¿Docker es gratis? Docker Engine es de código abierto y gratuito. Docker Desktop es gratuito para uso personal, educativo y para empresas pequeñas; las organizaciones grandes requieren una suscripción de pago.

¿Necesito saber Linux para usar Docker? No para empezar, pero te ayudará mucho. La mayoría de las imágenes están basadas en Linux y los comandos básicos de terminal aparecen todo el tiempo.

¿Docker y Kubernetes son lo mismo? No. Docker crea y ejecuta contenedores; Kubernetes orquesta muchos contenedores en varios servidores: los reparte, los reinicia si fallan y los escala según la demanda.

Conclusión

Docker resolvió un problema que parecía inevitable: que el software se comportara distinto en cada computadora. Al empaquetar la aplicación con todo lo que necesita, el entorno se vuelve predecible, portátil y fácil de compartir.

Si estás comenzando, el mejor siguiente paso es instalar Docker, ejecutar docker run hello-world y después intentar levantar un proyecto sencillo con Docker Compose.

Referencias