Você sabe o que são Dev Containers?

Olá! ❤

Olha que assunto interessante vamos ver hoje!

Trabalhar em projetos de desenvolvimento pode ser desafiador quando cada membro da equipe possui configurações diferentes de ambiente, versões de linguagens desatualizadas ou dependências conflitantes.

É aí que entram os Dev Containers – uma solução elegante para padronizar ambientes de desenvolvimento.

Siga nossa página no Linkedin e no Instagram e ajude a divulgar nosso conteúdo🥰

O Que São Dev Containers?

Dev Containers (Development Containers) são ambientes de desenvolvimento completos executados dentro de containers Docker (para ver mais sobre docker, clique aqui e aqui).

Eles permitem que você defina todo o ambiente necessário para seu projeto – incluindo runtime, ferramentas, extensões e dependências – em arquivos de configuração versionáveis.

A tecnologia foi popularizada pelo Visual Studio Code através da extensão “Dev Containers”, mas o conceito pode ser aplicado em outros editores e IDEs que suportam desenvolvimento em containers.

Container Architecture

Por Que Usar Dev Containers?

Consistência Entre Ambientes

Todas na equipe trabalham com exatamente as mesmas versões de ferramentas, bibliotecas e configurações. Acabam-se os problemas do tipo “funciona na minha máquina”.

Onboarding Simplificado

Novas desenvolvedoras podem começar a contribuir em minutos. Basta clonar o repositório e abrir no container – todas as dependências são instaladas automaticamente.

Isolamento de Projetos

Cada projeto roda em seu próprio container isolado. Você pode trabalhar em um projeto Python 3.9 e outro Python 3.12 simultaneamente sem conflitos.

Ambientes Limpos

Seu sistema operacional permanece limpo, sem poluição de dependências de múltiplos projetos. Se algo der errado, basta recriar o container.

Estrutura Básica

Um Dev Container é definido através de um arquivo .devcontainer/devcontainer.json na raiz do seu projeto:

{
  “name”: “Meu Projeto Python”,
  “image”: “mcr.microsoft.com/devcontainers/python:3.11”,
  “customizations”: {
    “vscode”: {
      “extensions”: [
        “ms-python.python”,
        “ms-python.vscode-pylance”
      ]
    }
  },
  “postCreateCommand”: “pip install -r requirements.txt”,
  “forwardPorts”: [8000]
}

Componentes Principais

Imagem Base

Você pode usar imagens pré-construídas da Microsoft ou criar suas próprias usando um Dockerfile customizado.

Customizações

Defina extensões do editor, configurações e temas que devem ser instalados automaticamente no container.

Comandos de Ciclo de Vida

  • postCreateCommand: Executado após a criação do container
  • postStartCommand: Executado toda vez que o container inicia
  • postAttachCommand: Executado quando você se conecta ao container

Port Forwarding

Exponha portas do container para seu host, permitindo acessar aplicações web rodando dentro do container.

Exemplo Prático: Node.js

Vamos criar um Dev Container para um projeto Node.js:

{
  “name”: “Node.js & TypeScript”,
  “image”: “mcr.microsoft.com/devcontainers/typescript-node:18”,
  “customizations”: {
    “vscode”: {
      “extensions”: [
        “dbaeumer.vscode-eslint”,
        “esbenp.prettier-vscode”,
        “bradlc.vscode-tailwindcss”
      ],
      “settings”: {
        “editor.formatOnSave”: true,
        “editor.defaultFormatter”: “esbenp.prettier-vscode”
      }
    }
  },
  “postCreateCommand”: “npm install”,
  “forwardPorts”: [3000],
  “features”: {
    “ghcr.io/devcontainers/features/git:1”: {}
  }
}

Features: Componentes Reutilizáveis

As features são componentes modulares que você pode adicionar ao seu Dev Container. Alguns exemplos:

  • Git e GitHub CLI
  • Docker-in-Docker
  • kubectl e Helm
  • AWS CLI
  • Terraform
{
  “features”: {
    “ghcr.io/devcontainers/features/docker-in-docker:2”: {},
    “ghcr.io/devcontainers/features/kubectl-helm-minikube:1”: {},
    “ghcr.io/devcontainers/features/aws-cli:1”: {}
  }
}

Docker Compose para Ambientes Complexos

Para projetos que necessitam de múltiplos serviços (banco de dados, cache, filas), você pode usar Docker Compose:

{
  “name”: “App Full Stack”,
  “dockerComposeFile”: “docker-compose.yml”,
  “service”: “app”,
  “workspaceFolder”: “/workspace”,
  “customizations”: {
    “vscode”: {
      “extensions”: [”ms-python.python”]
    }
  }
}

E o docker-compose.yml:

version: ‘3.8’
services:
  app:
    build: .
    volumes:
      - ..:/workspace:cached
    command: sleep infinity
  
  postgres:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: myapp
  
  redis:
    image: redis:7-alpine

Boas Práticas

1. Versione Suas Configurações

Mantenha o .devcontainer no controle de versão para garantir que todas usem o mesmo ambiente.

2. Use Imagens Oficiais

Prefira imagens oficiais da Microsoft ou comunidade quando possível. Elas são mantidas e otimizadas.

3. Minimize o Tamanho

Evite instalar ferramentas desnecessárias. Cada dependência aumenta o tempo de build.

4. Configure Volumes Adequadamente

Use volumes para persistir dados importantes como histórico de comandos, cache de dependências ou dados de desenvolvimento.

5. Documente Requisitos Especiais

Se seu projeto precisa de configurações específicas do host (GPU, dispositivos USB), documente claramente.

Limitações e Considerações

Performance

Em alguns sistemas operacionais (especialmente Windows e macOS), pode haver overhead de I/O devido à virtualização. Use volumes nomeados para dados que precisam de alto desempenho.

Recursos do Sistema

Containers consomem memória e CPU. Configure limites apropriados se necessário.

Ferramentas GUI

Dev Containers são otimizados para desenvolvimento CLI e web. Aplicações GUI podem requerer configuração adicional.

Alternativas aos Dev Containers

  • Vagrant: VMs completas, mais pesado mas com melhor isolamento
  • Nix: Gerenciamento declarativo de ambientes sem containers
  • asdf/mise: Gerenciadores de versões múltiplas de runtimes
  • Codespaces/Gitpod: Dev Containers na nuvem

Conclusão

Dev Containers transformam a forma como desenvolvemos software, eliminando problemas de configuração de ambiente e acelerando o onboarding de equipes. Se você ainda não experimentou, comece com um projeto simples e veja como essa abordagem pode melhorar seu fluxo de trabalho.

A padronização do ambiente de desenvolvimento não é apenas uma conveniência – é uma prática profissional que economiza tempo, reduz bugs e melhora a colaboração entre desenvolvedores.

Dica final: Explore o repositório oficial de templates em github.com/devcontainers/templates para começar rapidamente com diversos stacks tecnológicos.


Você já usa Dev Containers nos seus projetos? Compartilhe sua experiência nos comentários!