Guardar cambios del contenedor con nuevas 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.