VMware Workstation – Containers with vctl

I never understood why people think Docker is a big thing. To me, it always seemed to solve a problem that does not exist by adding layers of complexity which inevitably always introduce new problems and bugs.

If you wanted to isolate processes, why not use jails or zones? “But Tsukasa”, people sneered at me with mild amusement in the past, “you don’t understand. It’s about the ease of replacing software!”. Yeah, you can do that without Docker, it’s called package management.

Somewhere along the line, the OCI was founded and at least there was some kind of standardized way of handling containers.

Enter VMware Workstation in the middle of 2020. Coming to us courtesy of a technical preview, VMware shipped the new vctl container CLI it plucked from VMware Fusion. And I really wanted to love it, because the idea behind it is good – but…

A Promising Disappointment

I am a VMware guy. After more than a decade with VMware Workstation, I really dig the features. Yes, you can probably achieve similar results with other virtualization solutions – but none make it as easy as VMware. Yes, call me indolent and a fanboy, if you must. So imagine my joy when VMware announced their container CLI.

No more need to install the Hyper-V role, no more fiddling with some wonky plugins – just a clean, supported product that does what Docker does, but with VMware’s hypervisor in the back. One product to be the definitive all-out solution for my desktop (x86) virtualization needs.

VMware creates a new virtual machine in the background that acts as a host for the containers. This machine does not show up on your usual list of running VMs. Instead, it will show you the active containers. Don’t click on them though, the Workstation UI does not really know what to do with containers and you will end up with a botched tab of nothingness.

Since vctl is using VMware’s hypervisor, all the good stuff is already in place and familiar to me. Network configuration is dead simple and I have all the tools to explore/manage the container VM.

The performance is also top-notch, so what could I possibly complain about?

The integration and the polish. vctl creates an alias to docker, so you can issue both a vctl ps or docker ps and get the same result. Unfortunately, vctl does not shim all the commands and parameters Docker has, meaning that a lot of tooling and cool integration simply does not work. Want to use VSCode’s Remote Container extension with VMware? Bad luck, the command does not reply in the expected fashion because it does not understand all the parameters.

This is incredibly disappointing because the container feature in Workstation is so close to being a fantastic proposition in a time where VMware sunsets some long-standing features (cough, Shared VMs, cough, Unity on Linux, cough).

It does what it says – and nothing more… yet!

Please don’t misunderstand: The feature does what it advertises to do. I can easily author a Dockerfile and build it with vctl – without having to install Docker. This by itself is already a godsend because it reduces the amount of software I need to install on my workstation.

But I cannot help but wonder how cool it would be to have a (parameter-compatible) drop-in replacement for Docker from VMware as part of the software I use for full virtualization anyway. And give me a docker-compose, while you are at it. Thanks.

Fixing mouse issues with VirtualPC -> VMware images

Microsoft often delivers free-to-test disk images of their products (like, for instance, the new Visual Studio 2010 CTP). These images are – who would have expected that? – in Microsoft’s own VirtualPC format. Luckily, the specs for the disk format are available and you can use the VMware Converter to just convert it into a vmdk (or use it directly, which I can’t really recommend).

Upon installing the VMware Tools, though, you’ll notice that the mouse gets stuck in the lower right corner of the screen if you didn’t remove the VirtualPC tools beforehand. Quite annoying, isn’t it? This comment describes how to solve the problem:

  • Fire up regedit, navigate to HKEY_LOCAL_MACHINESYSTEMCurrentControlSetContro lClass.
  • Within the keys under Class look for a value named UpperFilters, containing the value “msvmmouf”.
  • Remove “msvmmouf” from the value and reboot your VM.

Nifty.