Contenido
Tutorial de Docker: qué es Docker, imágenes y contenedores
- Desarrollador
- Docker, Inc.
- Primer lanzamiento
- 2013
- Lenguaje de programación
- Go
- Licencia
- Docker Engine es software de código abierto (Apache License 2.0); Docker Desktop es software comercial, gratuito para uso personal y pequeñas empresas
- Sitio web oficial
- www.docker.com
- Documentación oficial
- docs.docker.com
Docker fue lanzado en 2013 por Docker, Inc. (antes dotCloud). Docker Engine, su componente principal, es un proyecto de código abierto desarrollado en Go. Consulta la lista completa de sitios web, documentación y código fuente en los recursos oficiales de la página principal del tutorial.
Qué problema resuelve Docker
Casi todas las personas que programan se han encontrado con esta situación: un programa funciona perfectamente en su propio equipo, pero falla en el equipo de un compañero o en un servidor. La causa suele ser que los entornos son diferentes:
- Las versiones de Python no coinciden (tú usas la 3.14 y el servidor todavía tiene la 3.10)
- Falta una biblioteca del sistema
- La configuración, las variables de entorno o las rutas de las carpetas son diferentes
- Dos proyectos en el mismo servidor necesitan versiones distintas del mismo paquete
La solución tradicional consiste en escribir instrucciones de instalación muy largas y seguirlas paso a paso en cada máquina. Pero siempre hay alguien que se salta algún paso.
Docker propone empaquetar el programa junto con su entorno de ejecución. El paquete se ejecuta de la misma manera en cualquier máquina que tenga Docker instalado. Las instrucciones de instalación se reducen a un solo comando:
docker run -d -p 8080:80 nginx:1.30
Tanto en Windows y macOS como en un servidor Linux, este comando inicia un servidor web nginx idéntico.
Tres conceptos clave
| Concepto | Qué es | Comparación |
|---|---|---|
| Imagen (Image) | Una plantilla de solo lectura que incluye el programa, las bibliotecas y la configuración | Un disco de instalación |
| Contenedor (Container) | Una instancia en ejecución iniciada a partir de una imagen | Un programa instalado desde el disco y en ejecución |
| Registry | Un lugar donde se almacenan y comparten imágenes, como Docker Hub | Una tienda de aplicaciones |
Imágenes y contenedores
- Una imagen puede iniciar muchos contenedores a la vez, y estos no interfieren entre sí.
- Los archivos que creas o modificas dentro de un contenedor se escriben en su propia capa de escritura y no modifican la imagen.
- Si eliminas el contenedor, la imagen sigue ahí y puedes iniciar otro cuando quieras.
- Como la capa de escritura también desaparece al eliminar el contenedor, los datos que quieras conservar (por ejemplo, los de una base de datos) deben guardarse aparte, en un Volume.
Las imágenes se construyen capa por capa
Las imágenes están formadas por varias capas (layer). Por ejemplo, una imagen para un sitio web con Node.js (a la izquierda en la ilustración anterior) tiene:
- Una capa del sistema operativo base (por ejemplo, Debian)
- Una capa del entorno de ejecución de Node.js
- Una capa con los paquetes instalados (
npm install) - Una capa con tu código
Distintas imágenes pueden compartir las mismas capas inferiores. Si diez imágenes se basan en Debian, la capa de Debian se guarda una sola vez en el disco y solo se descarga una vez. Por eso conviene prestar atención al orden de los comandos cuando escribas un Dockerfile. Después de instalar Docker en la siguiente sección, verás cómo se descargan las imágenes capa por capa.
Registry
Un Registry es un servidor que almacena imágenes. El más utilizado es Docker Hub (docker.io). Si ejecutas docker run nginx sin especificar una dirección, la imagen se descarga desde Docker Hub. Otros registros habituales son ghcr.io, de GitHub, y los que ofrecen las distintas plataformas en la nube. También puedes subir tus propias imágenes; consulta Subir una imagen a Docker Hub.
Arquitectura de Docker
Cuando escribes el comando docker en la terminal, intervienen tres componentes:
| Componente | Descripción |
|---|---|
| Docker CLI (Client) | La herramienta de línea de comandos docker que usas. No ejecuta contenedores por sí misma; envía las solicitudes a Engine |
Docker Engine (dockerd) | Un servicio que se ejecuta en segundo plano y se encarga de descargar imágenes, crear contenedores y administrar redes y Volume |
| Registry | El lugar donde se almacenan las imágenes. Engine las descarga (pull) o las sube (push) desde aquí |
CLI y Engine son componentes separados. Por eso puedes usar el comando docker en tu portátil para controlar el Engine de un servidor remoto (consulta Desplegar en un host en la nube). En la siguiente sección, al ejecutar docker version, verás la información de versión de Client y Server: son esos dos componentes.
En Windows y macOS, Docker Engine necesita un entorno Linux para ejecutarse. Docker Desktop crea automáticamente una máquina virtual Linux ligera para ejecutar Engine e instala también herramientas como CLI y Compose. En Linux, basta con instalar Docker Engine directamente.
En qué se diferencian los contenedores y las máquinas virtuales
Una máquina virtual (VM) emula un ordenador completo y cada una tiene su propio sistema operativo. Los contenedores comparten el kernel del sistema operativo del host y aíslan solo lo que necesita el programa (sistema de archivos, procesos y red).
| Contenedores | Máquinas virtuales | |
|---|---|---|
| Tiempo de inicio | Normalmente menos de 1 segundo | Normalmente de decenas de segundos a varios minutos |
| Tamaño | De unos MB a cientos de MB | Normalmente varios GB |
| Nivel de aislamiento | A nivel de proceso; comparten el kernel | Sistema operativo completo; aislamiento máximo |
| Cantidad que puede ejecutarse en el mismo host | Muchos | Menos |
| ¿Pueden ejecutar distintos sistemas operativos? | Solo sistemas con el mismo kernel que el host (los contenedores Linux necesitan un kernel Linux) | Sí; por ejemplo, Windows en un host Linux |
Los contenedores no están pensados para sustituir a las máquinas virtuales. Muchos servicios en la nube ejecutan contenedores dentro de máquinas virtuales; a menudo se usan ambos.
Para qué sirve Docker
- Entorno de desarrollo: inicia bases de datos, cachés y otros servicios con un solo comando, sin instalar un montón de software en tu equipo.
- Unificar entornos: todo el equipo, el entorno de pruebas y el de producción usan la misma imagen.
- Despliegue: empaqueta el programa en una imagen y ponlo en marcha en cualquier servidor con
docker run. Para volver a una versión anterior, solo tienes que usar la imagen antigua. - Probar software: si quieres probar una base de datos u otra herramienta, inicia un contenedor. Cuando ya no lo necesites, elimínalo y tu equipo seguirá limpio.
Resumen
- Docker empaqueta el programa junto con su entorno y resuelve el problema de las «diferencias entre entornos»
- Una imagen es una plantilla de solo lectura, un contenedor es una instancia en ejecución y un Registry es el lugar donde se almacenan las imágenes
- El comando
docker(Client) envía solicitudes a Docker Engine para que las ejecute - Los contenedores son más ligeros y arrancan más rápido que las máquinas virtuales, pero comparten el kernel del host
En la siguiente sección instalaremos Docker en tu equipo.
Ejercicios
Ejercicio 1: explica en una frase la diferencia entre una imagen y un contenedor.
Respuesta
Una imagen es una plantilla de solo lectura (como un disco de instalación); un contenedor es una instancia en ejecución iniciada a partir de una imagen (como un programa instalado y en ejecución). Una imagen puede iniciar varios contenedores.
Ejercicio 2: ¿Qué ocurre con los archivos que has creado dentro de un contenedor cuando lo eliminas? ¿Cómo puedes guardar los datos que necesitas conservar?
Respuesta
Desaparecen junto con la capa de escritura del contenedor. Guarda los datos que quieras conservar en un Volume, cuyo ciclo de vida es independiente del del contenedor.
Preguntas frecuentes
¿Docker es gratis?
Docker Engine y CLI son de código abierto y gratuitos. Docker Desktop es gratis para uso personal, educación, proyectos de código abierto no comerciales y pequeñas empresas. Las empresas más grandes necesitan una suscripción de pago. Consulta [Instalar Docker](/es/docker/install/).
¿Necesito saber Linux antes de aprender Docker?
Te resultará más fácil si conoces algunos comandos básicos (cd, ls y editar archivos), pero no hace falta que tengas mucha experiencia. Este tutorial explica todos los comandos; solo tienes que seguirlo.
¿Qué relación hay entre Docker y Kubernetes?
Docker se encarga de crear imágenes y ejecutar contenedores en un solo host. Kubernetes programa, escala y administra muchos contenedores en varios hosts. Primero aprende Docker y después Kubernetes.
Actualizado 14 de octubre de 2026