canister 🛢️ iqlusion

Deployment tool for "Dockerless" microcontainers based on [systemd-nspawn], with a focus on security, simplicity, and low-overhead. Written in Rust.

What is canister?

This tool is designed for deploying applications which are released as self-contained binaries which are statically linked or dynamically linked with minimal dependencies (e.g. ld-linux, libc, libpthread). This makes it ideally suited for applications developed in languages like Go and Rust, as these languages toolchains and ecosystems make it easy to produce statically linked binaries (e.g. Go is statically linked by default, Rust is simple to link with [musl] for release artifacts).

It aims to provide an out-of-the box secure systemd-nspawn deployment tool with support for RedHat-derived Linux distros (namely [CentOS]) as well as support for [SELinux]), and in the process hopefully addressing concerns about systemd-nspawn's security and production-readiness. It may work on other Linux distros but is developed and tested on CentOS.

Supported release artifact formats are tarballs and [Docker scratch]-based images (i.e. single-layer only) containing the compiled binaries, as fetched from a Docker registry (in the form of a tarball). Our (as in [@iqlusioninc]'s) internal use of this tool is primarily with a Docker scratch-based workflow using a Docker-based build system (namely [GCP Cloud Build]).

License

Copyright © 2018 iqlusion

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.