DEVOPS

Docker

Herramienta que empaqueta una aplicación con todo lo que necesita para funcionar en un contenedor, de modo que corra igual en cualquier máquina.

Nivel · intermedio4 min de lecturaActualizado 23 ago 2026
También conocido como: Contenedor, Containerización

Definición

Docker empaqueta una aplicación junto con todo lo que necesita para funcionar —el intérprete, las librerías, la configuración— en una unidad aislada llamada contenedor. Ese contenedor se comporta igual en tu portátil, en el de un compañero y en el servidor.

Ataca un problema muy viejo, el del "en mi máquina funciona": la aplicación se desarrolla con PHP 8.3 y el servidor tiene PHP 7.4; la librería de imágenes está instalada aquí y allí no. Con un contenedor, el entorno viaja con la aplicación.

No es una máquina virtual. Una VM lleva su propio sistema operativo completo: pesa gigas y tarda en arrancar. Un contenedor comparte el núcleo del sistema anfitrión y solo aísla los procesos y los ficheros. Pesa megas y arranca en segundos.

Las piezas

Imagen. La plantilla: un sistema de ficheros con tu aplicación y sus dependencias. Se construye a partir de un fichero de instrucciones y se puede publicar en un registro.

Contenedor. Una instancia de una imagen en ejecución. De una imagen puedes lanzar veinte contenedores iguales.

Dockerfile. Las instrucciones para construir la imagen: de qué imagen base partes, qué copias, qué instalas y qué comando se ejecuta al arrancar.

Volumen. Los contenedores son efímeros: si lo borras, se va todo lo que había dentro. Un volumen es una carpeta que sobrevive al contenedor, y es donde tiene que estar la base de datos y lo que suban los usuarios.

Docker Compose. Un fichero para levantar varios contenedores relacionados de golpe —aplicación, base de datos, caché— con un solo comando.

Ejemplo práctico

Voy a ser honesto: ninguno de mis proyectos en producción usa Docker, y eso también es una decisión informada.

El CRM de IMDICA corre en un hosting con Plesk. El panel de AEWorks y esta web, en un compartido de Hostinger. En los dos casos el despliegue es empaquetar los ficheros, subirlos por SSH y descomprimirlos. No hay contenedores porque no hay dónde ejecutarlos: un hosting compartido no te deja levantar contenedores.

¿Es una limitación? Sí. ¿Duele? Bastante menos de lo que parece, porque el entorno es estable y hay un solo desarrollador.

Dónde sí lo echo de menos, y es el argumento honesto a favor: al reproducir un fallo que solo aparece en producción. Producción tiene una versión concreta de PHP con unas extensiones concretas; mi máquina tiene otra. Con Docker, levantar en local una copia exacta de producción es un comando. Sin Docker, es un rato de instalar cosas y cruzar los dedos.

Y donde lo montaría sin dudar: en cuanto entre una segunda persona al proyecto, o en cuanto el despliegue pase por un servidor propio en vez de un hosting compartido. El coste de aprenderlo se paga solo el primer día que alguien nuevo tiene el entorno funcionando en diez minutos en vez de en una tarde.

Errores comunes

  • Guardar datos dentro del contenedor. Se borran al recrearlo. Los datos van en volúmenes, siempre.
  • Meter credenciales en la imagen. Quedan dentro y viajan con ella. Van por variables de entorno.
  • Imágenes enormes. Partir de una imagen base completa cuando basta una ligera multiplica el tamaño por diez y ralentiza cada despliegue.
  • Ejecutar como root dentro del contenedor. Es lo que hace por defecto, y no debería. Crea un usuario sin privilegios.
  • No fijar versiones. Una imagen base con etiqueta latest significa que tu compilación de mañana puede no ser la de hoy.
  • Reconstruir todo en cada cambio. Ordena el Dockerfile de lo que menos cambia a lo que más para aprovechar la caché de capas.

Cuándo usarlo

cuando hay más de una persona en el proyecto, cuando el entorno es complicado (varios servicios, versiones concretas), cuando despliegas en tu propio servidor o en la nube, cuando quieres que la integración continua pruebe en el mismo entorno que producción, o cuando manejas varios proyectos con versiones incompatibles del mismo lenguaje.

No cuando despliegas en un hosting compartido que no lo soporta, cuando el proyecto es pequeño y el entorno sencillo, o cuando eres uno solo y el despliegue ya funciona. Añadir Docker a un flujo que va bien es complejidad sin beneficio.

La pregunta que lo decide: ¿cuánto duele hoy montar el entorno desde cero? Si la respuesta es "un rato largo" o "nadie más sabría hacerlo", Docker te va a compensar.

Referencias

Tagsprogramaciondevopsinfraestructuradespliegue
Escrito por
Antonio Echeverría

Dirijo IMDICA, una empresa de suministro industrial, desde 2007. Escribo estas definiciones desde el lado de quien las usa para decidir, no desde el de quien las estudia.

Si necesitas que alguien construya esto de verdad y no solo lo explique, eso es lo que hago en AE Works.