Como mapear portas entre um contêiner Docker e o host

DockerBeginner
Pratique Agora

Introdução

Docker é uma poderosa plataforma de contentores que permite aos desenvolvedores empacotar e implantar aplicações de forma consistente e repetível. Um aspecto crucial do trabalho com Docker é a capacidade de mapear portas entre o contêiner e o sistema hospedeiro, permitindo a comunicação e o acesso às suas aplicações containerizadas. Este tutorial guiará você pelo processo de mapeamento de portas no Docker, cobrindo os fundamentos e aplicações práticas.

Introdução ao Mapeamento de Portas Docker

Docker é uma plataforma de contentores popular que permite aos desenvolvedores empacotar e implantar aplicações num ambiente consistente e isolado. Uma das funcionalidades chave do Docker é a capacidade de mapear portas entre um contêiner e a máquina hospedeira, permitindo a comunicação entre a aplicação containerizada e o mundo exterior.

O que é Mapeamento de Portas?

O mapeamento de portas, também conhecido como encaminhamento de portas, é o processo de redirecionar o tráfego de uma porta na máquina hospedeira para uma porta específica dentro do contêiner Docker. Isto permite que o contêiner exponha os seus serviços numa porta específica, enquanto a máquina hospedeira pode aceder a esses serviços utilizando uma porta diferente.

Por que o Mapeamento de Portas é Importante?

O mapeamento de portas é essencial por vários motivos:

  1. Acessibilidade: Sem o mapeamento de portas, a aplicação containerizada não seria acessível de fora do contêiner, limitando a sua utilidade e integração com outros sistemas.
  2. Flexibilidade: O mapeamento de portas permite executar múltiplos contêineres na mesma máquina hospedeira, cada um expondo os seus serviços em portas diferentes.
  3. Segurança: Ao mapear portas específicas, pode controlar e restringir o acesso às suas aplicações containerizadas, melhorando a segurança geral do seu sistema.

Compreendendo a Sintaxe do Mapeamento de Portas Docker

A sintaxe para mapear portas entre um contêiner Docker e a máquina hospedeira é a seguinte:

-p <porta_hospedeira>:<porta_container>

Aqui, <porta_hospedeira> é a porta na máquina hospedeira que será utilizada para aceder à aplicação containerizada, e <porta_container> é a porta dentro do contêiner onde a aplicação está a escutar.

Por exemplo, para mapear a porta 80 na máquina hospedeira para a porta 8080 dentro do contêiner, utilizaria o seguinte comando:

docker run -p 80:8080 my-app

Isto permitiria aceder à aplicação containerizada visitando http://localhost:80 na máquina hospedeira.

Mapeamento de Portas entre Contêiner e Máquina Hospedeira

Compreendendo o Processo de Mapeamento de Portas

O processo de mapeamento de portas entre um contêiner Docker e a máquina hospedeira envolve os seguintes passos:

  1. Identificar a(s) porta(s) em que a sua aplicação containerizada está a escutar: Isto é normalmente especificado na documentação da aplicação ou no Dockerfile.
  2. Determinar a(s) porta(s) na máquina hospedeira que pretende utilizar para aceder à aplicação: Estas podem ser quaisquer portas disponíveis na máquina hospedeira.
  3. Utilizar a flag -p ou --publish ao executar o contêiner Docker: Isto permite mapear a porta da máquina hospedeira para a porta do contêiner.

Mapeamento de Portas durante a Criação do Contêiner

Para mapear portas durante o processo de criação do contêiner, pode utilizar a flag -p ou --publish com o comando docker run. A sintaxe é a seguinte:

docker run -p <porta_hospedeira>:<porta_container> <nome_da_imagem>

Por exemplo, para mapear a porta 80 da máquina hospedeira para a porta 8080 dentro do contêiner, utilizaria o seguinte comando:

docker run -p 80:8080 my-app

Mapeamento de Portas para Contêineres em Execução

Também pode mapear portas para contêineres que já estão a executar utilizando o comando docker port. A sintaxe é a seguinte:

docker port <nome_ou_id_do_contêiner> <porta_do_contêiner>

Isto irá mostrar a porta da máquina hospedeira que está mapeada para a porta do contêiner especificada.

Exposição de Múltiplas Portas

Pode mapear múltiplas portas entre o contêiner e a máquina hospedeira utilizando a flag -p várias vezes. Por exemplo:

docker run -p 80:8080 -p 443:8443 my-app

Isto irá mapear a porta 80 da máquina hospedeira para a porta 8080 no contêiner, e a porta 443 da máquina hospedeira para a porta 8443 no contêiner.

Aplicações Práticas do Mapeamento de Portas

Executando Servidores Web em Contêineres

Um dos casos de uso mais comuns para o mapeamento de portas é executar servidores web em contêineres Docker. Ao mapear a porta do servidor web do contêiner para uma porta na máquina hospedeira, pode aceder facilmente à aplicação web através de um navegador.

Por exemplo, para executar um servidor web Nginx num contêiner Docker e mapear a porta 80 da máquina hospedeira para a porta 80 no contêiner, pode utilizar o seguinte comando:

docker run -p 80:80 nginx

Expondo Portas de Base de Dados

Outro caso de uso comum para o mapeamento de portas é expor portas de base de dados de um contêiner para a máquina hospedeira. Isto permite que aplicações externas se conectem à base de dados que está a ser executada dentro do contêiner.

Por exemplo, para executar um banco de dados MySQL num contêiner Docker e mapear a porta 3306 da máquina hospedeira para a porta 3306 no contêiner, pode utilizar o seguinte comando:

docker run -p 3306:3306 mysql

Aceder a Serviços Containerizados Remotamente

O mapeamento de portas também permite aceder a serviços containerizados a partir de locais remotos. Ao mapear uma porta na máquina hospedeira para uma porta no contêiner, pode conectar-se ao serviço containerizado a partir de qualquer máquina que tenha acesso à máquina hospedeira.

Isto é particularmente útil para serviços que precisam de ser acedidos por múltiplos utilizadores ou de diferentes locais, como aplicações web, APIs ou ferramentas de monitorização.

Escalando Aplicações Containerizadas

Ao executar múltiplas instâncias de uma aplicação containerizada, o mapeamento de portas torna-se crucial para o equilíbrio de carga e escalabilidade. Ao mapear diferentes portas da máquina hospedeira para a mesma porta do contêiner, pode distribuir o tráfego de entrada por várias instâncias de contêiner.

Isto permite escalar facilmente a sua aplicação para cima ou para baixo com base na procura, sem ter de se preocupar com conflitos de portas ou problemas de acessibilidade.

Resumo

Neste tutorial, aprendeu a importância do mapeamento de portas no Docker e como mapear eficazmente portas entre um contêiner Docker e o sistema hospedeiro. Compreendendo os conceitos e aplicações práticas do mapeamento de portas, pode garantir uma comunicação e acesso sem problemas às suas aplicações containerizadas, tornando o seu fluxo de trabalho Docker mais eficiente e versátil.