Stop Fighting With Dependencies Forever! (Dev Containers Guide)

Table of Contents

Are you tired of cluttering your machine with countless programming languages, frameworks, and dependencies? Ever faced the dreaded "it works on my machine" problem?
 

Dev Containers in Visual Studio Code offer an elegant solution that keeps your system pristine while providing isolated, project-specific development environments.
 

If you're more of a visual learner or simply want to see how it's done, I recommend checking out my YouTube tutorial. It covers everything step-by-step.
 

Understanding Dev Containers

Dev Containers allow you to develop applications without installing any programming languages or frameworks directly on your computer. Instead, each project lives in its own container with all necessary tools and dependencies, keeping your local machine clean and organized.
 

 

Benefits of Dev Containers

Dev Containers solve several common development challenges:

  • Eliminate environment inconsistencies across team members
  • Prevent system cluttering with project-specific dependencies
  • Enable quick project cleanup by simply deleting containers
  • Ensure reproducible development environments
  • Simplify onboarding for new team members

Prerequisites

To get started with Dev Containers, you'll need only two things installed on your system:

Setting Up Your First Dev Container

Installing the Extension

The journey begins with installing the Dev Containers extension in VS Code. Open the Extensions marketplace (Ctrl+Shift+P or Cmd+Shift+P on Mac), search for "Dev Containers," and install the official Microsoft extension Dev Containers.
 

Creating the Dev Container Configuration

Let's break down each component of this setup process.
 

Initial Setup and Command Access

To begin configuring your Dev Container, you'll need to:

  1. Open VS Code's Command Palette (Ctrl+Shift+P on Windows or Cmd+Shift+P on Mac)
  2. Type "Add Dev Container Configuration Files" and select that option.


 

Configuration Location Choice

VS Code presents two options for configuration placement:

  • "Add configuration to workspace"
  • "Add configuration to user data folder"

Always choose "Add configuration to workspace" as this approach:

  • Keeps container settings project-specific
  • Allows different configurations per project
  • Maintains better version control integration
  • Enables easier sharing with team members

Template Selection Process

The template selection interface offers a comprehensive range of options:
 
Base Template Selection

  • Search for your desired programming language or framework (for example: Python3)
  • Browse through categorized templates
  • View recommended configurations for specific development scenarios

Version Selection
After choosing your base template, you'll need to select specific versions. For example, with Python:

  • Python 3.12 (Latest)
  • Python 3.11
  • Python 3.10
  • Earlier versions if needed

Feature Customization Options (Optional)

VS Code provides an extensive feature customization step where you can enhance your container with additional tools:
 
Development Tools

  • Version Control: Git, GitHub CLI
  • Cloud Tools: Azure CLI, AWS CLI
  • Package Managers: npm, pip, conda

Language-Specific Features

  • Python: Poetry, pylint, black
  • JavaScript: Node.js, npm
  • Database Tools: PostgreSQL, MongoDB
  • Testing Frameworks

This process creates a dev container folder in your project. Inside, you'll find the dev container JSON file - the blueprint for your development environment.
 

 

Understanding the Configuration File

The devcontainer.json file serves as the blueprint for your development environment, controlling how VS Code builds and configures your container. Here's what you need to know about its key components:
 

Core Properties

Image Configuration

{
    "image": "mcr.microsoft.com/devcontainers/python:1-3.12-bullseye"
}

This property defines the base Docker image, including the operating system and required runtime environments. In this case, an image containing python 3.12.
 

Dependency Management

{
    "postCreateCommand": "pip install -r requirements.txt"
}

The postCreateCommand property automates dependency installation during container creation, keeping your local machine clean while ensuring all project requirements are met.
 

Extension Management

{
    "customizations": {
        "vscode": {
            "extensions": [
                "github.copilot"
            ]
        }
    }
}

The customizations property allows you to specify VS Code extensions that should be automatically installed in your container environment.
 

Working with Dev Containers

Starting Your Container

  1. Open the Command Palette
  2. Type "Reopen in Container"
  3. Wait for the container build process to complete

The first build might take several minutes as Docker downloads the necessary images. Subsequent starts will be much faster thanks to Docker's caching mechanism.
 

Managing Your Development Environment

When working in a Dev Container, you'll notice a remote indicator in the bottom-left corner of VS Code. This shows you're operating inside the containerized environment. All your terminal commands, debugging sessions, and development tasks now run in this isolated space.
 

 

Rebuilding and Updating

When you need to modify your development environment:

  1. Update your devcontainer.json or dependency files
  2. Click the remote indicator
  3. Select "Rebuild Container"

Ending a Container Session

When you're done working, you can close the container connection by clicking the remote indicator in the bottom-left corner and selecting "Close Remote Connection." This frees up system resources while preserving your container for the next session.
 

Conclusion

Dev Containers represent a paradigm shift in how we manage development environments. By isolating project dependencies and configurations, they provide a clean, consistent, and efficient way to work on multiple projects without the usual headaches of dependency management.
 
Whether you're a solo developer juggling multiple projects or part of a team dealing with complex development environments, Dev Containers offer a powerful solution that streamlines your workflow while keeping your system clean and organized.
 

You Might Also Like

Scroll to Top