Building container images
vpsAdminOS comes with a tool for building, testing and deploying container
osctl-image itself doesn't know how to build
specific images, it has to be used together with build scripts.
prepares environment for the build scripts to run, decides what should be built,
where it should be built and processes build results.
The build scripts are called in three modes: configuration, build and test.
In configuration mode, the build scripts are called from the vpsAdminOS host
that osctl-image is run at.
osctl-image uses the configuration mode to learn
what images can be built, what environments the builds require and what tests
can be run.
Actual builds are run within build containers prepared by
Build containers are created simply from previously built images, where some
additional required packages can be installed. The build scripts declare what
build containers are needed and how to set them up.
In the build mode, the build scripts are supposed to prepare a root filesystem,
which is then packed into the container image by
osctl-image. The build scripts
can use whatever dependencies their build containers have at their disposal.
Tests are run from the host, but using
nix-shell so that the build scripts
can use whatever dependencies from nixpkgs they require. Each test is run
with a dedicated container, the script verifies if the container passes the test.
See man osctl-image(8) for more information.
osctl-image is a part of vpsAdminOS, so it has to be called from some
vpsAdminOS host. The build scripts have to be in the current working directory:
git clone -b vpsadminos https://github.com/vpsfreecz/build-vpsfree-templates vpsadminos-templates cd vpsadminos-templates
List available images:
osctl-image ls NAME DISTRIBUTION VERSION ARCH VENDOR VARIANT ubuntu-16.04 ubuntu 16.04 x86_64 vpsadminos minimal centos-6 centos 6 x86_64 vpsadminos minimal gentoo gentoo 20190607 x86_64 vpsadminos minimal alpine-3.9 alpine 3.9 x86_64 vpsadminos minimal nixos-unstable nixos unstable-20190607 x86_64 vpsadminos minimal nixos-19.03 nixos 19.03 x86_64 vpsadminos minimal opensuse-tumbleweed opensuse tumbleweed-20190607 x86_64 vpsadminos minimal devuan-2.0 devuan 2.0 x86_64 vpsadminos minimal fedora-30 fedora 30 x86_64 vpsadminos minimal fedora-29 fedora 29 x86_64 vpsadminos minimal debian-8 debian 8 x86_64 vpsadminos minimal alpine-3.8 alpine 3.8 x86_64 vpsadminos minimal ubuntu-18.04 ubuntu 18.04 x86_64 vpsadminos minimal centos-7 centos 7 x86_64 vpsadminos minimal void-glibc void glibc-20190607 x86_64 vpsadminos minimal void-musl void musl-20190607 x86_64 vpsadminos minimal debian-9 debian 9 x86_64 vpsadminos minimal arch arch 20190607 x86_64 vpsadminos minimal slackware-14.2 slackware 14.2 x86_64 vpsadminos minimal opensuse-leap-15.1 opensuse leap-15.1 x86_64 vpsadminos minimal
To build an image, you need to give
osctl-image a ZFS dataset for build
purposes. The dataset should not have any data nor subdatasets that you care
about. Build selected image with:
osctl-image build --build-dataset tank/image-builds alpine-3.9
Unless changed with option
--output-dir, the resulting images will be stored
Tests can be run with:
osctl-image test --build-dataset tank/image-builds alpine-3.9
If you wish to manually check the image, a container can be created as:
osctl-image instantiate --build-dataset tank/image-builds alpine-3.9
To deploy the image to a repository, use:
osctl-image deploy --build-dataset tank/image-builds alpine-3.9 /where/is/your/repository
See repositories for more information about how to manage container image repositories.
Containers managed by
osctl-image can be seen using
osctl-image ct ls
and deleted with
osctl-image ct del.