Create expor portas de um contêiner docker authored by Lucas Estevao de Andrade's avatar Lucas Estevao de Andrade
Por padrão, o docker não permite que o ambiente externo acesse algum serviço rodando dentro de uma imagem.
Para que isso possa ser feito, é necessário **expor a porta do container para o ambiente externo** e, para fazer isso, primeiramente, é preciso que a imagem que esteja querendo rodar **exponha a porta desejada**.
Isso é feito com o comando **EXPOSE** do `Dockerfile`, como no exemplo:
```Dockerfile
EXPOSE 3000 8080 9999
```
Uma imagem Docker pode expor uma série de portas!<br>
Se a imagem que está sendo rodada seja de autoria do desenvolvedor, basta adicionar a porta desejada ao **EXPOSE**.<br>
Caso o desenvolvedor esteja rodando uma imagem pronta, do **docker-hub**, por exemplo, geralmente a documentação das portas expostas pela imagem ficam na própria página da mesma no **docker-hub**!
Tendo as portas expostas na imagem, basta expor elas para o ambiente externo ao executar, algo que pode ser feito de duas formas:
- **Via interface do docker desktop**<br>
Digamos que o desenvolvedor queira executar um container e, dentro dele, ele rodará duas aplicações, uma rodando na porta 4200, e outra na porta 3000.\
E ele queira acessar essas duas aplicações da máquina local dele.\
Ele poderá fazer isso facilmente pela interface do docker desktop, basta mapear a porta do container para a porta da máquina local:
<img src="uploads/e9af5809e194feed36f368794bf1aa8e/image.png" width="60%" height="30%">
<img src="uploads/59a1847b195f30f5508fd8343690db5b/image.png" width="60%" height="30%">
- **Via linha de comando:**<br>
O mesmo pode ser feito via linha de comando, usando o parâmetro `-p`.<br>
Por exemplo, para o exemplo acima, poderíamos rodar:<br>
`docker run -p 4200:4200 -p 3000:3000 minha_imagem`
Em ambos os casos, o docker mapeará a porta de dentro do container, para a porta da máquina aonde o container está sendo rodado.<br>
No caso da linha de comando, a porta do lado da esquerda do `:` é a porta local, e da direita, é a porta dentro do container.
É possível mapear uma porta dentro do container a uma porta diferente da máquina, por exemplo:<br>
`docker run -p 3000:4200 minha_imagem`
Mapeará a porta 4200 do container para a porta 3000 da máquina local.
\ No newline at end of file