Document updated on Dec 7, 2021
If you use containers, the recommended approach is to write your own Dockerfile
and deploy an immutable artifact (embedding the config).
In its simplified form would be:
FROM devopsfaith/krakend:v2.0
COPY krakend.json /etc/krakend/krakend.json
# Uncomment with Enterprise image:
# COPY LICENSE /etc/krakend/LICENSE
A more real-life example illustrates below a combination of the check
command with a multi-stage build to compile a flexible configuration in a Dockerfile
:
FROM devopsfaith/krakend:v2.0 as builder
ARG ENV=prod
COPY krakend.tmpl .
COPY config .
## Save temporary file to /tmp to avoid permission errors
RUN FC_ENABLE=1 \
FC_OUT=/tmp/krakend.json \
FC_PARTIALS="/etc/krakend/partials" \
FC_SETTINGS="/etc/krakend/settings/$ENV" \
FC_TEMPLATES="/etc/krakend/templates" \
krakend check -d -t -c krakend.tmpl
# The linting needs the final krakend.json file
RUN krakend check -c /tmp/krakend.json --lint
FROM devopsfaith/krakend:v2.0
COPY --from=builder --chown=krakend:nogroup /tmp/krakend.json .
# Uncomment with Enterprise image:
# COPY LICENSE /etc/krakend/LICENSE
The Dockerfile
above has two stages:
The check
command compiles the template krakend.tmpl
and any included sub-template inside and outputs (FC_OUT
) the resulting /tmp/krakend.json
file.
The krakend.json
file is the only addition to the final Docker image.
The example above assumes you have a file structure like this:
.
├── config
│ ├── partials
│ ├── settings
│ │ ├── prod
│ │ │ └── env.json
│ │ └── test
│ │ └── env.json
│ └── templates
│ └── some.tmpl
├── Dockerfile
└── krakend.tmpl
Generate the skeleton above with:
mkdir -p config/{partials,settings,templates}
mkdir -p config/settings/{prod,test}
touch Dockerfile krakend.tmpl
Now the only missing step to generate the image, is to build it, making sure that the environment argument matches our folder inside the settings
folder:
$docker build --build-arg ENV=prod -t mykrakend .
The resulting image, including your configuration, weighs around 80MB
.
The documentation is only a piece of the help you can get! Whether you are looking for Open Source or Enterprise support, see more support channels that can help you.