The Cannery
Experimental | See also: The Platform
Cat's Eye Technologies now has Docker images available on Docker Hub for several of its distributions.
Putting a Dockerfile and a build script in each distribution repository felt not-quite-right somehow, so this repository was created to hold all the Dockerfiles, build scripts, and documentation for each Docker image.
In addition -- and this is significant -- there is a set of driver
scripts in the bin directory of this repository, which run the
executables in these containers almost as if you had the executable
installed locally.
Each driver script will download any image it needs from Docker hub first, if it is not yet present on the system.
So all you need to do is put bin on your executable search path,
and suddenly you have a myriad of Cat's Eye Technologies' tools and
language interpreters and such at your disposal, right from your
command line (or shell, or Terminal, or whatever you like to call it.)
Caveats
"almost as if you had it installed locally" does have some limitations.
The containerized executable works on the host's file system through a bind mount. The driver script establishes a bind mount from the current working directory of the host, and the container can't see any of the host's filesystem that is outside that directory.
So, for example, you can't tell a compiler to output the generated
executable file to ../built/out.foo because it can't see ../.
Also, the Docker daemon always runs as root. The script tells the
container to be run as the current user on the host. This prevents
the files that the executable writes from being owned by root. But
this directive is not total; the Docker daemon still runs as root.
For that reason I would recommend not running the driver scripts
from a directory that contains anything important, such as /.
Also, there are ways to make the Docker daemon run as non-root. But they are outside the scope of this document.
Containerization for Preservation
Because the idea here is "containerization for preservation" rather than "containerization for deployment", we don't rebuild the images regularly. Every time one of these images is rebuilt, it pulls the latest packages from the system package manager repository, which rebuilds that layer, which causes new layers to be built on top of it, bloating everything. Since they are not used as servers, and because they are containerized, the need to update system packages regularly to fix critical (exploitable) defects is reduced.
Base Images
Python 3.x
For Python 3.x-based executables, the base image used is usually python-3.5.7-slim-stretch. More recent images may be based on python-3.11-slim.
Python 2.7.x
For Python 2.7-based executables, the base image used is bitnami/python:2.7.18-prod.
Erlang R16
For Erlang R16-based executables, the base image used is andreineculau/erlang-r16b03-1:latest.
Commit History
@master
git clone https://git.catseye.tc/The-Cannery/
- containerized-hastec lives in its own repository now. Chris Pressey 4 years ago
- Allow hastec to be run as a regular user. The Cabal package Chris Pressey 5 years ago
- Collect settings in one place. Chris Pressey 5 years ago
- Use a more well-trodden, package-updatable base image. Chris Pressey 5 years ago
- Experimental Python 2.7-based container for `tamsin`. Chris Pressey 5 years ago
- Build directory and launcher script for samovar. Chris Pressey 5 years ago
- Place hastec under support directory. Chris Pressey 5 years ago
- Merge branch 'haste-compiler' into scripts Chris Pressey 5 years ago
- Update pull-docker-images.sh Chris Pressey 5 years ago
- Add script for kinoje. Chris Pressey 5 years ago
- Add script for feedmark. Chris Pressey 5 years ago
- These are not executable actually. Chris Pressey 5 years ago
- The SixtyPical version is actually 0.20. Chris Pressey 5 years ago
- Reorganize nearly everything into bin, script, catseye directories. Chris Pressey 5 years ago
- Script for yastasoti, and refactor existing scripts. Chris Pressey 5 years ago
- Add a script for running falderal (with shortcomings). Chris Pressey 5 years ago
- Add script for running sixtypical. Chris Pressey 5 years ago
- Explain why we can't run it how we'd like. Chris Pressey 5 years ago
- Add hastec command. Chris Pressey 5 years ago
- Clean up unneeded commands in build script. Chris Pressey 5 years ago
- Rename image to the executable it contains. Chris Pressey 5 years ago
- Dockerfile for an extended (with Parsec-3.1.1) haste-compiler image. Chris Pressey 5 years ago
- Update kinoje to 0.7 (now on Python-3.6-slim-stretch). Chris Pressey 5 years ago
- Refactor scripts and add pull-docker-images.sh script. Chris Pressey 5 years ago
- Build Docker image for Feedmark 0.11. Chris Pressey 6 years ago
- Update for release of Feedmark 0.10. Chris Pressey 6 years ago
- Revert "Add sally2c docker image, which is quite experimental." Chris Pressey 6 years ago
- Add sally2c docker image, which is quite experimental. Chris Pressey 7 years ago
- Build script looks in SHELF_PATH to find SOURCE. Chris Pressey 7 years ago
- Initial import of files for The Cannery (Docker image build area.) Chris Pressey 7 years ago