|
|
@@ -368,21 +368,87 @@ docker_cleanup() {
|
|
|
}
|
|
|
|
|
|
## Build the default docker image based on debian 11.
|
|
|
-## NOTE: docker image build in github action does not call this
|
|
|
-## function, see build_and_push_docker_images.yaml
|
|
|
make_docker() {
|
|
|
- EMQX_BUILDER="${EMQX_BUILDER:-${EMQX_DEFAULT_BUILDER}}"
|
|
|
- EMQX_RUNNER="${EMQX_RUNNER:-${EMQX_DEFAULT_RUNNER}}"
|
|
|
- EMQX_DOCKERFILE="${EMQX_DOCKERFILE:-deploy/docker/Dockerfile}"
|
|
|
+ local EMQX_BUILDER_VERSION="${EMQX_BUILDER_VERSION:-5.1-3}"
|
|
|
+ local EMQX_BUILDER_PLATFORM="${EMQX_BUILDER_PLATFORM:-debian11}"
|
|
|
+ local EMQX_BUILDER_OTP="${EMQX_BUILDER_OTP:-25.3.2-1}"
|
|
|
+ local EMQX_BUILDER_ELIXIR="${EMQX_BUILDER_ELIXIR:-1.14.5}"
|
|
|
+ local EMQX_BUILDER=${EMQX_BUILDER:-ghcr.io/emqx/emqx-builder/${EMQX_BUILDER_VERSION}:${EMQX_BUILDER_ELIXIR}-${EMQX_BUILDER_OTP}-${EMQX_BUILDER_PLATFORM}}
|
|
|
+ local EMQX_RUNNER="${EMQX_RUNNER:-${EMQX_DEFAULT_RUNNER}}"
|
|
|
+ local EMQX_DOCKERFILE="${EMQX_DOCKERFILE:-deploy/docker/Dockerfile}"
|
|
|
+ local PKG_VSN="${PKG_VSN:-$(./pkg-vsn.sh)}"
|
|
|
+ # shellcheck disable=SC2155
|
|
|
+ local VSN_MAJOR="$(echo "$PKG_VSN" | cut -d . -f 1)"
|
|
|
+ # shellcheck disable=SC2155
|
|
|
+ local VSN_MINOR="$(echo "$PKG_VSN" | cut -d . -f 2)"
|
|
|
+ # shellcheck disable=SC2155
|
|
|
+ local VSN_PATCH="$(echo "$PKG_VSN" | cut -d . -f 3)"
|
|
|
+ local SUFFIX=''
|
|
|
if [[ "$PROFILE" = *-elixir ]]; then
|
|
|
- PKG_VSN="$PKG_VSN-elixir"
|
|
|
+ SUFFIX="-elixir"
|
|
|
fi
|
|
|
- local default_tag="emqx/${PROFILE%%-elixir}:${PKG_VSN}"
|
|
|
- EMQX_IMAGE_TAG="${EMQX_IMAGE_TAG:-$default_tag}"
|
|
|
+ local DOCKER_REGISTRY="${REGISTRY:-docker.io}"
|
|
|
+ local DOCKER_ORG="${DOCKER_ORG:-emqx}"
|
|
|
+ local EMQX_BASE_DOCKER_TAG="${DOCKER_REGISTRY}/${DOCKER_ORG}/${PROFILE%%-elixir}"
|
|
|
+ local default_tag="${EMQX_BASE_DOCKER_TAG}:${PKG_VSN}${SUFFIX}"
|
|
|
+ local EMQX_IMAGE_TAG="${EMQX_IMAGE_TAG:-$default_tag}"
|
|
|
+ local EDITION=Opensource
|
|
|
+ local LICENSE='Apache-2.0'
|
|
|
+ local PRODUCT_URL='https://www.emqx.io'
|
|
|
+ local PRODUCT_DESCRIPTION='Official docker image for EMQX, the most scalable open-source MQTT broker for IoT, IIoT, and connected vehicles.'
|
|
|
+ local DOCUMENTATION_URL='https://www.emqx.io/docs/en/latest/'
|
|
|
## extra_deps is a comma separated list of debian 11 package names
|
|
|
- local extra_deps=''
|
|
|
+ local EXTRA_DEPS=''
|
|
|
if [[ "$PROFILE" = *enterprise* ]]; then
|
|
|
- extra_deps='libsasl2-2,libsasl2-modules-gssapi-mit'
|
|
|
+ EXTRA_DEPS='libsasl2-2,libsasl2-modules-gssapi-mit'
|
|
|
+ EDITION=Enterprise
|
|
|
+ LICENSE='(Apache-2.0 AND BSL-1.1)'
|
|
|
+ PRODUCT_URL='https://www.emqx.com/en/products/emqx'
|
|
|
+ PRODUCT_DESCRIPTION='Official docker image for EMQX Enterprise, an enterprise MQTT platform at scale. '
|
|
|
+ DOCUMENTATION_URL='https://docs.emqx.com/en/enterprise/latest/'
|
|
|
+ fi
|
|
|
+ # shellcheck disable=SC2155
|
|
|
+ local ISO_8601_DATE="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
|
|
|
+ # shellcheck disable=SC2155
|
|
|
+ local GIT_REVISION="$(git rev-parse HEAD)"
|
|
|
+ local DOCKER_BUILDX_ARGS=(
|
|
|
+ --build-arg BUILD_FROM="${EMQX_BUILDER}" \
|
|
|
+ --build-arg RUN_FROM="${EMQX_RUNNER}" \
|
|
|
+ --build-arg EMQX_NAME="${PROFILE}" \
|
|
|
+ --build-arg EXTRA_DEPS="${EXTRA_DEPS}" \
|
|
|
+ --build-arg PKG_VSN="${PKG_VSN}" \
|
|
|
+ --file "${EMQX_DOCKERFILE}" \
|
|
|
+ --label org.opencontainers.image.title="${PROFILE}" \
|
|
|
+ --label org.opencontainers.image.edition="${EDITION}" \
|
|
|
+ --label org.opencontainers.image.version="${PKG_VSN}" \
|
|
|
+ --label org.opencontainers.image.revision="${GIT_REVISION}" \
|
|
|
+ --label org.opencontainers.image.created="${ISO_8601_DATE}" \
|
|
|
+ --label org.opencontainers.image.source='https://github.com/emqx/emqx' \
|
|
|
+ --label org.opencontainers.image.url="${PRODUCT_URL}" \
|
|
|
+ --label org.opencontainers.image.description="${PRODUCT_DESCRIPTION}" \
|
|
|
+ --label org.opencontainers.image.documentation="${DOCUMENTATION_URL}" \
|
|
|
+ --label org.opencontainers.image.licenses="${LICENSE}" \
|
|
|
+ --label org.opencontainers.image.otp.version="${EMQX_BUILDER_OTP}" \
|
|
|
+ --tag "${EMQX_IMAGE_TAG}" \
|
|
|
+ --tag "${EMQX_BASE_DOCKER_TAG}:${VSN_MAJOR}.${VSN_MINOR}${SUFFIX}" \
|
|
|
+ --tag "${EMQX_BASE_DOCKER_TAG}:${VSN_MAJOR}.${VSN_MINOR}.${VSN_PATCH}${SUFFIX}" \
|
|
|
+ --provenance false \
|
|
|
+ --pull
|
|
|
+ )
|
|
|
+ if [ "${DOCKER_BUILD_NOCACHE:-false}" = true ]; then
|
|
|
+ DOCKER_BUILDX_ARGS+=(--no-cache)
|
|
|
+ fi
|
|
|
+ if [ "${SUFFIX}" = '-elixir' ]; then
|
|
|
+ DOCKER_BUILDX_ARGS+=(--label org.opencontainers.image.elixir.version="${EMQX_BUILDER_ELIXIR}")
|
|
|
+ fi
|
|
|
+ if [ "${DOCKER_LATEST:-false}" = true ]; then
|
|
|
+ DOCKER_BUILDX_ARGS+=(--tag "${DOCKER_REGISTRY}/${DOCKER_ORG}/${PROFILE}:latest${SUFFIX}")
|
|
|
+ fi
|
|
|
+ if [ "${DOCKER_PLATFORMS:-default}" != 'default' ]; then
|
|
|
+ DOCKER_BUILDX_ARGS+=(--platform "${DOCKER_PLATFORMS}")
|
|
|
+ fi
|
|
|
+ if [ "${DOCKER_PUSH:-false}" = true ]; then
|
|
|
+ DOCKER_BUILDX_ARGS+=(--push)
|
|
|
fi
|
|
|
# shellcheck disable=SC2015
|
|
|
[ -f ./.dockerignore ] && mv ./.dockerignore ./.dockerignore.bak || true
|
|
|
@@ -393,13 +459,7 @@ make_docker() {
|
|
|
echo '/*.lock'
|
|
|
} >> ./.dockerignore
|
|
|
set -x
|
|
|
- docker build --no-cache --pull \
|
|
|
- --build-arg BUILD_FROM="${EMQX_BUILDER}" \
|
|
|
- --build-arg RUN_FROM="${EMQX_RUNNER}" \
|
|
|
- --build-arg EMQX_NAME="${PROFILE}" \
|
|
|
- --build-arg EXTRA_DEPS="${extra_deps}" \
|
|
|
- --tag "${EMQX_IMAGE_TAG}" \
|
|
|
- -f "${EMQX_DOCKERFILE}" .
|
|
|
+ docker buildx build "${DOCKER_BUILDX_ARGS[@]}" .
|
|
|
[[ "${DEBUG:-}" -eq 1 ]] || set +x
|
|
|
echo "${EMQX_IMAGE_TAG}" > ./.docker_image_tag
|
|
|
}
|