5 min read

Dev Containers: Your Instant Developer Superpower

Dev Containers are isolated development environments that solve common problems like dependency conflicts, version management, and the "it works on my machine" syndrome.
Dev Containers: Your Instant Developer Superpower

Have you ever tried to explain to a non-tech friend why your computer suddenly stopped working after installing that "one little package"? Or spent an entire afternoon debugging only to discover it was a version conflict? Yeah, we've all been there. 😅

I used to be that developer with 15 different versions of Python, three Node.js installations, and countless conflicting dependencies creating a technological house of cards on my poor machine. One wrong move and poof — there goes my productivity for the day!

That's when I discovered Dev Containers — and honestly, they've been a game-changer. Imagine having a magic button that creates a perfect, isolated development environment for each project, leaving your precious machine pristine. Too good to be true? Let me show you how it works!

What's a Dev Container, Anyway?

Think of a Dev Container as your own personal development bubble that contains exactly what you need for a specific project — nothing more, nothing less.

Unlike traditional virtual machines that virtualize hardware (heavy, slow to start, resource-hungry), Dev Containers leverage Operating System-level virtualization. This means they're:

  • Lightning fast to start up ⚡
  • Incredibly lightweight on resources ðŸŠķ
  • Perfectly isolated from your system ðŸ›Ąïļ
  • Shareable with your team (bye-bye "works on my machine" syndrome!) ðŸĪ

Docker is the technology that makes this magic happen, and paired with Visual Studio Code, you've got a productivity powerhouse at your fingertips.

Prerequisites - The Only Things You'll Ever Need to Install

Before we dive in, here are the only three things you need on your machine (I promise, this is it!):

  1. Docker Desktop - Your container engine
  2. Visual Studio Code - Your trusty editor
  3. Dev Containers extension for VS Code - The magic connector

That's it. No more language runtimes, SDKs, or database engines directly on your machine!

Setting Up Your Dev Container Universe

Let me walk you through creating a multi-container development universe that handles both .NET and Python projects. Here's the folder structure we'll create:

DevStack
├──.gitignore
├──.git
├── docker-compose.yml
├── DevContainer-Dotnet
│   ├── .devcontainer.json
│   ├── MyApp1
│   ├── MyApp2
├── DevContainer-Python
│   ├── .devcontainer.json
│   ├── main.py

This structure gives us a git repository at the top level to track everything, a docker-compose file that orchestrates our containers, and separate folders for different tech stacks, each with its own configuration.

The Container Orchestration - Docker Compose

The heart of our setup is the docker-compose.yml file. Let's break down what it does:

version: '3.2'
services:
  devcontainer-dotnet:
    image: mcr.microsoft.com/devcontainers/dotnet:0-6.0
    volumes:
      - .:/workspace:cached
    command: tail -F anything
    networks:
      - api_net
    ports:
        - "7000:7000"
  devcontainer-python:
    image: mcr.microsoft.com/devcontainers/python:3.11-bullseye
    deploy:
      resources:
        limits:
          cpus: '0.90'
          memory: 4000M
    volumes:
      - .:/workspace:cached
      - model:/model
    command: tail -F anything
    networks:
      - api_net
    ports:
      - "8000:8000"
volumes:
  model:      
networks:
  api_net:

Let's decode this configuration, piece by piece:

services:
  devcontainer-dotnet:
    image: mcr.microsoft.com/devcontainers/dotnet:0-6.0
    volumes:
      - .:/workspace:cached
    command: tail -F anything
    networks:
      - api_net
    ports:
        - "7000:7000"

This snippet tells Docker:

  • "Hey, grab me the official .NET 6.0 container image — it has everything I need for .NET development"
  • Mount my local folder into the container at /workspace so my code is accessible inside
  • Keep the container running with that tail command (a little trick to keep it alive)
  • Connect it to a network called api_net so my containers can talk to each other
  • Forward port 7000, so I can access web apps running in the container

For the Python environment, we do something similar but with more resource controls:

 devcontainer-python:
    image: mcr.microsoft.com/devcontainers/python:3.11-bullseye
    deploy:
      resources:
        limits:
          cpus: '0.90'
          memory: 4000M
    volumes:
      - .:/workspace:cached
      - model:/model
    command: tail -F anything
    networks:
      - api_net
    ports:
      - "8000:8000"

The key differences here are:

  • We're using Python 3.11 on Debian Bullseye
  • We're limiting this container to 90% CPU usage and 4GB RAM (perfect for ML work that shouldn't take over your machine)
  • We've added a persistent volume called model to store ML models that should survive container restarts

Telling VS Code About Our Containers

Now for the final piece of the puzzle — the .devcontainer.json file that makes VS Code play nicely with our containers. Here's what it looks like:

{
  "name": "devcontainer-dotnet",
  "dockerComposeFile": [
    "../docker-compose.yml"
  ],
  "service": "devcontainer-dotnet",
  "shutdownAction": "none",
  "workspaceFolder": "/workspace/DevContainer-Dotnet",
}

This configuration is like a map for VS Code:

  • "Here's the name of the container I want to connect to"
  • "Here's where to find the docker-compose file"
  • "This is the service name within that compose file"
  • "When I close VS Code, don't shut down the container"
  • "When I open the container, start me in this folder"

There's a whole world of customization options for these files — from automatically installing extensions to running commands when the container starts. Check out the full reference here.

The Magic Moment: Opening Your Dev Container

Now for the fun part! With everything set up, you can open your project in a container with just a few clicks:

  1. Open VS Code
  2. Open either the "DevContainer-Dotnet" or "DevContainer-Python" folder
  3. When prompted, click "Reopen in Container" (or use Command Palette → "Dev Containers: Open Folder in Container")

Watch the magic happen:

DevContainer in action

VS Code connects to your container, giving you a fully configured development environment with all the right tools, dependencies, and settings. The best part? Your actual machine remains clean, and you can throw away the container anytime you want without affecting your system.

Three Levels of Dev Container Power

Level 1: The Solo Developer

Perfect for individual projects or experimentation:

  • Single container with everything you need
  • Fast to set up, easy to modify
  • Great for trying new technologies without commitment

Level 2: The Project Team

When you're working with others:

  • Shared container configuration in version control
  • "It works on everyone's machine" — guaranteed!
  • Onboarding new team members is as simple as "clone and open in container"

Level 3: The Enterprise

For serious production environments:

  • Pre-built, security-scanned containers
  • Integration with CI/CD pipelines
  • Consistent environments across development, testing, and production

The End of "It Works on My Machine"

Remember those dreaded words? "That's weird, it works on my machine!" With Dev Containers, those days are gone. Your entire team can use the exact same development environment, regardless of whether they're on Windows, Mac, or Linux.

What used to take hours or days (setting up development environments) now takes minutes. New team member? No problem! Junior developer? They can start coding immediately without fighting configuration issues.

Conclusion: The Future is Containerized

Dev Containers have transformed how I work. My laptop stays clean and performant, I can switch between projects with totally different tech stacks in seconds, and I never worry about dependency conflicts again.

If you've ever felt the pain of a broken development environment or wished you could just focus on writing code instead of fixing tooling issues, give Dev Containers a try. Your future self will thank you!

Have you tried Dev Containers? What was your experience? Drop a comment below and let me know what technology stack you'd like to containerize next!