Image Transcription: Meme
A photo of an opened semi-trailer unloading a cargo van, with the cargo van rear door open revealing an even smaller blue smart car inside, with each vehicle captioned as “macOS”, “Linux VM” and “Docker” respectively in decreasing font size. Onlookers in the foreground of the photo gawk as a worker opens each vehicle door, revealing a scene like that of russian dolls.
I’m a human volunteer content transcriber and you could be too!
Not just OSX: anyone using WSL on windows is an offender too
But as a WSL user, dockerised Dev environments are pretty incredible to have running on a windows machine.
Does it required 64 gig of ram to run all my projects? Yes. Was it worth it? Also yes
My experience using docker on windows has been pretty awful, it would randomly become completely unresponsive, sometimes taking 100% CPU in the process. Couldn’t stop it without restarting my computer. Tried reinstalling and various things, still no help. Only found a GitHub issue with hundreds of comments but no working workarounds/solutions.
When it does work it still manages to feel… fragile, although maybe that’s just because of my experience with it breaking.
You can cap the amount of cpu/memory docker is allowed to use. That helps a lot for those issues in my experience, although it still takes somewhat beefy machines to run docker in wsl
When it happens docker+wsl become completely unresponsive anyway though. Stopping containers fails, after closing docker desktop wsl.exe --shutdown
still doesn’t work, only thing I’ve managed to stop the CPU usage is killing a bunch of things through task manager. (IIRC I tried setting a cap while trying the hyper-v backend to see if it was a wsl specific problem, but it didn’t help, can’t fully remember though).
This is the issue that I think was closest to what I was seeing https://github.com/docker/for-win/issues/12968
My workaround has been to start using GitHub codespaces for most dev stuff, it’s worked quite nicely for the things I’m working on at the moment.
I found the same thing until I started strictly controlling the resources each container could consume, and also changing to a much beefier machine. Running a single project with a few images were fine, but more than that and the WSL connection would randomly crash or become unresponsive.
Databases in particular you need to watch: left unchecked they will absolutely hog RAM.
Does docker really spin up a VM to run containers?
Is that still true? I use Linux but my coworker said docker runs natively now on the M1s but maybe he was making it up
I suspect they meant it runs natively in that it’s an aarch64 binary. It’s still running a VM under the hood because docker is really just a nice frontend to a bunch of Linux kernel features.
Docker requires the Linux kernel to work.
M1 is just worse arm. Since most people use x86_64 instead of arm, docker had to emulate that architecture and therefore had performance issues. Now you’ve got arm specific images that don’t require that hardware emulation layer, and so work a lot better.
Since that didn’t solve the Linux kernel requirement, it’s still running a VM to provide it.
Don’t forget the ARM64 to AMD64 conversion.
I was about to comment this. That van also contains QEMU if your host is on ARM64.
When I was in school I once used a IOS emulator running inside a docker container of MacOS running on a linux machine. It works surprisingly smoothly.
The difference between Docker and a VM is that Docker shares a kernel, but provides isolated processes and filesystems. macOS has a very distinct kernel from Linux (hence why Docker on macOS uses a Linux VM), I would be shocked if it could run on a Linux Docker host. Maybe you were running macOS in a VM?
Nope, Mac OS as a Docker container, it’s a thing: https://hub.docker.com/r/sickcodes/docker-osx
Also you don’t need a Linux VM to run docker containers on a Mac host btw