Docker Container para Iniciantes: Criando Containers

Introdução

O que é o Docker?

Docker é uma plataforma de código aberto que automatiza a implementação, escalonamento e operação de aplicações utilizando containers. Containers são unidades leves e portáteis que incluem tudo o que é necessário para executar um software, incluindo bibliotecas, dependências e ferramentas do sistema. Docker Container são as aplicações dentro do Docker.

Por que Usar o Docker?

Usar Docker traz inúmeros benefícios, como melhoria da eficiência, consistência entre diferentes ambientes e facilidade de implementação. Ao containerizar suas aplicações, você pode garantir que elas funcionem de forma consistente, independentemente de onde são implementadas.

Conceitos-chave

Containers vs. Máquinas Virtuais

O que São Contêineres e Como Funcionam?

Contêineres são uma forma leve de virtualização que permite empacotar uma aplicação com todas as suas dependências numa unidade padronizada para desenvolvimento de software. Utilizam o kernel do sistema hospedeiro, mas executam em ambientes isolados, fornecendo um nível de isolamento semelhante às VMs.

Diferenças das VMs

  • Isolamento: Os contêineres partilham o kernel do SO anfitrião e têm o seu próprio sistema de ficheiros, enquanto as VMs incluem um sistema operativo completo.
  • Desempenho: Os contêineres são mais rápidos porque não exigem a emulação de hardware como as VMs.
  • Utilização de Recursos: Os contêineres utilizam menos recursos do que as VMs, pois não há necessidade de um SO separado.

Imagens Docker

O que é uma Imagem Docker?

Uma imagem Docker é um modelo somente de leitura que contém tudo o que é necessário para executar uma aplicação: código, bibliotecas, dependências e ferramentas do sistema. Serve como a base sobre a qual os contêineres são construídos.

Camadas de Imagem e Metadados

As imagens Docker são compostas por camadas. Cada instrução no seu Dockerfile cria uma nova camada. Estas camadas são armazenadas em disco e reutilizadas para eficiência. Quando você obtém uma imagem de um registo, ela consiste em várias camadas empilhadas umas sobre as outras.

Dockerfiles

Estrutura de um Dockerfile

Um Dockerfile é um ficheiro de texto simples que contém instruções sobre como construir uma imagem Docker. Segue um formato específico com linhas que começam com instruções (por exemplo, FROM, RUN, etc.). Aqui está um exemplo:

# Use an official Python runtime as a parent imageFROM python:3.9-slim-buster# Set the working directory in the containerWORKDIR /app# Copy the current directory contents into the container at /appCOPY . /app# Install any needed packages specified in requirements.txtRUN pip install --no-cache-dir -r requirements.txt# Make port 80 available to the world outside this containerEXPOSE 80# Define environment variableENV NAME World# Run app.py when the container launchesCMD ["python", "app.py"]

Instruções Comuns no Dockerfile

  • FROM: Especifica a imagem base.
  • WORKDIR: Define o diretório de trabalho dentro do contêiner.
  • COPY: Copia arquivos ou diretórios da sua máquina local para o contêiner.
  • RUN: Executa comandos dentro de uma nova camada em cima da imagem atual e confirma os resultados.
  • EXPOSE: Abre portas para conexões de entrada.
  • ENV: Define variáveis de ambiente.
  • CMD: Especifica o comando a ser executado ao iniciar o contêiner.

Registo

O registo Docker é um serviço de armazenamento que contém imagens Docker. Permite enviar as suas imagens personalizadas para que possam ser facilmente acedidas e partilhadas com outros. Você também pode obter imagens existentes do registo público ou dos seus repositórios privados.

Nota pessoal: Compreender estes conceitos-chave irá ajudá-lo a obter uma base sólida em contentorização, tornando mais fácil trabalhar com Docker.

Criar o Seu Primeiro Contêiner Docker

Criar o seu primeiro contêiner Docker é um passo emocionante no mundo da contentorização. Este guia irá orientá-lo através de tudo o que precisa saber, desde a instalação do Docker até a execução de uma aplicação simples num contêiner.

Instalar o Docker

Antes de começar a criar contêineres, precisa de instalar o Docker na sua máquina. Aqui estão os passos para instalar o Docker:

Passo 1: Baixe e Instale o Docker Desktop

Visite o site oficial do Docker para baixar o Docker Desktop para o seu sistema operativo (Windows ou macOS).

Nota pessoal: Certifique-se de que tem privilégios de administrador ao instalar o Docker. Isso permitirá que o processo de instalação seja concluído sem problemas.

Passo 2: Verificar a Instalação

Após a instalação, abra um terminal ou linha de comandos e digite:

docker --version

Isto deve retornar a versão instalada do Docker, confirmando que está configurado corretamente.

Para mais detalhes sobre instalação de Docker, veja os nossos posts sobre a instalar Docker no Windows e instalar Docker em MacOS.

Escrever o Seu Primeiro Dockerfile

Um Dockerfile é um script que contém instruções sobre como construir a sua imagem Docker. Inclui tudo o que é necessário para criar uma aplicação em contentor.

Passo 1: Criar um Diretório e Navegar Até Ele

Crie um novo diretório onde irá guardar os seus ficheiros relacionados com o Docker:

mkdir my_first_containercd my_first_container

Nota pessoal: Organizar os ficheiros do seu projeto de forma estruturada facilitará a gestão à medida que o seu projeto cresce.

Passo 2: Criar o Dockerfile

Dentro deste diretório, crie um ficheiro com o nome Dockerfile (sem qualquer extensão) e abra-o com o seu editor de texto favorito. Adicione o seguinte conteúdo:

# Use an official Python runtime as a parent imageFROM python:3.9-slim-buster# Set the working directory in the containerWORKDIR /app# Copy the current directory contents into the container at /appCOPY . /app# Install any needed packages specified in requirements.txtRUN pip install --no-cache-dir -r requirements.txt# Make port 80 available to the world outside this containerEXPOSE 80# Define environment variableENV NAME World# Run app.py when the container launchesCMD ["python", "app.py"]

Nota pessoal: Este Dockerfile utiliza o Python como exemplo. Pode substituí-lo por qualquer outra linguagem e framework com base nas suas necessidades.

Construir a Sua Imagem Docker

Com o Dockerfile criado, pode agora construir a sua imagem Docker usando o seguinte comando:

docker build -t my-first-app .

Isto irá criar uma nova imagem etiquetada como my-first-app.

Nota pessoal: A flag -t permite-lhe dar um nome e etiqueta à sua imagem. É uma boa prática usar nomes significativos para uma melhor organização.

Executar o Seu Contêiner Docker

Assim que a imagem for construída, é altura de a executar:

Passo 1: Iniciar o Contêiner

Execute o seguinte comando para iniciar o seu contêiner:

docker run -p 4000:80 my-first-app

Isto mapeia a porta 4000 no seu host para a porta 80 no contêiner, tornando a sua aplicação acessível em http://localhost:4000.

Nota pessoal: Tenha cuidado com as portas que expõe. Certifique-se de que não estão já a ser utilizadas por outros serviços.

Passo 2: Verificar se o Seu Contêiner Está a Funcionar

Pode listar todos os contêineres em execução usando:

docker ps

Este comando irá exibir uma lista de contêineres ativos juntamente com os seus IDs e nomes, confirmando que o seu contêiner está operacional.

Gerir Contêineres

À medida que continua a trabalhar com o Docker, irá achar útil saber como gerir os seus contêineres eficazmente. Aqui estão alguns comandos comuns:

  • docker run: Executa um novo contêiner.
  • docker stop <container_id>: Para um contêiner em execução.
  • docker start <container_id>: Inicia um contêiner parado.
  • docker ps: Lista os contêineres em execução.
  • docker rm <container_id>: Remove um ou mais contêineres, incluindo quaisquer volumes associados a eles.

Nota pessoal: Lembre-se sempre de parar e remover os seus contêineres quando terminar de trabalhar com eles. Isto ajuda a manter o seu ambiente limpo e eficiente.

Exemplo: Implementar uma Aplicação Web Python Simples

Vamos juntar tudo ao implementar uma aplicação web Python simples usando o Flask.

Passo 1: Configurar o Diretório do Seu Projeto

Crie um novo diretório para o seu projeto:

mkdir flask_appcd flask_app

Passo 2: Criar o Ficheiro de Requisitos

Crie um ficheiro requirements.txt com o seguinte conteúdo:

Flask==2.0.1gunicorn==20.1.0

Isto especifica as dependências necessárias para a sua aplicação.

Nota pessoal: Usar requirements.txt garante que todas as bibliotecas necessárias sejam instaladas ao construir a sua imagem Docker.

Passo 3: Escrever a Sua Aplicação

Crie um ficheiro com o nome app.py com o seguinte conteúdo:

from flask import Flaskapp = Flask(__name__)@app.route('/')def hello():    return 'Hello, World!'if __name__ == '__main__':    app.run(host='0.0.0.0', port=80)

Esta aplicação Flask simples responde com “Hello, World!” quando acedida.

Nota pessoal: Certifique-se de que tem a biblioteca Flask instalada no seu ambiente local para a testar antes de a contentorizar.

Passo 4: Criar um Dockerfile

No mesmo diretório que o seu app.py, crie um ficheiro com o nome Dockerfile:

# Use an official Python runtime as a parent imageFROM python:3.9-slim-buster# Set the working directory in the containerWORKDIR /app# Copy the current directory contents into the container at /appCOPY . /app# Install any needed packages specified in requirements.txtRUN pip install --no-cache-dir -r requirements.txt# Make port 80 available to the world outside this containerEXPOSE 80# Define environment variableENV NAME World# Run app.py when starting the containerCMD ["gunicorn", "--bind", "0.0.0.0:80", "app:app"]

Este Dockerfile usa o gunicorn para executar a sua aplicação Flask.

Nota pessoal: Usar o gunicorn garante que a sua aplicação consegue processar vários pedidos de forma eficiente, especialmente útil para ambientes de produção.

Passo 5: Construir e Executar o Seu Contêiner

No terminal, navegue de volta para o diretório do seu projeto:

cd flask_app

Construa a imagem Docker:

docker build -t my-flask-app .

Execute o contêiner, expondo a porta 80 na sua máquina host:

docker run -p 4000:80 my-flask-app

Passo 6: Aceder à Sua Aplicação

Abra um navegador web e vá para http://localhost:4000. Deverá ver “Hello, World!” exibido.

Nota pessoal: Implementar a sua aplicação num contêiner Docker permite-lhe gerir facilmente as dependências e garantir a consistência em diferentes ambientes.

Melhores Práticas

Isolamento de Contêineres

Certifique-se de que cada contêiner seja executado isoladamente. Isto pode ser alcançado especificando limites de recursos e configurando políticas de rede.

Considerações de Segurança

Mantenha as suas imagens seguras atualizando regularmente as imagens base, procurando vulnerabilidades e evitando executar contêineres com privilégios de root.

Otimizar Dockerfiles

Minimize o tamanho da sua imagem Docker para reduzir as superfícies de ataque. Use builds multi-estágio para criar imagens menores. Evite adicionar arquivos ou dependências desnecessárias na imagem final.

Tópicos Avançados

Redes no Docker

O Docker suporta uma variedade de recursos de rede, incluindo redes bridge, redes host e redes overlay. Aprenda a configurar estas para o seu caso de uso específico.

Docker Compose para Aplicações Multi-contêineres

Use o Docker Compose para definir e executar aplicações Docker multi-contêineres. Isto simplifica a gestão de múltiplos serviços dentro de uma aplicação.

Conclusão

Resumo dos Benefícios

O Docker oferece inúmeros benefícios, como melhoria da eficiência, consistência em diferentes ambientes, implementação mais fácil e melhor utilização de recursos. É uma ferramenta poderosa para as práticas modernas de desenvolvimento de software.

Próximos Passos para a Aprendizagem

Para aprofundar o seu conhecimento em Docker:

  1. Explore a documentação oficialDocumentação Oficial do Docker.
  2. Pratique com projetos do mundo real: Construa e coloque em contêiner aplicações simples.
  3. Junte-se à comunidade Docker: Participe em fóruns, assista a encontros ou siga blogs relevantes.

Nota Pessoal

Lembre-se de manter as suas imagens Docker e imagens base atualizadas para melhor segurança e desempenho. Boa programação!

Recursos Adicionais

Este guia deve dar-lhe uma base sólida em Docker e ajudá-lo a começar com a contentorização. Boa contentorização!

Pode fazer uma doação para ajudar a mater o site, Obrigado!