Confirmar cambios en contenedores con instrucciones CMD y EXPOSE
En este paso final, aprenderemos cómo confirmar cambios en contenedores estableciendo el comando predeterminado (CMD
) y los puertos expuestos (EXPOSE
) para la nueva imagen.
La instrucción CMD
define el comando predeterminado que se ejecutará cuando se inicie un contenedor desde la imagen sin especificar un comando. La instrucción EXPOSE
informa a Docker que el contenedor escucha en los puertos de red especificados durante su ejecución.
Confirmaremos nuevamente el contenedor my-ubuntu
, esta vez estableciendo un comando predeterminado para mostrar el contenido de /hello.txt
y exponiendo el puerto 80.
Primero, asegúrate de que el contenedor my-ubuntu
esté detenido.
docker stop my-ubuntu
Ahora, confirma el contenedor con las instrucciones CMD
y EXPOSE
. Nota que la instrucción CMD
se proporciona como un array JSON de strings.
docker commit -c 'CMD ["cat", "/hello.txt"]' -c 'EXPOSE 80' my-ubuntu my-ubuntu-final
Deberías ver el ID de la nueva imagen creada como salida.
Verifiquemos las configuraciones CMD
y EXPOSE
de la nueva imagen my-ubuntu-final
usando docker inspect
.
docker inspect --format '{{.Config.Cmd}}' my-ubuntu-final
Esto debería mostrar [cat /hello.txt]
, confirmando que el comando predeterminado está configurado.
Ahora, revisemos los puertos expuestos.
docker inspect --format '{{.Config.ExposedPorts}}' my-ubuntu-final
Deberías ver una salida similar a map[80/tcp:{}]
, indicando que el puerto 80 está expuesto.
Finalmente, ejecutemos un contenedor desde esta nueva imagen sin especificar un comando para verificar si el CMD
predeterminado funciona.
docker run --rm my-ubuntu-final
El flag --rm
elimina automáticamente el contenedor cuando finaliza. Como el comando predeterminado es cat /hello.txt
, el contenedor debería ejecutarse, mostrar "Hello from inside the container!" y luego finalizar.
Deberías ver "Hello from inside the container!" impreso en tu terminal.
Esto demuestra cómo puedes confirmar cambios en contenedores y definir el comportamiento predeterminado y la configuración de red de la imagen resultante.