Docker
1. Introdução ao Docker
O que é Docker?
Docker é uma plataforma de virtualização baseada em containers que permite empacotar,
distribuir e executar aplicações de forma isolada e eficiente.
Por que usar Docker?
• Isolamento: Cada aplicação roda em seu próprio ambiente.
• Portabilidade: Funciona em qualquer sistema com Docker instalado.
• Eficiência: Consome menos recursos que máquinas virtuais (VMs).
• Reprodutibilidade: Garante que a aplicação funcione igual em qualquer ambiente.
Docker vs Máquinas Virtuais (VMs)
Característica Docker Máquina Virtual (VM)
Isolamento Processo Sistema Operacional Completo
Performance Quase nativa Overhead maior
Tamanho MBs GBs
Inicialização Segundos Minutos
2. Conceitos Fundamentais
Imagem (Image)
• Modelo read-only usado para criar containers.
• Exemplo: ubuntu:latest, nginx:alpine.
Container
• Instância executável de uma imagem.
• Isolado do sistema host, mas compartilha o kernel.
Dockerfile
• Arquivo de texto com instruções para construir imagens.
Docker Hub
• Repositório público de imagens Docker (como o GitHub para imagens).
Volume
• Mecanismo para persistir dados fora do container.
Rede (Network)
• Permite comunicação entre containers e com o mundo externo.
3. Arquitetura do Docker
• Docker Daemon (dockerd): Servidor que gerencia containers.
• Docker Client (docker): Interface de linha de comando (CLI).
• Docker Registry: Armazena imagens (ex: Docker Hub).
• Docker Objects: Imagens, containers, redes, volumes.
4. Instalação e Configuração
Instalação no Linux (Ubuntu)
bash
Copy
sudo apt update
sudo apt install docker.io
sudo systemctl enable --now docker
sudo usermod -aG docker $USER # Adiciona usuário ao grupo docker
Instalação no Windows/macOS
• Baixe o Docker Desktop em https://www.docker.com/products/docker-desktop.
Verificando a instalação
bash
Copy
docker --version
docker run hello-world # Testa a instalação
5. Comandos Básicos do Docker
Comando Descrição
docker pull <imagem> Baixa uma imagem do Docker Hub
docker run <imagem> Cria e inicia um container
docker ps Lista containers em execução
docker ps -a Lista todos os containers
docker stop <container> Para um container
docker rm <container> Remove um container
docker rmi <imagem> Remove uma imagem
docker exec -it <container> bash Acessa um container em execução
docker logs <container> Mostra logs do container
Exemplo: Executando um Container Nginx
bash
Copy
docker pull nginx
docker run -d -p 8080:80 --name meu-nginx nginx
# Acesse http://localhost:8080
6. Dockerfile: Criando Imagens Personalizadas
Estrutura Básica de um Dockerfile
dockerfile
Copy
FROM ubuntu:latest
RUN apt update && apt install -y python3
COPY app.py /app/
WORKDIR /app
CMD ["python3", "app.py"]
Comandos do Dockerfile
Comando Descrição
FROM Imagem base
RUN Executa comandos durante o build
COPY Copia arquivos do host para a imagem
WORKDIR Define o diretório de trabalho
CMD Comando padrão ao iniciar o container
Construindo uma Imagem
bash
Copy
docker build -t minha-app .
docker run minha-app
7. Docker Compose: Gerenciando Múltiplos Containers
O que é Docker Compose?
Ferramenta para definir e executar aplicações multi-container usando um arquivo YAML.
Exemplo de docker-compose.yml
yaml
Copy
version: "3.8"
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: senha123
Comandos do Docker Compose
bash
Copy
docker-compose up -d # Inicia os containers
docker-compose down # Para e remove os containers
8. Redes e Volumes no Docker
Redes
• Bridge: Rede padrão para comunicação entre containers.
• Host: Remove isolamento de rede (container usa rede do host).
• None: Sem acesso à rede.
bash
Copy
docker network create minha-rede
docker run --network minha-rede nginx
Volumes
• Bind Mount: Vincula um diretório do host ao container.
• Volume Docker: Gerenciado pelo Docker (melhor para produção).
bash
Copy
docker volume create meu-volume
docker run -v meu-volume:/dados nginx
9. Docker Hub e Registries
Publicando uma Imagem no Docker Hub
bash
Copy
docker login
docker tag minha-app usuario/minha-app
docker push usuario/minha-app
Outros Registries
• Amazon ECR
• Google Container Registry (GCR)
• Azure Container Registry (ACR)
10. Boas Práticas e Segurança
• Use imagens oficiais (ex: nginx, ubuntu).
• Não execute como root (USER no Dockerfile).
• Minimize o tamanho da imagem (use .dockerignore).
• Atualize frequentemente para corrigir vulnerabilidades.
11. Docker em Ambientes de Produção
• Orquestração: Kubernetes, Docker Swarm.
• Monitoramento: Prometheus, Grafana.
• Logs: ELK Stack, Fluentd.
12. Ferramentas e Ecossistema Docker
• Kubernetes: Orquestração de containers.
• Portainer: Interface gráfica para Docker.
• Traefik: Load balancer e proxy reverso.
13. Exercícios Práticos
1. Crie um container MySQL e persista os dados em um volume.
2. Construa uma imagem Docker para uma aplicação Python.
3. Use Docker Compose para subir um WordPress com MySQL.
Conclusão
O Docker revolucionou a forma como desenvolvemos, entregamos e executamos aplicações. Com
este material, você está preparado para começar a usar Docker em seus projetos!