EXPOSE
A instrução EXPOSE em um Dockerfile é usada para documentar quais portas o contêiner está escutando em tempo de execução. Isso informa aos usuários da imagem (e ao Docker) quais portas devem ser abertas para permitir a comunicação com o contêiner. É importante notar que EXPOSE não publica ou abre realmente essas portas fora do contêiner; ele apenas documenta as portas para referência.
Sintaxe Básica
EXPOSE <porta> [<porta>/<protocolo>...]porta: O número da porta que o contêiner escutará.protocolo(opcional): O protocolo utilizado pela porta, comotcpouudp. O padrão étcpse não especificado.
Funcionalidades do EXPOSE
EXPOSEDocumentação Interna:
EXPOSEserve como uma maneira de documentar quais portas um serviço no contêiner usa. Isso pode ser útil para outros desenvolvedores ou para o gerenciamento da imagem.Integração com Docker: Quando
docker runé usado com a flag-P(ou--publish-all), o Docker publica todas as portas expostas no contêiner, mapeando-as para portas disponíveis no host.
Exemplos de Uso
Expor uma Porta Simples
FROM nginx:alpine
EXPOSE 80Neste exemplo, a porta 80 é exposta, indicando que o servidor NGINX dentro do contêiner estará escutando nessa porta.
Expor Múltiplas Portas
FROM node:14
EXPOSE 3000 8080Aqui, as portas 3000 e 8080 são expostas, o que indica que a aplicação Node.js pode escutar em ambas as portas.
Especificando o Protocolo
Neste exemplo, a porta 1234 é exposta usando o protocolo UDP, que é diferente do padrão TCP.
Usando EXPOSE em Execução
EXPOSE em ExecuçãoEmbora EXPOSE declare quais portas um contêiner está escutando, ele não publica essas portas para o host. Para acessar essas portas externamente, você deve usar a flag -p (ou --publish) ou -P (ou --publish-all) no comando docker run:
Mapear uma Porta Específica:
Esse comando mapeia a porta 80 do contêiner para a porta 8080 no host, tornando o serviço acessível através do host na porta 8080.
Publicar Todas as Portas Expostas:
O Docker mapeará automaticamente todas as portas expostas pelo contêiner para portas aleatórias disponíveis no host.
Boas Práticas e Considerações
Documentação: Use
EXPOSEpara documentar as portas que seus serviços utilizam, mesmo que você não planeje publicá-las externamente. Isso ajuda outros desenvolvedores e ferramentas a entender como interagir com o contêiner.Segurança: Lembre-se de que
EXPOSEnão abre as portas para o mundo exterior; ele apenas documenta. Para publicar portas de maneira segura, combineEXPOSEcom a flag-pao executar o contêiner.Protocolo Correto: Especifique o protocolo correto (TCP ou UDP) quando necessário. Embora o TCP seja o padrão, algumas aplicações, como DNS e outras que dependem de UDP, exigem a especificação do protocolo.
Flexibilidade: Considere deixar a decisão de quais portas publicar para o comando
docker run, o que oferece mais flexibilidade para o usuário da imagem.
Exemplo Avançado
Expondo e Publicando Portas para um Servidor Web
Aqui, a aplicação Python escuta na porta 5000. A instrução EXPOSE 5000 documenta essa porta. Para acessar a aplicação externamente, o usuário pode usar:
Isso mapeia a porta 5000 do host para a porta 5000 do contêiner.
Resumo
EXPOSEdocumenta as portas que um contêiner está escutando, sem publicá-las automaticamente.Flexibilidade e Segurança: Combine
EXPOSEcom as opções de mapeamento de porta no comandodocker runpara publicar as portas conforme necessário.Documentação: É uma prática recomendada usar
EXPOSEpara tornar explícito quais portas os serviços dentro do contêiner utilizam.
Laboratório
Exposição da porta na construção do container

Destaque para:
Execução do container sem o portbind
Destaque para a porta não especificada:
Exposição da porta do container
Destaque para a porta exposta:
EXPOSE não constrói uma camada no filesystem. Ele é um metadado da imagem:
Publish Automático de Portas
Destaque para:

Last updated