View Source Dockerfile and build instructions
Please have a look through the following information to build eturnal images.
Dockerfile multi-stage diagram
The Dockerfile
is a multi-stage Dockerfile. The left side of the flowchart below shows the
build arguments. The nodes illustrate the different stages. Thick links between
the nodes describe the default build process defined by the build arguments in
the Dockerfile
.
flowchart LR
L[METHOD='build'] == SOURCE='local' ==> A;
L[METHOD='build'] -. SOURCE='git'<br/>VERSION='x.x.x' .-> B;
L[METHOD='build'] -. SOURCE='web'<br/>VERSION='x.x.x' .-> C;
L[METHOD='build'] ==> G;
M[METHOD='package'] .-> K;
M[METHOD='package'] .-> H;
subgraph prepare eturnal
subgraph build & install eturnal
A(local) ==> D;
B(git) .-> D;
C(web) .-> D;
end
subgraph install eturnal package
K[(output from:<br/>tools/make-binaries)] .-> E;
end
D(build) ==> F;
E(package) ==> F;
end
subgraph prepare runtime base image
G(base-build) ==> I;
H(base-package) .-> I;
end
F(eturnal) ==> J(release);
I(runtime) ==> J(release);
Build container images
From the root of the repository, to build with local
source files the
docker buildx build
or podman build
command is:
docker buildx build --load -t myname/eturnal:mytag .
No need to set --build-arg METHOD='build'
and --build-arg SOURCE='local'
in
the example above as those are the default values (see diagram above).
Instead, if the source files should be downloaded from github and a specific
version should be built (VERSION=master
is default), the build command would
be:
docker buildx build --load \
-t myname/eturnal:mytag \
--build-arg SOURCE='git' \
--build-arg REPOSITORY='https://github.com/processone/eturnal' \
--build-arg VERSION='1.10.1' \
.
When building with SOURCE='web'
you need to define an eturnal release version,
e.g. VERSION='1.10.1'
. Otherwise the build will fail. Please have a look at
the official archive.
docker buildx build --load \
-t myname/eturnal:mytag \
--build-arg SOURCE='web' \
--build-arg VERSION='1.10.1' \
.
Building with METHOD='package'
requires eturnal binary tarballs built with the
make-binaries
script from this repository. The respective targets must be x86_64-linux-musl
or aarch64-linux-musl
. This depends of course on the image variant you want to
build. The tarballs must be located in the root of the repository.
docker buildx build --load \
-t myname/eturnal:mytag \
--build-arg METHOD='package' \
.
Building eturnal tarballs for musl-libc
You can use the provided Dockerfile.ctng
to build eturnal tarballs with our make-binaries
script.
From the root of the eturnal repository, do:
docker build -f tools/Dockerfile.ctng -t localhost/myname/ctng:eturnal .
Building tarballs for musl-libc
with the Debian-based Dockerfile.ctng
image
requires a bootstrapped erlang based on the docker host machine's architecture,
hence, $(uname -m)-linux-gnu
in the targets below.
targets="$(uname -m)-linux-gnu $(uname -m)-linux-musl"
docker run --rm -d \
--name ctng-eturnal \
--user $(id -u $(whoami)) \
-v ctng:/ctng \
-v $PWD:/eturnal \
localhost/myname/ctng:eturnal \
$targets
docker logs -f ctng-eturnal
Be aware that building the toolchains takes a long time in the first run. The
toolchain is stored persistently in the docker volume ctng
. New runs will be
significantly faster.
Building e.g. with Podman rootless
requires to have the correct permissions of
the eturnal repository:
podman unshare chown -R $(id -u $(whoami)) $PWD
Build the variant with acme.sh
included
From the root of the repository, do:
DOCKER_BUILDKIT=1 docker build \
-t localhost/myname/eturnal:acme \
--build-arg VARIANT=acme \
.