abstract: FILL_dyAbstract

The problem

To install a number of computers to behave exactly the same is difficult; the trivial solution is to have only one computer, a laptop which can be carried around. Unfortunately, laptops are ergonomically problematic and the small screens lead to small print which is hard to read for old eyes. Thus the situation of multiple boxes which must be set up cannot be avoided. Differences are inevitable (especially if the boxes are different hardware) and disturbing; established workflows on one box must be adapted. The setup of configurations is at least time consuming and leads to further differences. In principle, this is all doable, but a major pain.

The target

Install once and produce a docker image, which runs an all hardware the same. Synchronize the data with a tool like syncthing.

Towards a solution

A number of tools are available and work well so far: I have a usable, exactly similar, desktop on a under the desk PC and a Raspberry 4 (RPi4) running, using

The performance on the systems are comparable - a editing a markdown file on the RPi4 shows the formated text as I type it without a noticeable delay. I assume that heavy compilation loads will show differences.


I have put all the Dockerfiles on github. They do not include any personal data and should be usable for others.

There is a certain level of idiosyncracy:

The images are build individually and one from the previous one in a chain, which is used as a tag and should make it possible to build other combinations.

The images are on Docker hub.

Starting the desktop with x11docker uses a script

x11docker xxx

What is left to do?


At the moment the configuration is stored on second home as files (mostly in the ~/.config directory); much of this could go to the Dockerfiles, probably selected with environment env values.

Other architectures

I have developed the idea for amd64 and arm64 (a.k.a. aarch) and will likely test on armv7l and arm6l. Test with other hardware and other kernels are required.

Invitation to join

This is a small project (a dozen Dockerfiles) and easy to grasp. I invite others, with an interest in GUI installations with Docker to join! Start an issue and we talk!


Problems discovered

The construction of the docker images is very time consuming (and failed often, this seems to be fixed). The construction of the docerfiles becomes difficult when specific details must be fixed; dockerfiles are easy to produce for the installation with standard routines, but not for tayloring to particular needs; in these cases, a routine for installation as a bash file is likely needed - the dockerization is then only appropriate afterwards for deployment. This is not likely worth it for the less than a dozen installation I need - the botleneck is the construction of the installation bash file.

The installation of an OS with docker is painless (except for the download times) but requires a running base installation with an updated kernel. Means: for each major kernel update a complete new installation of the OS is requried and the update of the docker images necessary.

what I have not tested is the use of dockerfiles to install a single program (i.e. latex, ghc, vscode).

Next approach

Install debian with automatic install (bash file) and the additional files with bash files corresponding to the current wiki texts.

sync the config files.

make docker only as far practical and useful - not the goal. The goal is only an automatic identical installation.

Problems expected: - files which must be different on systems: - hostname, hosts (for wiki when local) - differences between arm and amd processors. where? - sizes of some files (mail archives) - where to store files (other than ssd)

Limited scope

Try to cater only for - amd and aarch (64 bit arm, arm32 only as far as automatic). - use docker only for programms difficult to install and configure

Produced with SGG on with master5.dtpl.