VMs & Devcontainers

Once upon a time, I was running Node on my host computer, as most developers do, and I started running into issues where things were getting garbled, for lack of a desire to specify what was going on—largely because I only remember things going awry, as this was quite some time ago. Annoyed, I decided to uninstall Node, and discovered the painstaking process of having to gut the damn thing from my system.

Then I tried using NVM, thinking it would improve my Node experience, but I only got further annoyed by how much effort it took to get it running correctly. I gutted my system of that too, then researched other options.

I discovered virtual machines (VM) and learned I could install and run Linux right inside of MacOS. This led to learning my way around Linux, but quickly became a chore in setting up a new VM every time I needed a fresh start. Create the machine, install Linux, locate and install all the tooling, etc. Thinking there has to be a better way, I did a little digging and discovered Ansible.

Audible is generally built for quickly scaffolding cloud environments, but I found ways to make it work for my local VM needs. This cut my setup times down exponentially and allowed me to get coding much faster, but it was still some hassle up front. Barring the initial setup, I still had to boot into the VM to get anything done. And as powerful as Linux could be, it wasn’t as luxurious as working in my Mac.

I tried playing with Vagrant for some time, but never got very far with it.

It wasn’t until recently that I finally decided to give Devcontainers a try. By this time, I was well familiar with Docker, so there really is zero excuse in not having migrated sooner, except that I was intimidated by having to learn yet another thing that wasn’t some library or framework I was working with. But I put my head down, learned the fucking thing, and now I kick myself in the ass that I didn’t do so sooner.

Now, the tooling available on my host is minimal:

Docker Desktop & Apple Container

Warp Terminal

VS Code

And that’s it. Apple Container is used for single purpose containers, whereas Docker Desktop is used to run Compose apps and Devcontainers. Warp Terminal for day to day processes that are not project-specific, and VS Code as my editor.

With Devcontainers, I just need an existing container image or Dockerfile, set my configuration options and Code extensions I want available in the container, and boom, I have a full-blown dev environment ready to go whenever I need access to tooling such as Node, Python, or Rust.

My VMs still exist, but I rarely use them. I don’t need the Ansible collections I had developed to scaffold my VMs, so now they’re just sitting in my GitHub, untouched. I don’t know if I want to archive them or delete them outright; I don’t foresee a time when I’ll need them again. I have a number of projects I created to assist me in my DevOps journey that now lie abandoned. It might just be time to let them go.