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:
- Explore a documentação oficial: Documentação Oficial do Docker.
- Pratique com projetos do mundo real: Construa e coloque em contêiner aplicações simples.
- 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!