Hacker News new | past | comments | ask | show | jobs | submit login

For the Mac, just get Canonical’s Multipass (http://multipass.run) and do an apt-get to install Docker into a VM and use VS Code to “remote” to it. It will automatically install the Docker extension inside the Linux VM and you’re set.

For Windows, use WSL2 and do the same.

Both can mount “local” folders, although the setup is obviously different.

You now have a better way to manage containers than ever before.




Can’t say that limiting developers to VSCode is necessarily a step forward.


You don't need VSCode specifically, but it does provide an alternative GUI for managing Docker containers that isn't tied directly to Docker Desktop.

You could use anything to manage the Docker VM... VSCode is just one option.


Well, it does set up everything automagically for you. I can also dig around for my Docker CLI config and the right way to expose the Docker TCP socket to the host, but if you need a quick way to get working, VS Code is it.


Why run Docker inside a VM on a Mac, when you can just run the Linux dev environment directly inside the VM? That's just starting to sound like Docker for the sake of Docker.

Multipass, Qemu, and Parallels can all provide a solid VM on Mac host. All you need after that is your dev environment VM guest image to deploy to the team.

https://wiki.qemu.org/Hosts/Mac

https://www.parallels.com/


Some people here actually want and need Docker features. For me it's the ability to run from a given image and know that I've got _exactly_ the same image that other developers have. Reproducibility.


I might be wrong, but I think his point is that by the time you're running a linux VM for docker, why not go ahead and get the rest of the tooling for free?

Docker can still be run in the VM just fine, for cases where you want a reproducible build environment.

I do this at any company that lets me (and by lets, I mean doesn't explicitly forbid) - They all give me a Mac, and the first (and sometimes only) thing I install is usually vmware fusion, followed by the linux distro of my choice (Arch).


>for cases where you want a reproducible build environment.

Or just create your reproducible build environment as a QEMU VM image instead of a docker file. That way you only have to install a VM image, instead of install VM image/OS + install Docker + install your Docker file.


See, I don't really agree here.

Containers solve a different problem than vms. The biggest issues (at least for me) are

1. The second a dev starts using that VM, it's no longer reproducible. The goal of docker is that a developer can create reproducible images as a part of normal development.

2. I won't be running that QEMU vm in production, but I might very well be running the exact same container image in both development and production.


Just the cost of porting one single Dockerfile to anything else is bigger than the Docker licence cost for 1 year.


When I want a very specific version if the image, I use the SHA to pull/run

  $ docker pull hello-world@sha256:7d91b69e04a9029b99f3585aaaccae2baa80bcf318f4a5d2165a9898cd2dc0a1


Or you could tag a little more optimally.


Tags are mutable, digests aren't.


Why, how often do you change tags after you've built a container and for what reason if so?


Digests cryptographically guarantee that you get the correct content, which prevents both malicious tampering (mitm, stolen credentials, etc) or accidental mutations. This is why "immutable tags" are a bad substitute and an oxymoron.

There are also better caching properties when using content addressable identifiers. For example with kubernetes pull policies, using IfNotPresent and deploying by digest means you don't even have to check with the registry to initialize a pod if the image is already cached, which can improve startup latency.


> There are also better caching properties when using content addressable identifiers. For example with kubernetes pull policies, using IfNotPresent and deploying by digest means you don't even have to check with the registry to initialize a pod if the image is already cached, which can improve startup latency.

While agree on the unquoted part, this is true also for human-readable (aka mutable-that-should-be-immutable) tags, when that pull policy is set (which is by default for everything that is not `latest`)


With a sha you shouldn’t have to change the pull policy. However there isn’t a need for always if you have the sha.


Because you can map your working folder inside it on both Multipass and WSL2, and you can get an integrated editor experience with VS Code, which is what many people apparently want to do (I’m a tmux guy so I don’t care, but I thought I’d provide a user-friendly approach).


On Apple Silicon Multipass actually uses QEMU under the hood. Basically it's just a (very convenient) wrapper


I want to ship a dockerfile in my CI/CD pipeline, not a VM image


Because the end result of a lot of workflows (eg k8s) is a buildable dockerfile, or built docker image for deployment.



I would strongly recommend docker.io from Ubuntu/Debian repos. This will be always Apache 2.0 licensed. (It's a fork of Moby packaged by Debian people).

Docker Engine looks problematic since the license isn't clear at all. For instance, Microsoft didn't include Docker into GitHub Actions, they also forked Moby and packaged it on their own, since they can't comply with the End User Agreement of Docker Engine.


Regarding the GitHub Docker license thing, this is directly from GH staff (you’re correct): https://github.community/t/what-really-is-docker-3-0-6/16171...


No, you can apt-get docker.io (the repackaged version available for the last 2-3 LTS releases, built from source and with fan networking support). Works for 99.9% of your use cases.


Doesn't work on M1 chips yet.


It's in "beta" right now but it works quite well (you can find the binary in the dedicated GitHub issue). Under the hood it just uses QEMU which in turn uses Apple's Hypervisor.framework for virtualization


I believe this is the issue referenced above: https://github.com/canonical/multipass/issues/1857


This is the best solution. Multipass is also great software.


Why don't you just use the VM directly?


Multipass uses reverse sshfs for mounting into the VM. This is a concept also used by lima now. https://github.com/lima-vm/lima


Folder mapping, which both options provide.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: