En esta lección aprenderás instrucción CMD Dockerfile, la instrucción que define qué comando se ejecuta por defecto cuando arrancas un contenedor desde una imagen.
CMD no se ejecuta durante el build. Para instalar paquetes o preparar archivos se usa RUN. CMD describe el proceso por defecto en tiempo de ejecución.
👉 Y recuerda, si quieres aprender más de Linux, pincha en este curso de Linux gratis
🐳 Si quieres aprender más de Docker, pincha en este curso de Docker gratis
Qué hace la instrucción CMD Dockerfile
Problema: una imagen necesita declarar qué proceso debe arrancar si el usuario no indica otro comando en docker run.
Qué aporta Docker: CMD define ese comando por defecto. Si al ejecutar el contenedor pasas otro comando al final, Docker puede sustituir el CMD.
| Forma | Recomendación |
|---|---|
| Exec form | Preferible: CMD [«nginx», «-g», «daemon off;»] |
| Shell form | Úsala solo si necesitas interpretación del shell. |
| Solo un CMD efectivo | Si hay varios CMD, Docker usa el último. |
Ejemplo práctico
FROM nginx:stable-alpine
COPY ./public /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]docker build -t cmd-demo:1.0 .
docker run --rm cmd-demo:1.0
docker run --rm cmd-demo:1.0 nginx -vEl primer docker run usa el CMD definido en la imagen. El segundo pasa otro comando al final y, por tanto, sustituye el CMD por defecto.
Errores comunes
- Confundir CMD con RUN: RUN construye la imagen; CMD define qué se ejecuta al arrancar el contenedor.
- Poner varios CMD esperando que se ejecuten todos: solo cuenta el último.
- Usar shell form sin necesidad: puede complicar señales y argumentos.
- Meter tareas de inicialización frágiles: si necesitas lógica compleja, evalúa ENTRYPOINT o un script bien controlado.
Advertencia: si el proceso principal no gestiona bien señales, el contenedor puede tardar en detenerse o cerrarse mal. Por eso suele recomendarse exec form cuando sea posible.
Lecciones relacionadas del curso Docker
- Instrucción RUN Dockerfile
- Instrucción ENTRYPOINT
- Diferencia entre CMD y ENTRYPOINT
- Instrucción EXPOSE Dockerfile
- Cómo ejecutar comandos dentro de un contenedor
Documentación oficial y recursos
- Referencia oficial de CMD
- Referencia oficial de ENTRYPOINT
- Recomendaciones sobre procesos en contenedores
La instrucción CMD Dockerfile queda bien usada cuando define un proceso por defecto claro, sustituible y alineado con la función principal de la imagen.
Si necesitas combinar comando fijo y argumentos variables, continúa con ENTRYPOINT y después con la diferencia entre CMD y ENTRYPOINT.
