Introdução
Nos contêineres, o isolamento é um recurso fundamental. Por padrão, a rede de um contêiner é separada da rede do sistema host. Isso significa que um servidor web em execução dentro do contêiner pode estar saudável, mas ainda assim permanecer inacessível externamente, a menos que você publique uma porta deliberadamente.
O mapeamento de portas resolve essa separação. Ele encaminha o tráfego de uma porta escolhida no host para uma porta escolhida dentro do contêiner. Esse é um dos conceitos básicos mais importantes de redes de contêineres, pois explica como serviços isolados se tornam acessíveis.
Sem essa etapa de publicação, um serviço pode estar perfeitamente saudável dentro do contêiner, mas permanecer efetivamente privado no próprio namespace de rede do contêiner.
Neste laboratório, você praticará como:
- Executar um contêiner com um servidor web Nginx.
- Mapear a porta 8080 do host para a porta 80 do contêiner.
- Verificar o mapeamento e acessar o serviço.
- Limpar os recursos utilizados.
Expor a porta do contêiner
Nesta etapa, você iniciará um novo contêiner Docker usando a imagem Nginx.
O Nginx é um servidor web que, por padrão, escuta na porta 80 dentro do contêiner. No entanto, como o contêiner é isolado, a porta 80 não fica automaticamente acessível no seu ambiente LabEx. Para resolver isso, você mapeará a porta 8080 da máquina host para a porta 80 dentro do contêiner.
A sintaxe para o mapeamento de portas é -p <host_port>:<container_port>.
A ordem é importante. O lado esquerdo representa a porta do host à qual os clientes se conectam, enquanto o lado direito representa a porta em que a aplicação está realmente escutando dentro do contêiner.
Execute o comando a seguir no terminal:
docker run -d -p 8080:80 --name my-nginx nginx
Detalhamento do comando:
docker run: comando usado para criar e iniciar um contêiner.-d: executa o contêiner no modo detached (em segundo plano).-p 8080:80: opção de mapeamento de portas.- 8080: porta da sua máquina host (ambiente LabEx).
- 80: porta dentro do contêiner, onde o Nginx está escutando.
--name my-nginx: atribui o nome "my-nginx" ao contêiner.nginx: imagem que será usada.
Se a operação for bem-sucedida, o Docker exibirá o ID longo do contêiner.
Neste ponto, o Docker não alterou o Nginx. Ele criou uma regra de rede para que as solicitações recebidas na porta do host sejam encaminhadas para a porta do serviço dentro do contêiner.
Verificar a configuração da porta
Agora você precisa verificar se o contêiner está em execução e se o mapeamento de portas foi configurado corretamente. O comando docker ps fornece essas informações.
Execute o comando a seguir:
docker ps
Você deverá ver uma saída semelhante a esta:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc123456789 nginx "/docker-entrypoint.…" 10 seconds ago Up 10 seconds 0.0.0.0:8080->80/tcp my-nginx
Entendendo a saída:
Observe a coluna PORTS: 0.0.0.0:8080->80/tcp.
0.0.0.0:8080: significa que o host está escutando na porta 8080 em todas as interfaces de rede.->: indica a direção do encaminhamento.80/tcp: representa a porta de destino dentro do contêiner.
Isso confirma que todo tráfego enviado para a porta 8080 da sua máquina será encaminhado para a porta 80 dentro do contêiner.
É por causa desse encaminhamento que o mapeamento de portas costuma ser descrito como “publicação” de uma porta do contêiner. Você está expondo ao host ou a clientes externos um serviço que, de outra forma, permaneceria isolado.
Você também pode usar um comando específico para verificar apenas as portas:
docker port my-nginx
Testar o serviço
Agora que a porta está mapeada, vamos testar se o servidor web está acessível. Como você mapeou a porta 8080 do host, pode acessar o servidor Nginx enviando uma solicitação para localhost:8080.
Usaremos o curl, uma ferramenta de linha de comando para fazer solicitações web.
Execute o comando a seguir:
curl localhost:8080
O que esperar:
Você deverá ver o código HTML bruto da página de boas-vindas padrão do Nginx.
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
<h1>Welcome to nginx!</h1>
...
</html>
Se essa saída HTML for exibida, parabéns! Sua solicitação saiu do host (porta 8080), entrou no contêiner (porta 80), foi processada pelo Nginx e a resposta foi enviada de volta.
Esse percurso de ida e volta comprova, na prática, que a rede entre o host e o contêiner está funcionando, e não apenas que o processo do contêiner está em execução.
Limpar os recursos
Nesta etapa final, você limpará o ambiente. É uma boa prática parar e remover contêineres que não são mais necessários, liberando portas e recursos do sistema.
Primeiro, pare o contêiner em execução:
docker stop my-nginx
Em seguida, remova o contêiner parado:
docker rm my-nginx
Verifique se o contêiner foi removido:
docker ps -a
O contêiner my-nginx não deverá mais aparecer na lista.
Resumo
Neste laboratório, você aprendeu com sucesso os fundamentos do mapeamento de portas no Docker. Você:
- Iniciou um contêiner Nginx no modo detached.
- Mapeou a porta 8080 do host para a porta 80 do contêiner usando a opção
-p. - Verificou a configuração da porta usando
docker ps. - Acessou o serviço a partir do host usando
curl. - Limpou o contêiner.
Entender o mapeamento de portas é essencial para implantar aplicações web, pois ele permite que tráfego externo alcance os serviços em execução dentro dos seus contêineres isolados.



