orca-build
orca-build
allows you to build OCI images from a Dockerfile
or Orcafile
. It
doesn't require a daemon or root privileges to operate. It is a fairly small
Python wrapper around the following projects (which are obviously requirements
to use orca-build
):
This was a SUSE Hackweek project and is mainly intended to be a simple tool for users that might want to create images as a rootless user, or to play around with a simple PoC of how various OCI technologies can interact with each other.
Usage
The usage is kinda like docker build
. You provide it a build context that
contains a Dockerfile
and orca-build
does the rest. I plan to add support for
some more of the docker build
flags in the near future, but at the moment it
works pretty well.
usage: orca-build [-h] [--clean] [--gc] [--output OUTPUT] [--verbose]
[--rootless] [--build-arg NAME=value] [-t TAGS]
ctx
Build an OCI image from a Dockerfile context. Rootless containers are also
supported out-of-the-box.
positional arguments:
ctx Build context which is used when referencing host
files. Files outside the build context cannot be
accessed by the build script.
optional arguments:
-h, --help show this help message and exit
--clean Remove all intermediate image tags after successful
build.
--gc Run a final garbage collection on output image.
--output OUTPUT Path of OCI image to output to (if unspecified, a new
image is created in /tmp).
--verbose Output debugging information.
--rootless Enable rootless containers mode.
--build-arg NAME=value
Build-time arguments used in conjunction with ARG.
-t TAGS, --tag TAGS Tag(s) of the output image (by default, randomly
generated).
Here's an example session of building a standard Dockerfile
:
% orca-build -t some-tag .
orca-build[INFO] BUILD[1 of 2]: from ['opensuse/amd64:42.2'] [json=False]
orca-build[INFO] Created new image for build: /tmp/orca-build.r2xp0v8h
---> [skopeo]
Getting image source signatures
Copying blob sha256:ed6542b73fb1330e3eee8294a805b9a231e30b3efa71390f938ce89f210db860
47.09 MB / 47.09 MB [=========================================================]
Copying config sha256:56fae18e2688b7d7caf2dd39960f0e6fda4383c174926e2ee47128f29de066cf
0 B / 805 B [-----------------------------------------------------------------]
Writing manifest to image destination
Storing signatures
<--- [skopeo]
orca-build[INFO] BUILD[2 of 2]: run ['echo', 'Hello orca-build!', '&&', 'cat', '/etc/os-release'] [json=False]
---> [umoci]
<--- [umoci]
---> [runc]
Hello orca-build!
NAME="openSUSE Leap"
VERSION="42.2"
ID=opensuse
ID_LIKE="suse"
VERSION_ID="42.2"
PRETTY_NAME="openSUSE Leap 42.2"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:42.2"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"
<--- [runc]
---> [umoci]
<--- [umoci]
orca-build[INFO] BUILD: finished
---> [umoci]
<--- [umoci]
orca-build[INFO] BUILD: created tags ['some-tag']
Installation
I don't know how to do the whole "installation" thing with Python, so here's
how you install orca-build
. It only depends on the standard library (and
having the above tools in your $PATH
).
% sudo make install
If you want to make sure that umoci
, skopeo
and runc
will play nicely
together, you can use make check
. It will attempt to run through a trivial
usage of rootless containers with the tools above. If this fails, update your
installation accordingly. This tweaking should not be necessary in future
versions.
% make check
I've only tested it with Python 3.6, but it should work with most modern Python 3 versions.
License
orca-build
is licensed under the terms of the GPLv3 (or later).
orca-build: container image builder
Copyright (C) 2017 SUSE LLC
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.