5 Docker design alternatives
David Anderson edited this page 2024-11-05 13:17:00 -08:00

Alternative ways to run Docker apps in BOINC on Windows:

Docker Desktop approach

Volunteers install Docker Desktop, separately from BOINC. This includes a WSL image, docker_desktop.

The Docker wrapper runs docker.exe (on Win) to create, run, and control Docker containers. Images are stored in the system-wide Docker store and are given special names to avoid conflicting with non-BOINC Docker usage.

Docker in WSL approach

Volunteers install a 'BOINC Docker WSL image' from the Windows store. This includes Podman.

The Docker wrapper runs a shell in this image, with a pipe for sending it commands (like the WSL wrapper does). It creates and runs Docker containers by sending Docker commands to this shell.

Docker images are stored within this image. There's no conflict with non-BOINC Docker usage.

Comparison

Advantages of the WSL approach:

  • Volunteer doesn't have to install Docker Desktop. Downloading and running this installer takes a lot of clicks. It's intended for developers, not consumers. I'm not sure how many volunteers will do it; probably less than 50%, maybe much lower.

  • We control what's in the BOINC Docker WSL image. In particular we can include the CRUI library (needed for checkpointing) and configure Docker to use it.

  • In the Docker Desktop approach the volunteer needs to have the UI open in order for the Docker engine to be running (is there a way to do this automatically?)

  • We don't really want the volunteer to know about Docker, or see the Docker GUI (which lets them fiddle around with images and containers, possibly breaking things).

Disadvantages of the WSL approach:

  • The BOINC Docker WSL image might be large - not sure.

Questions:

  • Is there any performance difference between the 2 approaches?
  • Can apps use GPUs in the WSL approach?
  • Can we run multithread apps in the WSL approach?

Other platforms

Linux: require volunteer to install Docker manually (and optionally CRUI)? Use this directly or run Docker inside of a Docker container? Can you do that?

Mac OS: I think we have to use Docker Desktop.