Como executar uma aplicação personalizada num contêiner Docker com uma porta personalizada

DockerBeginner
Pratique Agora

Introdução

Docker é uma plataforma poderosa para construir, implantar e executar aplicações num ambiente de contentores. Neste tutorial, aprenderá a executar uma aplicação personalizada num contêiner Docker e expor uma porta personalizada para acesso externo. No final deste guia, terá uma compreensão sólida de como tirar partido do Docker para implantar as suas aplicações com maior flexibilidade e controlo.

Introdução ao Docker e aos Contêineres

Docker é uma plataforma de código aberto popular que permite o desenvolvimento, implantação e gestão de aplicações usando contentores. Os contentores são pacotes de software leves, autónomos e executáveis que incluem tudo o que uma aplicação precisa para funcionar, incluindo o código, o tempo de execução, as ferramentas de sistema e as bibliotecas.

O que é o Docker?

Docker é uma ferramenta concebida para facilitar a criação, implantação e execução de aplicações usando contentores. Os contentores permitem que um desenvolvedor empacote uma aplicação com todas as suas partes necessárias, como bibliotecas e outras dependências, e a envie como um único pacote.

Benefícios do Uso do Docker

  1. Consistência: Os contentores garantem que a sua aplicação funcionará da mesma forma, independentemente do ambiente em que é implantada.
  2. Escalabilidade: Os contentores podem ser facilmente escalados para cima ou para baixo para atender às necessidades da sua aplicação.
  3. Portabilidade: Os contentores podem ser executados em qualquer sistema que tenha o Docker instalado, facilitando a movimentação da sua aplicação entre diferentes ambientes.
  4. Eficiência: Os contentores são leves e utilizam menos recursos do que as máquinas virtuais, tornando-os mais eficientes na execução.

Arquitetura do Docker

Docker utiliza uma arquitetura cliente-servidor, onde o cliente Docker comunica com o daemon Docker, que é responsável por construir, executar e distribuir contentores Docker.

graph LD
    subgraph Arquitetura Docker
        client((Cliente Docker))
        daemon((Daemon Docker))
        registry((Registo Docker))
        client --> daemon
        daemon --> registry
    end

Contêineres Docker

Os contentores Docker são os blocos de construção básicos do Docker. Um contêiner é uma unidade de software padrão que empacota o código e todas as suas dependências, de modo que a aplicação execute de forma rápida e fiável de um ambiente informático para outro.

graph LD
    subgraph Contêiner Docker
        app((Aplicação))
        runtime((Tempo de execução))
        libs((Bibliotecas))
        bin((Binários))
    end

Imagens Docker

As imagens Docker são a base para os contentores. Uma imagem é um pacote de software leve, autónomo e executável que inclui tudo o que é necessário para executar uma aplicação: o código, um tempo de execução, bibliotecas, variáveis de ambiente e ficheiros de configuração.

Executando uma Aplicação Personalizada no Docker

Criando uma Imagem Docker Personalizada

Para executar uma aplicação personalizada num contêiner Docker, primeiro precisa de criar uma imagem Docker para a sua aplicação. Isto pode ser feito usando um Dockerfile, que é um documento de texto que contém todos os comandos que um utilizador poderia chamar na linha de comandos para montar uma imagem.

Eis um exemplo de Dockerfile para uma aplicação web Flask simples:

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]

Este Dockerfile:

  1. Inicia a partir da imagem base python:3.9-slim
  2. Define o diretório de trabalho para /app
  3. Copia o ficheiro requirements.txt e instala os pacotes Python necessários
  4. Copia o código da aplicação para o contêiner
  5. Especifica o comando para executar a aplicação (python app.py)

Construindo e Executando a Imagem Docker

Depois de ter o Dockerfile, pode construir a imagem Docker usando o comando docker build:

docker build -t my-flask-app .

Isto criará uma nova imagem Docker com a etiqueta my-flask-app.

Para executar a aplicação num contêiner Docker, utilize o comando docker run:

docker run -p 5000:5000 my-flask-app

Isto iniciará um novo contêiner baseado na imagem my-flask-app e mapeará a porta 5000 no host para a porta 5000 no contêiner.

Verificando a Aplicação

Agora pode aceder à aplicação em execução no seu navegador web visitando http://localhost:5000. Deverá ver o resultado da sua aplicação Flask.

Expondo uma Porta Personalizada

Por defeito, quando se executa um contêiner Docker, este está isolado do sistema anfitrião e da sua rede. Se a sua aplicação estiver a ser executada numa porta específica dentro do contêiner, é necessário expor essa porta ao sistema anfitrião para poder aceder à aplicação de fora do contêiner.

Expondo uma Porta

Para expor uma porta de um contêiner Docker, pode usar a opção -p ou --publish ao executar o comando docker run. A sintaxe é:

docker run -p <porta_anfitrião>:<porta_contêiner> <nome_imagem>

Por exemplo, se a sua aplicação estiver a ser executada na porta 8000 dentro do contêiner, pode expô-la à porta 80 no sistema anfitrião assim:

docker run -p 80:8000 my-app

Isto irá mapear a porta 80 no sistema anfitrião para a porta 8000 dentro do contêiner.

Verificando a Porta Exposta

Pode verificar se a porta foi exposta corretamente, verificando a saída do comando docker run, que deverá mostrar as portas mapeadas:

$ docker run -p 80:8000 my-app
 * Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)

Alternativamente, pode usar o comando docker port para listar as portas mapeadas para um contêiner em execução:

$ docker port <id_contêiner>
8000/tcp -> 0.0.0.0:80

Isto mostra que a porta 8000 dentro do contêiner está mapeada para a porta 80 no sistema anfitrião.

Agora, pode aceder à sua aplicação visitando http://localhost (ou o endereço IP do sistema anfitrião) no seu navegador web.

Resumo

Neste tutorial, aprendeu a executar uma aplicação personalizada num contêiner Docker e expor uma porta personalizada para acesso externo. Ao encapsular a sua aplicação em contêineres, pode garantir implementações consistentes e fiáveis, bem como a capacidade de escalar e gerir a sua aplicação de forma mais eficiente. A tecnologia de contentoresização do Docker fornece uma plataforma poderosa para os desenvolvedores construírem, distribuírem e executarem as suas aplicações de forma mais simplificada e eficiente.