Nessa semana eu aprendi - Semana 15 de 2025

O que é um “devcontainer?”

Um devcontainer (container de desenvolvimento) é uma funcionalidade do Visual Studio Code que permite criar um ambiente de desenvolvimento completo e isolado usando contêineres. Essa tecnologia resolve o clássico problema "funciona na minha máquina", fornecendo um ambiente consistente para todos os desenvolvedores de um projeto. De modo resumido, devcontainers permitem definir e provisionar ambientes de desenvolvimento de forma declarativa e consistente.

Instalando as extensões de desenvolvimento remoto

Estritamente falando, você só precisa instalar a extensão “Dev Containers para começar a usar esse recurso. Porém, existe um pacote de extensões chamado Remote Development que instala uma série de outras ferramentas adicionais bastante úteis:

Pacote de extensões para desenvolvimento remoto

Configuração do Podman no Visual Studio Code

Como eu rodo um sistema Fedora 41 com Podman na minha máquina de trabalho, a única coisa que eu tive que mudar nas configurações do VS Code foi o caminho de execução do binário do Podman:

"dev.containers.dockerPath": "podman",

Criando o seu primeiro devcontainer

Nesse exemplo, vamos criar os arquivos necessários para um devcontainer básico para desenvolvimento com Terraform em Azure:

Primeiro, precisamos criar uma estrutura de diretórios para nosso projeto:

  1. Crie um diretório .devcontainer na raiz do seu projeto

  2. Dentro desse diretório, vamos criar um arquivo chamado devcontainer.json

{
	"name": "Debian",
	"image": "mcr.microsoft.com/devcontainers/base:bookworm",
	"features": {
		"ghcr.io/devcontainers/features/azure-cli:1": {
			"extensions": [
				"azure-devops"
			]
		},
		"ghcr.io/devcontainers/features/github-cli:1": {},
		"ghcr.io/devcontainers/features/powershell:1": {},
		"ghcr.io/devcontainers/features/terraform:1": {
			"tflint": "latest",
			"terragrunt": "latest",
			"installTFsec": true,
			"installTerraformDocs": true
		}
	},
	"customizations": {
		"vscode": {
			"extensions": [
				"ms-azure-devops.azure-pipelines",
				"ms-azuretools.vscode-azurecli",
				"hashicorp.terraform",
				"azapi-vscode.azapi",
				"yzhang.markdown-all-in-one",
				"mhutchie.git-graph"
			]
		}
	}
}

Conceitualmente, o formato de um arquivo devcontainer.json é muito similar a um Dockerfile ou Containerfile: você define uma imagem base (no nosso caso, Debian) e depois adiciona pacotes ou features ao seu container.

Muitos dos features listados no repositório oficial do projeto possuem opções que podem ser personalizadas ao gosto do freguês. Por exemplo, no meu caso, além de declarar a Azure CLI no container, eu também configurei a extensão do Azure DevOps visto que trabalho diariamente com Azure Repos e Pipelines.

Além disso, você também pode customizar o seu VS Code para que o seu ambiente devcontainer inclua algumas extensões automaticamente, homogeneizando ainda mais a experiência dos desenvolvedores.

Trabalhando com devcontainers

  1. Organize os arquivos
    1. Coloque o devcontainer.json em um diretório .devcontainer
    2. Coloque os demais arquivos (main.tf, .gitignore, README.md, etc) na pasta raiz
  2. Abra o projeto
    1. Abra a pasta no VS Code
    2. Quando aparecer a notificação, clique em "Reopen in Container" OU
    3. Use F1 e digite "Remote-Containers: Reopen in Container"
  3. Comece a trabalhar
    1. O VS Code irá construir o container e instalar todas as ferramentas e extensões
    2. Após a inicialização, você terá Terraform, Azure CLI e as demais ferramentas declaradas instaladas no seu container de desenvolvimento

Containers são uma dádiva dos ninjas!

O devcontainer é tratado como um container normal pelo sistema

Espero que vocês tenham gostado dessa dica! Até semana que vem!

Next
Next

A saga do homelab