La mayoría de los desarrolladores que empiezan con Docker aprenden docker run y lo usan para todo. Tiene sentido: en el 90% de los casos es el comando correcto. Pero entender que docker run es en realidad la combinación de tres operaciones distintas, y que se puede ejecutar cada una por separado, abre un nivel de control sobre el ciclo de vida de los contenedores que resulta útil en escenarios concretos.
El comando docker create es uno de esos tres pasos. Esta guía explica qué hace exactamente, cuándo tiene sentido usarlo y cómo se relaciona con el resto de comandos del ciclo de vida de un contenedor.
Para entender el contexto completo donde encaja docker create, el artículo sobre qué es Docker cubre la arquitectura de contenedores e imágenes desde los fundamentos.
docker run = docker pull + docker create + docker start
Este es el concepto más importante para entender docker create. Cuando ejecutas docker run, Docker realiza tres operaciones en secuencia:
| Fase | Comando equivalente | Qué ocurre |
|---|---|---|
| 1. Obtención | docker pull |
Descarga la imagen si no existe localmente |
| 2. Creación | docker create |
Prepara el contenedor: asigna ID, configura red, volúmenes y variables de entorno. No consume CPU ni RAM. |
| 3. Arranque | docker start |
Arranca el proceso principal del contenedor. Empieza a consumir recursos. |
docker create ejecuta únicamente la segunda fase. El contenedor queda preparado en disco con toda su configuración pero sin arrancarse, sin consumir CPU ni RAM. El proceso principal no se ejecuta hasta que se llama a docker start.
Qué es docker create

docker create crea un nuevo contenedor a partir de una imagen y lo deja en estado Created. Es como preparar todos los ingredientes de una receta antes de ponerlos al fuego: todo está listo, pero el proceso de cocción todavía no ha empezado.
🔴 ¿Quieres entrar de lleno al mundo DevOps & Cloud Computing? 🔴
Descubre el DevOps & Cloud Computing Full Stack Bootcamp de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada
👉 Prueba gratis el Bootcamp en DevOps & Cloud Computing por una semanaLa sintaxis es idéntica a docker run, con las mismas opciones disponibles:
docker create [opciones] imagen [comando] [argumentos]
# Ejemplo básico
docker create --name mi-contenedor nginx:alpine
# Con mapeo de puertos y variables de entorno
docker create \
--name mi-app \
-p 3000:3000 \
-e NODE_ENV=production \
-v datos:/app/data \
miapp:latest
Al ejecutarse, docker create devuelve el ID completo del contenedor creado:
$ docker create --name mi-contenedor nginx:alpine
a3f5c8e9d2b14f7a6c0e1d3b5f8a2c4e6d8f0b2a4c6e8d0f2b4a6c8e0d2f4b6
El ciclo de vida completo: create, start, stop, rm
Entender docker create es entender el ciclo de vida completo de un contenedor. Los estados por los que pasa un contenedor son:
Created: configurado, no arrancado.
Running: proceso principal en ejecución.
Paused: proceso suspendido.
Stopped/Exited: proceso terminado.
Removed: eliminado del sistema.
docker create → Created
docker start → Running
docker stop → Stopped
docker pause → Paused
docker rm → Removed
Un contenedor en estado Created es visible con docker ps -a pero no aparece en docker ps (que solo muestra los que están en estado Running).
# Crear el contenedor
docker create --name mi-app -p 3000:3000 miapp:latest
# Verificar que está en estado Created
docker ps -a
# CONTAINER ID IMAGE STATUS NAMES
# a3f5c8e9d2b1 miapp:latest Created mi-app
# Arrancarlo
docker start mi-app
# Verificar que está en Running
docker ps
# CONTAINER ID IMAGE STATUS NAMES
# a3f5c8e9d2b1 miapp:latest Up 2 seconds mi-app
Diferencia entre docker create y docker run
La diferencia práctica más importante:
| Característica | docker create | docker run |
|---|---|---|
| ¿Arranca el contenedor? | No — estado Created | Sí — estado Running |
| Consume CPU/RAM | No | Sí |
| Devuelve | ID del contenedor | Output del proceso |
| Necesita docker start | Sí para ejecutarse | No — ya está en marcha |
| Cuándo usar | Control granular del arranque | Caso general: crear y arrancar inmediatamente |
Cómo arrancar un contenedor creado con docker start
Una vez creado el contenedor con docker create, se arranca con docker start:
# Arrancar por nombre
docker start mi-contenedor
# Arrancar por ID (el ID devuelto por docker create)
docker start a3f5c8e9d2b1
# Arrancar y adjuntar la salida estándar (ver logs en tiempo real)
docker start -a mi-contenedor
# Arrancar en modo interactivo con terminal
docker start -ai mi-contenedor
El flag -a (attach) conecta la terminal actual a la salida estándar del contenedor, equivalente al comportamiento por defecto de docker run sin el flag -d.
Cuándo usar docker create en lugar de docker run
En la práctica, docker create tiene casos de uso específicos donde aporta valor sobre docker run.
Obtener el ID antes de arrancar
En scripts de automatización a veces se necesita el ID del contenedor para configuraciones adicionales antes de arrancarlo:
# Obtener el ID del contenedor creado
CONTAINER_ID=$(docker create --name mi-app miapp:latest)
echo "Contenedor creado: $CONTAINER_ID"
# Hacer algo con el ID (copiar archivos, configurar, etc.)
docker cp ./config.json $CONTAINER_ID:/app/config.json
# Arrancarlo cuando esté listo
docker start $CONTAINER_ID
Copiar archivos al contenedor antes de arrancarlo
El comando docker cp funciona con contenedores en estado Created. Esto permite inyectar archivos de configuración en el contenedor antes de su primer arranque, sin necesidad de incluirlos en la imagen:
docker create --name mi-app miapp:latest
docker cp ./configuracion-produccion.json mi-app:/app/config.json
docker start mi-app
Pre-crear contenedores en pipelines
En pipelines de CI/CD complejos, crear los contenedores en una fase y arrancarlos en otra permite paralelizar el proceso de preparación y reducir los tiempos de ejecución.
Opciones principales de docker create
docker create acepta las mismas opciones que docker run. Las más usadas:
docker create \
--name nombre-contenedor \ # Nombre del contenedor
-p 3000:3000 \ # Mapeo de puertos (host:contenedor)
-e VARIABLE=valor \ # Variables de entorno
-v volumen:/ruta/contenedor \ # Volúmenes
-v $(pwd):/app \ # Bind mount
--network nombre-red \ # Red Docker
--restart unless-stopped \ # Política de reinicio
--memory 512m \ # Límite de memoria
imagen:tag
Gestión de contenedores creados: ver, eliminar y reutilizar
# Ver todos los contenedores (incluidos los en estado Created)
docker ps -a
# Filtrar solo los contenedores en estado Created
docker ps -a -f status=created
# Eliminar un contenedor en estado Created
docker rm mi-contenedor
# Eliminar todos los contenedores detenidos o en Created
docker container prune
Un contenedor en estado Created ocupa espacio en disco aunque no consuma CPU ni RAM. Si ya no se necesita, es buena práctica eliminarlo. Para una guía completa sobre eliminación de contenedores, el artículo sobre cómo usar docker rm cubre todas las variantes del comando.
Para el despliegue completo de aplicaciones incluyendo la gestión del ciclo de vida, el artículo sobre despliegue de aplicaciones locales con Docker cubre el proceso de extremo a extremo.
Esther llegó al Bootcamp DevOps de KeepCoding desde la psicología y los recursos humanos, sin base técnica previa. Necesitaba entender desde dentro cómo funcionan los contenedores Docker: no solo los comandos, sino el modelo mental detrás de cada uno.
Hoy trabaja como DevOps Engineer en un proyecto bancario de gran escala. Lo que más valoró fue que el programa le enseñó a pensar en términos de infraestructura como código, no solo a memorizar comandos.
Cómo aprender Docker a nivel profesional

Entender la diferencia entre docker create y docker run es entender el ciclo de vida de un contenedor. Ese conocimiento marca la diferencia entre usar Docker como una caja negra y entender qué ocurre realmente en cada paso: cuándo el contenedor existe en disco sin consumir recursos, cuándo empieza a ejecutarse y cómo se gestiona ese ciclo en entornos de producción con orquestadores como Kubernetes.
Para aprender Docker con proyectos reales y profesores en activo, el DevOps y Cloud Computing Full Stack Bootcamp de KeepCoding cubre el recorrido completo en 6 meses.
Conclusión

docker create es la mitad de docker run: crea el contenedor con toda su configuración pero sin arrancarlo. Es un comando de uso menos frecuente que docker run, pero entenderlo es entender el ciclo de vida completo de un contenedor Docker. DevOps y Cloud Computing Full Stack Bootcamp de KeepCoding.
Su utilidad práctica principal es cuando se necesita el ID del contenedor antes de arrancarlo, cuando se quieren copiar archivos al contenedor antes de su primer arranque o cuando el arranque depende de condiciones externas que todavía no se han cumplido.
En el día a día, docker run sigue siendo el comando para la gran mayoría de los casos. Pero saber que docker run = docker create + docker start cambia la forma en que se entiende lo que Docker hace internamente
La referencia oficial de docker create con todas sus opciones disponibles está en docs.docker.com/reference/cli/docker/container/create/.



