A simple communication device for use with development containers.
Development containers are great.
But there is an issue which can be seen in the following picture:
It's not to scale!
Stuff required to run the application is only a fraction (both in numbers and in size) of the stuff required to develop it.
All those compilers, SDKs, build tools, debuggers, productivity tools, etc.
when put into a single container may at some point start to interfere with one another.
Tools that are useful, say, 1% of the time will still sit there increasing image build time and size.
Abundance of things means more frequent upgrades and hence more frequent image rebuilds.
Moreover, upgrading any one thing will require rebuilding half of the image
due to how build cache works.
This means that you are about to spend O(N2) time rebuilding your dev container
(where N is the number of things installed into it).
The solution is to split development environment into multiple containers, each responsible for its own compiler, SDK, build tool, debugger, etc. Each can be built and run independently. All is needed is a voicepipe. One container will shout commands into it. On the other side a different container will run the command and send the results back.
It has been developed and tested on Linux. Whether it works on other systems is an open question. Your feedback (both positive and negative) is highly appreciated!
You will need make
and C++ compiler.
Simply:
make
It should produce voicepipe-client
and voicepipe-server
executables in the project root directory.
Copy voicepipe-client
executable into the container where you want to shout commands into a voicepipe.
Create symlinks pointing to it named after the commands you want to offload into a different container.
Make sure those symlinks are in PATH
.
Copy voicepipe-server
executable into the containers that are responsible for running the commands.
Set it as container's ENTRYPOINT
.