🐳 CONTAINERS

Docker

Containerização de aplicações, criação de imagens, orchestration e deployment de microserviços de forma isolada e eficiente.

← Voltar ao início

Conceitos Fundamentais

Container vs VM

  • Containers partilham o kernel
  • Mais leves e rápidos
  • Isolamento ao nível do SO
  • VMs virtualizam hardware
  • Inicialização em segundos

Imagens

  • Templates só de leitura
  • Camadas (layers)
  • Registry (Docker Hub)
  • Tags para versões
  • Multi-stage builds

Containers

  • Instância de uma imagem
  • Estado efémero por defeito
  • Volumes para persistência
  • Redes virtuais
  • Port forwarding

Dockerfile Exemplo

# Imagem base
FROM python:3.11-slim

# Metadados
LABEL maintainer="francisco@email.com"
LABEL version="1.0.0"

# Diretório de trabalho
WORKDIR /app

# Copia ficheiros
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Copia código
COPY . .

# Expõe porta
EXPOSE 5000

# Comando inicial
CMD ["python", "app.py"]

Docker Compose

services:
web:
image: nginx:alpine
container_name: my-web
ports:
- "8080:80"
volumes:
- "./html:/usr/share/nginx/html:ro"
restart: unless-stopped
networks:
- app-network

db:
image: postgres:15
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- app-network

networks:
app-network:
driver: bridge

volumes:
postgres_data:

Comandos Essenciais

Imagens

  • docker pull nginx - descarregar
  • docker images - listar
  • docker rmi nome - remover
  • docker build -t nome . - construir
  • docker tag img novo:tag - etiquetar

Containers

  • docker run -d - detached
  • docker ps - listar ativos
  • docker ps -a - todos
  • docker stop/start nome
  • docker rmnome - remover

Debug & Logs

  • docker exec -it nome bash
  • docker logs nome
  • docker inspect nome
  • docker stats nome
  • docker top nome

Exemplos Práticos

francisco@docker:~$ docker run -d -p 8080:80 --name site nginx:alpine
# Cria container nginx na porta 8080

francisco@docker:~$ docker-compose up -d --build
# Constrói e inicia serviços

francisco@docker:~$ docker exec -it db psql -U postgres
# Entra no PostgreSQL

francisco@docker:~$ docker network ls && docker network inspect app_default
# Ver redes e containers conectados

francisco@docker:~$ docker system df && docker system prune -a
# Espaço em disco e limpeza