In order to publish images to the official Apache NiFi Docker Hub repositories, you must:
If you are an Apache NiFi PMC member, you can request this from ASF Infra. Here is an example:
Then, you must be logged into the Docker Hub from the command line, which you can do using: docker login
Any typical Linux/Unix/Mac NiFi dev environment should suffice. You will need:
Note: multi-platform Docker images do not require the build machine to match the target architecture(s). Docker buildx (included with docker desktop) provides the emulation necessary to build multi-platform images from any host architecture. An x86_64 or arm64 development machine should be suitable for this process.
The following instructions are for building and publishing official Docker Hub images from the apache/nifi source code repository, which includes:
For instructions for building and publishing the Apache NiFi MiNiFi C++ image, seeĀ Apache NiFi MiNiFi C++ below.
Clone the apache/nifi source code repository:
git clone git@github.com:apache/nifi.git |
Checkout the release tag for the version you want to build. For example, to checkout Apache NiFi 1.21.0, you would do:
git checkout rel/nifi-1.21.0 |
Run the following script to build and push all the Docker images:
#!/bin/sh
set -euxo pipefail
nifi_dir='/Users/jdoe/code/nifi'
version='1.21.0'
# ^^^^^^
# MAKE SURE TO CHANGE THE VERSION ABOVE
# MAKE SURE TO CHECKOUT THE rel/nifi-${version} TAG PRIOR TO RUNNING THIS SCRIPT
dockerhub_org='apache'
download_location=https://downloads.apache.org
#download_location=https://archive.apache.org/dist
# NiFi
nifi_repo="${dockerhub_org}/nifi"
nifi_docker_dir="${nifi_dir}/nifi-docker/dockerhub"
nifi_dockerfile="${nifi_docker_dir}/Dockerfile"
# Toolkit
nifi_toolkit_repo="${dockerhub_org}/nifi-toolkit"
nifi_toolkit_docker_dir="${nifi_dir}/nifi-toolkit/nifi-toolkit-assembly/docker"
nifi_toolkit_dockerfile="${nifi_toolkit_docker_dir}/Dockerfile.hub"
# MiNiFi
minifi_repo="${dockerhub_org}/nifi-minifi"
minifi_docker_dir="${nifi_dir}/minifi/minifi-docker/dockerhub"
minifi_dockerfile="${minifi_docker_dir}/Dockerfile"
# MiNiFi C2
c2_repo="${dockerhub_org}/nifi-minifi-c2"
c2_docker_dir="${nifi_dir}/minifi/minifi-c2/minifi-c2-docker/dockerhub"
c2_dockerfile="${c2_docker_dir}/Dockerfile"
# Registry
registry_repo="${dockerhub_org}/nifi-registry"
registry_docker_dir="${nifi_dir}/nifi-registry/nifi-registry-core/nifi-registry-docker/dockerhub"
registry_dockerfile="${registry_docker_dir}/Dockerfile"
build_image () {
dockerfile=$1
build_context=$2
docker_repo=$3
build_args=$4
platforms="linux/amd64,linux/arm64"
docker buildx build --push --platform "${platforms}" \
${build_args} \
--tag "${docker_repo}:${version}" \
--tag "${docker_repo}:latest" \
--file "${dockerfile}" \
"${build_context}"
}
cleanup () {
docker buildx rm nifi-builder
}
trap cleanup EXIT
docker buildx create --use --name nifi-builder --driver docker-container
echo 'Building & publishing NiFi'
build_image ${nifi_dockerfile} ${nifi_docker_dir} ${nifi_repo} "--build-arg NIFI_VERSION=${version} --build-arg BASE_URL=${download_location}"
echo 'Finished publishing NiFi'
echo 'Building & publishing NiFi Toolkit'
build_image ${nifi_toolkit_dockerfile} ${nifi_toolkit_docker_dir} ${nifi_toolkit_repo} "--build-arg NIFI_TOOLKIT_VERSION=${version} --build-arg MIRROR=${download_location}"
echo 'Finished publishing toolkit'
echo 'Building & publishing MiNiFi'
build_image ${minifi_dockerfile} ${minifi_docker_dir} ${minifi_repo} "--build-arg MINIFI_VERSION=${version} --build-arg MIRROR=${download_location}"
echo 'Finished publishing MiNiFi'
echo 'Building & publishing MiNiFi C2'
build_image ${c2_dockerfile} ${c2_docker_dir} ${c2_repo} "--build-arg MINIFI_C2_VERSION=${version} --build-arg MIRROR=${download_location}"
echo 'Finished publishing MiNiFi C2'
echo 'Building & publishing NiFi Registry'
build_image ${registry_dockerfile} ${registry_docker_dir} ${registry_repo} "--build-arg NIFI_REGISTRY_VERSION=${version} --build-arg MIRROR=${download_location}"
echo 'Finished publishing NiFi Registry'
echo "Don't forget to manually update the README files on docker hub!" |
Note: A copy of this script is also hosted (and updated) as a GitHub gist and may find a home in an Apache NiFi source code repository in the future:
https://gist.github.com/kevdoran/0bcb26c2f7435d7d53cc93c4e4393b52
The following instructions are for building and publishing the official Apache NiFi MiNiFi C++ image from the apache/nifi-minifi-cpp source code repository to Docker Hub at apache/nifi-minifi-cpp.
TODO