Introdução
Este tutorial guiará você pelo processo de encaminhamento de portas em contêineres Docker para fornecer acesso externo às suas aplicações. Você aprenderá como expor portas, mapeá-las entre contêineres e o host e configurar o encaminhamento de portas no Docker Compose. Ao final deste artigo, você terá um conhecimento sólido sobre o encaminhamento de portas do Docker e poderá aplicá-lo aos seus próprios projetos.
Introdução aos Contêineres Docker
Docker é uma plataforma de código aberto popular que permite aos desenvolvedores construir, implantar e executar aplicações em um ambiente containerizado. Os contêineres são pacotes de software leves, autônomos e executáveis que incluem tudo o que é necessário para executar uma aplicação, incluindo o código, o tempo de execução, as ferramentas do sistema e as bibliotecas.
Os contêineres Docker fornecem uma forma consistente e confiável de empacotar e distribuir aplicações, garantindo que elas serão executadas da mesma forma, independentemente da infraestrutura subjacente. Isso facilita o desenvolvimento, teste e implantação de aplicações, bem como a sua escalabilidade e gestão em produção.
Para começar com o Docker, você precisará instalar o motor Docker no seu sistema. No Ubuntu 22.04, você pode fazer isso executando os seguintes comandos:
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
Depois de instalar o Docker, você poderá criar e gerenciar contêineres usando a ferramenta de linha de comando docker. Por exemplo, para criar um novo contêiner baseado na imagem oficial do Ubuntu, você pode executar:
docker run -it ubuntu:latest /bin/bash
Isso iniciará um novo contêiner baseado na imagem mais recente do Ubuntu e o levará a um shell bash dentro do contêiner. A partir daqui, você pode instalar software adicional, executar sua aplicação e muito mais.
No geral, os contêineres Docker fornecem uma forma poderosa e flexível de desenvolver, implantar e gerenciar aplicações, tornando mais fácil garantir um comportamento consistente e confiável da aplicação em diferentes ambientes.
Compreendendo o Mapeamento de Portas no Docker
Portas e Rede em Contêineres Docker
Quando você executa um contêiner, ele está isolado do sistema host e de outros contêineres, incluindo sua própria pilha de rede. Isso significa que quaisquer portas de rede expostas pela aplicação em execução dentro do contêiner só são acessíveis dentro do próprio contêiner.
Para tornar a aplicação acessível de fora do contêiner, você precisa mapear as portas do contêiner para portas correspondentes no sistema host. Este processo é conhecido como "mapeamento de portas" ou "encaminhamento de portas".
Expondo Portas no Docker
Para expor uma porta em um contêiner Docker, você pode usar a flag -p ou --publish ao executar o comando docker run. Por exemplo, para expor a porta 80 no contêiner e mapeá-la para a porta 8080 no host, você pode executar:
docker run -p 8080:80 nginx
Isso iniciará um contêiner do servidor web Nginx e mapeará a porta 80 dentro do contêiner para a porta 8080 no sistema host.
Você também pode especificar vários mapeamentos de portas usando a flag -p várias vezes:
docker run -p 8080:80 -p 8443:443 nginx
Isso mapeará a porta 80 no contêiner para a porta 8080 no host e a porta 443 no contêiner para a porta 8443 no host.
Acessando Portas Mapeadas
Depois de mapear uma porta no contêiner para uma porta no host, você pode acessar a aplicação em execução no contêiner conectando-se à porta correspondente no host. Por exemplo, se você mapeou a porta 8080 no host para a porta 80 no contêiner, você pode acessar a aplicação visitando http://localhost:8080 no seu navegador web.
No geral, compreender o mapeamento de portas é crucial para tornar suas aplicações baseadas em Docker acessíveis de fora do contêiner e para permitir a comunicação entre contêineres e outros sistemas.
Expondo Portas para Acesso à Aplicação
Identificando Portas da Aplicação
O primeiro passo para expor portas para acesso à aplicação é identificar as portas nas quais a sua aplicação está a escutar. Esta informação é normalmente fornecida na documentação da aplicação ou pode ser determinada inspecionando o código ou a configuração da aplicação.
Por exemplo, se estiver a executar um servidor web como o Nginx, provavelmente estará a escutar na porta 80 (HTTP) e/ou na porta 443 (HTTPS). Se estiver a executar um servidor de base de dados, poderá estar a escutar numa porta específica, como a 3306 para MySQL ou a 5432 para PostgreSQL.
Expondo Portas com o Comando docker run
Depois de identificar as portas utilizadas pela sua aplicação, pode expô-las ao sistema host utilizando a flag -p ou --publish ao executar o comando docker run. Isto irá mapear as portas do contêiner para portas correspondentes no sistema host.
Por exemplo, para expor a porta 80 no contêiner e mapeá-la para a porta 8080 no host, pode executar:
docker run -p 8080:80 nginx
Isto irá iniciar um contêiner do servidor web Nginx e mapear a porta 80 dentro do contêiner para a porta 8080 no sistema host.
Expondo Múltiplas Portas
Pode expor múltiplas portas utilizando a flag -p várias vezes. Por exemplo, para expor as portas 80 e 443 no contêiner e mapeá-las para as portas 8080 e 8443 no host, pode executar:
docker run -p 8080:80 -p 8443:443 nginx
Isto irá mapear a porta 80 no contêiner para a porta 8080 no host e a porta 443 no contêiner para a porta 8443 no host.
Expondo as portas apropriadas, pode garantir que as suas aplicações baseadas em Docker são acessíveis de fora do contêiner, permitindo que utilizadores e outros sistemas interajam com as suas aplicações.
Mapeamento de Portas entre Contêineres e Host
Compreendendo a Sintaxe de Mapeamento de Portas
Ao expor portas no Docker, utiliza-se a seguinte sintaxe para mapear uma porta de contêiner para uma porta de host:
-p <host_port>:<container_port>
Por exemplo, para mapear a porta 8080 no host para a porta 80 no contêiner, utilizaria:
docker run -p 8080:80 nginx
Isto mapeia a porta 80 no contêiner para a porta 8080 no sistema host.
Mapeamento Dinâmico de Portas
Em vez de especificar uma porta de host específica, também pode deixar o Docker escolher uma porta disponível no sistema host omitindo a porta de host:
docker run -p 80 nginx
Isto irá mapear uma porta disponível no sistema host para a porta 80 no contêiner. Pode encontrar a porta mapeada executando docker port <nome_do_contêiner> ou inspecionando as definições de rede do contêiner.
Mapeamento de Múltiplas Portas
Pode mapear múltiplas portas especificando a flag -p várias vezes:
docker run -p 8080:80 -p 8443:443 nginx
Isto irá mapear a porta 80 no contêiner para a porta 8080 no host, e a porta 443 no contêiner para a porta 8443 no host.
Visualização de Portas Mapeadas
Pode visualizar as portas mapeadas para um contêiner em execução utilizando o comando docker port:
docker port <nome_do_contêiner>
Isto mostrará o mapeamento entre as portas do contêiner e as portas do host.
Compreendendo como mapear portas entre contêineres e o sistema host, pode garantir que as suas aplicações Docker são acessíveis de fora do contêiner, permitindo que utilizadores e outros sistemas interajam com as suas aplicações.
Configurando o Reencaminhamento de Portas no Docker Compose
Apresentação do Docker Compose
O Docker Compose é uma ferramenta para definir e executar aplicações Docker multi-contêiner. Permite definir os serviços, redes e volumes da sua aplicação num único ficheiro YAML, tornando mais fácil a gestão e implementação da sua aplicação.
Configurando o Reencaminhamento de Portas no Docker Compose
Num ficheiro Docker Compose, pode configurar o reencaminhamento de portas utilizando a diretiva ports. A sintaxe é semelhante ao comando docker run:
version: "3"
services:
web:
image: nginx
ports:
- 8080:80
Neste exemplo, o serviço web está a executar o servidor web Nginx, e a porta 80 no contêiner é mapeada para a porta 8080 no sistema host.
Também pode mapear múltiplas portas especificando a diretiva ports várias vezes:
version: "3"
services:
web:
image: nginx
ports:
- 8080:80
- 8443:443
Isto irá mapear a porta 80 no contêiner para a porta 8080 no host, e a porta 443 no contêiner para a porta 8443 no host.
Mapeamento Dinâmico de Portas
Similarmente ao comando docker run, também pode utilizar o mapeamento dinâmico de portas no Docker Compose omitindo a porta do host:
version: "3"
services:
web:
image: nginx
ports:
- 80
Isto irá mapear uma porta disponível no sistema host para a porta 80 no contêiner. Pode encontrar a porta mapeada executando docker-compose port web 80.
Configurando o reencaminhamento de portas no seu ficheiro Docker Compose, pode garantir que as suas aplicações multi-contêiner são acessíveis de fora do ambiente Docker, permitindo que utilizadores e outros sistemas interajam com as suas aplicações.
Melhores Práticas para o Reencaminhamento de Portas
Utilize Portas de Host Específicas
Sempre que possível, utilize portas de host específicas em vez de depender do mapeamento dinâmico de portas. Isto facilita a memorização e o acesso às suas aplicações, e também pode simplificar qualquer configuração de firewall ou rede que possa ser necessária.
Evite Portas Conflitantes
Certifique-se de que as portas de host que escolhe não entram em conflito com outros serviços ou aplicações em execução no sistema host. Isto pode evitar conflitos de portas e garantir que as suas aplicações Docker podem ser acedidas sem problemas.
Documente os Mapeamentos de Portas
Documente claramente os mapeamentos de portas utilizados pelas suas aplicações Docker, tanto no seu código como em qualquer documentação de implementação ou configuração. Isto facilitará a compreensão e o trabalho com as suas aplicações por outros desenvolvedores ou equipas de operações.
Utilize Variáveis de Ambiente para Configurações de Portas
Considere utilizar variáveis de ambiente para configurar os mapeamentos de portas das suas aplicações Docker. Isto pode facilitar a alteração das configurações de portas sem ter de modificar o código da aplicação ou os ficheiros de configuração do Docker.
version: "3"
services:
web:
image: nginx
ports:
- ${WEB_PORT}:80
Neste exemplo, a variável de ambiente WEB_PORT é utilizada para configurar a porta de host à qual o servidor web Nginx está mapeado.
Monitorize e Gerencie a Utilização de Portas
Monitore regularmente a utilização de portas nos seus sistemas host para garantir que não está a ficar sem portas disponíveis para as suas aplicações Docker. Considere implementar ferramentas ou scripts automatizados para ajudar a gerir e otimizar a utilização de portas.
Seguindo estas melhores práticas, pode garantir que as suas aplicações Docker são acessíveis, seguras e fáceis de gerir, tornando mais fácil desenvolver, implementar e manter as suas aplicações num ambiente containerizado.
Resumo
Neste guia abrangente, aprendeu os fundamentos do reencaminhamento de portas em contentores Docker. Agora sabe como expor portas, mapeá-las entre contentores e o host, e configurar o reencaminhamento de portas no Docker Compose. Ao aplicar estas técnicas, pode garantir que as suas aplicações Docker são acessíveis do exterior, permitindo uma integração e implementação sem problemas. Lembre-se de seguir as melhores práticas para o reencaminhamento de portas para manter um ambiente Docker seguro e eficiente.



