Install slices in a rock¶
In this tutorial, you will create a lean hello-world rock that uses chisel slices, and then compare the resulting rock with the one created without slices in Create a “Hello World” rock.
Prerequisites¶
snap enabled system (https://snapcraft.io)
LXD installed (https://linuxcontainers.org/lxd/getting-started-cli/)
skopeo installed (https://github.com/containers/skopeo)
Docker installed (https://docs.docker.com/get-docker/)
a text editor
Install Rockcraft¶
Install Rockcraft on your host:
snap install rockcraft --classic
Project Setup¶
Create a new directory, write the following into a text editor and save it as
rockcraft.yaml
:
name: chiselled-hello
summary: Hello world from Chisel slices
description: A "bare" rock containing the "hello" package binaries from Chisel slices.
license: Apache-2.0
version: "latest"
base: bare
build_base: "[email protected]"
platforms:
amd64:
parts:
hello:
plugin: nil
stage-packages:
- hello_bins
Note that this Rockcraft file uses the hello_bins
Chisel slice to generate
an image containing only files that are strictly necessary for the hello
binary. See Chisel for details on the Chisel tool.
Pack the rock with Rockcraft¶
To build the rock, run:
rockcraft pack
The output will look similar to:
Launching instance...
Retrieved base bare for amd64
Extracted bare:latest
Executed: pull hello
Executed: overlay hello
Executed: build hello
Executed: stage hello
Executed: prime hello
Executed parts lifecycle
Exported to OCI archive 'chiselled-hello_latest_amd64.rock'
The process might take a little while, but at the end, a new file named
chiselled-hello_latest_amd64.rock
will be present in the current directory.
That’s your chiselled-hello rock, in oci-archive format.
Run the rock in Docker¶
First, import the recently created rock into Docker:
sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:chiselled-hello_latest_amd64.rock docker-daemon:chiselled-hello:latest
Now you can run a container from the rock:
docker run --rm chiselled-hello:latest exec hello -t
Which should print:
hello, world
The chiselled-hello
image will have a size of 5.6 MB, which is much less in
size than the 8.8 MB hello
rock created in Create a “Hello World” rock.