Docker e Docker Compose

Uma Revolução na Containerização

O que é Docker?

Docker empacota sua aplicação e tudo que ela precisa para rodar em um container isolado. Isso garante que ela funcione igual em qualquer lugar, seja no seu computador, servidor ou nuvem. Containers são mais leves que VMs, pois compartilham o kernel do sistema operacional.

O que é Docker?

  • Containerização: Empacotamento de aplicação + dependências
  • Isolamento leve: Sem SO completo como VMs
  • Portabilidade: Mesmo container em qualquer lugar
  • Eficiência: Menos recursos que VMs

Problemas Antes do Docker

  • 🔴 "Funciona na minha máquina"
  • 🔴 Dependências conflitantes
  • 🔴 Ambientes diferentes (dev, test, prod)
  • 🔴 Overhead de máquinas virtuais
  • 🔴 Deployment complexo e lento

Analogia: Docker é como um Container de Navio

Imagine que você precisa transportar mercadorias de diferentes tipos (aplicações) entre países (ambientes). Antes do container, cada mercadoria era embalada de um jeito, dificultando o transporte e aumentando o risco de problemas. Com containers padronizados, qualquer navio, caminhão ou trem pode transportar qualquer carga, de forma segura e eficiente.

  • Aplicação = Mercadoria
  • Container Docker = Container de navio
  • Ambiente (dev, prod) = Países diferentes
  • Docker Engine = Porto que manipula containers

Histórico do Docker

  • 2013: Solomon Hykes apresenta Docker na PyCon
  • Baseado em: Linux Containers (LXC), cgroups, namespaces
  • Objetivo: Simplificar deployment de aplicações
  • Crescimento: Adoção massiva em empresas de todos os tamanhos

Histórico do Docker

O Docker surgiu para resolver problemas antigos de deploy. Antes dele, era comum ouvir "funciona na minha máquina", pois cada ambiente tinha configurações e dependências diferentes. O Docker trouxe padronização, inspirando-se em tecnologias do Linux para criar containers leves e portáteis.

Problemas Antes do Docker

Sem Docker, desenvolvedores enfrentavam conflitos de dependências, ambientes inconsistentes e deploys demorados. Máquinas virtuais eram pesadas e lentas, dificultando a escalabilidade e aumentando custos.

Docker Compose

  • Orquestração multi-container
  • Arquivo YAML: Define serviços, networks, volumes
  • Um comando: docker-compose up
  • Perfeito para: Desenvolvimento local

Docker Compose

Quando um projeto precisa de múltiplos containers (por exemplo, app + banco de dados), o Docker Compose facilita a orquestração. Com um arquivo YAML, você define todos os serviços e, com um comando, sobe tudo de uma vez.

Exemplo docker-compose.yml

version: "3.8"
services:
  web:
    build: .
    ports:
      - "80:8000"
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: secret

Benefícios Principais

  • Consistência: O mesmo container roda em qualquer ambiente.
  • Velocidade: Deploys rápidos e fáceis de automatizar.
  • Escalabilidade: Fácil replicar e escalar serviços.
  • Custo: Menos recursos comparado a VMs tradicionais.

Resumindo

Docker revolucionou o desenvolvimento ao trazer portabilidade, eficiência e simplicidade para o deploy de aplicações, assim como os containers revolucionaram o transporte global.

Próximos Passos

  • Aprender Dockerfile
  • Explorar Docker Compose
  • Familiarizar com Docker Hub
  • Implementar em projetos reais