Fazer commit das alterações do contêiner com novas instruções CMD e EXPOSE
Nesta etapa final, aprenderemos como fazer o commit das alterações do contêiner e definir o comando padrão (CMD) e as portas expostas (EXPOSE) para a nova imagem.
A instrução CMD define o comando padrão que será executado quando um contêiner for iniciado a partir da imagem sem especificar um comando. A instrução EXPOSE informa ao Docker que o contêiner escuta nas portas de rede especificadas em tempo de execução.
Faremos o commit do contêiner my-ubuntu novamente, desta vez definindo um comando padrão para imprimir o conteúdo de /hello.txt e expondo a porta 80.
Primeiro, certifique-se de que o contêiner my-ubuntu esteja parado.
docker stop my-ubuntu
Agora, faça o commit do contêiner com as instruções CMD e EXPOSE. Observe que a instrução CMD é fornecida como um array JSON de strings.
docker commit -c 'CMD ["cat", "/hello.txt"]' -c 'EXPOSE 80' my-ubuntu my-ubuntu-final
Você deve ver o ID da imagem recém-criada como saída.
Vamos verificar as configurações CMD e EXPOSE da nova imagem my-ubuntu-final usando docker inspect.
docker inspect --format '{{.Config.Cmd}}' my-ubuntu-final
Isso deve gerar [cat /hello.txt], confirmando que o comando padrão está definido.
Agora, vamos verificar as portas expostas.
docker inspect --format '{{.Config.ExposedPorts}}' my-ubuntu-final
Você deve ver uma saída semelhante a map[80/tcp:{}], indicando que a porta 80 está exposta.
Finalmente, vamos executar um contêiner a partir desta nova imagem sem especificar um comando para ver se o CMD padrão funciona.
docker run --rm my-ubuntu-final
A flag --rm remove automaticamente o contêiner quando ele sai. Como o comando padrão é cat /hello.txt, o contêiner deve ser executado, imprimir "Hello from inside the container!" e, em seguida, sair.
Você deve ver "Hello from inside the container!" impresso em seu terminal.
Isso demonstra como você pode fazer o commit das alterações do contêiner e definir o comportamento padrão e a configuração de rede da imagem resultante.