This is an automated email from the ASF dual-hosted git repository.
guoweijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink-docker.git
The following commit(s) were added to refs/heads/master by this push:
new 3a8ba48 Update Dockerfiles for 2.0-preview1 release
3a8ba48 is described below
commit 3a8ba480ff327674b0a090c6ce417f0437576e92
Author: Weijie Guo <[email protected]>
AuthorDate: Tue Oct 22 16:03:01 2024 +0800
Update Dockerfiles for 2.0-preview1 release
---
2.0/scala_2.12-java11-ubuntu/Dockerfile | 96 +++++++++++
2.0/scala_2.12-java11-ubuntu/docker-entrypoint.sh | 190 ++++++++++++++++++++++
2.0/scala_2.12-java11-ubuntu/release.metadata | 2 +
2.0/scala_2.12-java17-ubuntu/Dockerfile | 96 +++++++++++
2.0/scala_2.12-java17-ubuntu/docker-entrypoint.sh | 190 ++++++++++++++++++++++
2.0/scala_2.12-java17-ubuntu/release.metadata | 2 +
2.0/scala_2.12-java8-ubuntu/Dockerfile | 96 +++++++++++
2.0/scala_2.12-java8-ubuntu/docker-entrypoint.sh | 190 ++++++++++++++++++++++
2.0/scala_2.12-java8-ubuntu/release.metadata | 2 +
9 files changed, 864 insertions(+)
diff --git a/2.0/scala_2.12-java11-ubuntu/Dockerfile
b/2.0/scala_2.12-java11-ubuntu/Dockerfile
new file mode 100644
index 0000000..ff1eab5
--- /dev/null
+++ b/2.0/scala_2.12-java11-ubuntu/Dockerfile
@@ -0,0 +1,96 @@
+###############################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###############################################################################
+
+FROM eclipse-temurin:11-jre-jammy
+
+# Install dependencies
+RUN set -ex; \
+ apt-get update; \
+ apt-get -y install gpg libsnappy1v5 gettext-base libjemalloc-dev; \
+ rm -rf /var/lib/apt/lists/*
+
+# Grab gosu for easy step-down from root
+ENV GOSU_VERSION 1.11
+RUN set -ex; \
+ wget -nv -O /usr/local/bin/gosu
"https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg
--print-architecture)"; \
+ wget -nv -O /usr/local/bin/gosu.asc
"https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg
--print-architecture).asc"; \
+ export GNUPGHOME="$(mktemp -d)"; \
+ for server in ha.pool.sks-keyservers.net $(shuf -e \
+ hkp://p80.pool.sks-keyservers.net:80 \
+ keyserver.ubuntu.com \
+ hkp://keyserver.ubuntu.com:80 \
+ pgp.mit.edu) ; do \
+ gpg --batch --keyserver "$server" --recv-keys
B42F6819007F00F88E364FD4036A9C25BF357DD4 && break || : ; \
+ done && \
+ gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
+ gpgconf --kill all; \
+ rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
+ chmod +x /usr/local/bin/gosu; \
+ gosu nobody true
+
+# Configure Flink version
+ENV
FLINK_TGZ_URL=https://dlcdn.apache.org/flink/flink-2.0-preview1/flink-2.0-preview1-bin-scala_2.12.tgz
\
+
FLINK_ASC_URL=https://downloads.apache.org/flink/flink-2.0-preview1/flink-2.0-preview1-bin-scala_2.12.tgz.asc
\
+ GPG_KEY=8D56AE6E7082699A4870750EA4E8C4C05EE6861F \
+ CHECK_GPG=true
+
+# Prepare environment
+ENV FLINK_HOME=/opt/flink
+ENV PATH=$FLINK_HOME/bin:$PATH
+RUN groupadd --system --gid=9999 flink && \
+ useradd --system --home-dir $FLINK_HOME --uid=9999 --gid=flink flink
+WORKDIR $FLINK_HOME
+
+# Install Flink
+RUN set -ex; \
+ wget -nv -O flink.tgz "$FLINK_TGZ_URL"; \
+ \
+ if [ "$CHECK_GPG" = "true" ]; then \
+ wget -nv -O flink.tgz.asc "$FLINK_ASC_URL"; \
+ export GNUPGHOME="$(mktemp -d)"; \
+ for server in ha.pool.sks-keyservers.net $(shuf -e \
+ hkp://p80.pool.sks-keyservers.net:80 \
+ keyserver.ubuntu.com \
+ hkp://keyserver.ubuntu.com:80 \
+ pgp.mit.edu) ; do \
+ gpg --batch --keyserver "$server" --recv-keys "$GPG_KEY" && break || :
; \
+ done && \
+ gpg --batch --verify flink.tgz.asc flink.tgz; \
+ gpgconf --kill all; \
+ rm -rf "$GNUPGHOME" flink.tgz.asc; \
+ fi; \
+ \
+ tar -xf flink.tgz --strip-components=1; \
+ rm flink.tgz; \
+ \
+ chown -R flink:flink .; \
+ \
+ # Replace default REST/RPC endpoint bind address to use the container's
network interface \
+ CONF_FILE="${FLINK_HOME}/conf/config.yaml"; \
+ /bin/bash "$FLINK_HOME/bin/config-parser-utils.sh" "${FLINK_HOME}/conf"
"${FLINK_HOME}/bin" "${FLINK_HOME}/lib" \
+ "-repKV" "rest.address,localhost,0.0.0.0" \
+ "-repKV" "rest.bind-address,localhost,0.0.0.0" \
+ "-repKV" "jobmanager.bind-host,localhost,0.0.0.0" \
+ "-repKV" "taskmanager.bind-host,localhost,0.0.0.0" \
+ "-rmKV" "taskmanager.host=localhost";
+
+# Configure container
+COPY docker-entrypoint.sh /
+ENTRYPOINT ["/docker-entrypoint.sh"]
+EXPOSE 6123 8081
+CMD ["help"]
diff --git a/2.0/scala_2.12-java11-ubuntu/docker-entrypoint.sh
b/2.0/scala_2.12-java11-ubuntu/docker-entrypoint.sh
new file mode 100755
index 0000000..e081109
--- /dev/null
+++ b/2.0/scala_2.12-java11-ubuntu/docker-entrypoint.sh
@@ -0,0 +1,190 @@
+#!/usr/bin/env bash
+
+###############################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###############################################################################
+
+COMMAND_STANDALONE="standalone-job"
+COMMAND_HISTORY_SERVER="history-server"
+
+# If unspecified, the hostname of the container is taken as the JobManager
address
+JOB_MANAGER_RPC_ADDRESS=${JOB_MANAGER_RPC_ADDRESS:-$(hostname -f)}
+CONF_FILE_DIR="${FLINK_HOME}/conf"
+
+drop_privs_cmd() {
+ if [ $(id -u) != 0 ]; then
+ # Don't need to drop privs if EUID != 0
+ return
+ elif [ -x /sbin/su-exec ]; then
+ # Alpine
+ echo su-exec flink
+ else
+ # Others
+ echo gosu flink
+ fi
+}
+
+copy_plugins_if_required() {
+ if [ -z "$ENABLE_BUILT_IN_PLUGINS" ]; then
+ return 0
+ fi
+
+ echo "Enabling required built-in plugins"
+ for target_plugin in $(echo "$ENABLE_BUILT_IN_PLUGINS" | tr ';' ' '); do
+ echo "Linking ${target_plugin} to plugin directory"
+ plugin_name=${target_plugin%.jar}
+
+ mkdir -p "${FLINK_HOME}/plugins/${plugin_name}"
+ if [ ! -e "${FLINK_HOME}/opt/${target_plugin}" ]; then
+ echo "Plugin ${target_plugin} does not exist. Exiting."
+ exit 1
+ else
+ ln -fs "${FLINK_HOME}/opt/${target_plugin}"
"${FLINK_HOME}/plugins/${plugin_name}"
+ echo "Successfully enabled ${target_plugin}"
+ fi
+ done
+}
+
+set_config_options() {
+ local config_parser_script="$FLINK_HOME/bin/config-parser-utils.sh"
+ local config_dir="$FLINK_HOME/conf"
+ local bin_dir="$FLINK_HOME/bin"
+ local lib_dir="$FLINK_HOME/lib"
+
+ local config_params=()
+
+ while [ $# -gt 0 ]; do
+ local key="$1"
+ local value="$2"
+
+ config_params+=("-D${key}=${value}")
+
+ shift 2
+ done
+
+ if [ "${#config_params[@]}" -gt 0 ]; then
+ "${config_parser_script}" "${config_dir}" "${bin_dir}" "${lib_dir}"
"${config_params[@]}"
+ fi
+}
+
+prepare_configuration() {
+ local config_options=()
+
+ config_options+=("jobmanager.rpc.address" "${JOB_MANAGER_RPC_ADDRESS}")
+ config_options+=("blob.server.port" "6124")
+ config_options+=("query.server.port" "6125")
+
+ if [ -n "${TASK_MANAGER_NUMBER_OF_TASK_SLOTS}" ]; then
+ config_options+=("taskmanager.numberOfTaskSlots"
"${TASK_MANAGER_NUMBER_OF_TASK_SLOTS}")
+ fi
+
+ if [ ${#config_options[@]} -ne 0 ]; then
+ set_config_options "${config_options[@]}"
+ fi
+
+ if [ -n "${FLINK_PROPERTIES}" ]; then
+ process_flink_properties "${FLINK_PROPERTIES}"
+ fi
+}
+
+process_flink_properties() {
+ local flink_properties_content=$1
+ local config_options=()
+
+ local OLD_IFS="$IFS"
+ IFS=$'\n'
+ for prop in $flink_properties_content; do
+ prop=$(echo $prop | tr -d '[:space:]')
+
+ if [ -z "$prop" ]; then
+ continue
+ fi
+
+ IFS=':' read -r key value <<< "$prop"
+
+ value=$(echo $value | envsubst)
+
+ config_options+=("$key" "$value")
+ done
+ IFS="$OLD_IFS"
+
+ if [ ${#config_options[@]} -ne 0 ]; then
+ set_config_options "${config_options[@]}"
+ fi
+}
+
+maybe_enable_jemalloc() {
+ if [ "${DISABLE_JEMALLOC:-false}" == "false" ]; then
+ JEMALLOC_PATH="/usr/lib/$(uname -m)-linux-gnu/libjemalloc.so"
+ JEMALLOC_FALLBACK="/usr/lib/x86_64-linux-gnu/libjemalloc.so"
+ if [ -f "$JEMALLOC_PATH" ]; then
+ export LD_PRELOAD=$LD_PRELOAD:$JEMALLOC_PATH
+ elif [ -f "$JEMALLOC_FALLBACK" ]; then
+ export LD_PRELOAD=$LD_PRELOAD:$JEMALLOC_FALLBACK
+ else
+ if [ "$JEMALLOC_PATH" = "$JEMALLOC_FALLBACK" ]; then
+ MSG_PATH=$JEMALLOC_PATH
+ else
+ MSG_PATH="$JEMALLOC_PATH and $JEMALLOC_FALLBACK"
+ fi
+ echo "WARNING: attempted to load jemalloc from $MSG_PATH but the
library couldn't be found. glibc will be used instead."
+ fi
+ fi
+}
+
+maybe_enable_jemalloc
+
+copy_plugins_if_required
+
+prepare_configuration
+
+args=("$@")
+if [ "$1" = "help" ]; then
+ printf "Usage: $(basename "$0")
(jobmanager|${COMMAND_STANDALONE}|taskmanager|${COMMAND_HISTORY_SERVER})\n"
+ printf " Or $(basename "$0") help\n\n"
+ printf "By default, Flink image adopts jemalloc as default memory
allocator. This behavior can be disabled by setting the 'DISABLE_JEMALLOC'
environment variable to 'true'.\n"
+ exit 0
+elif [ "$1" = "jobmanager" ]; then
+ args=("${args[@]:1}")
+
+ echo "Starting Job Manager"
+
+ exec $(drop_privs_cmd) "$FLINK_HOME/bin/jobmanager.sh" start-foreground
"${args[@]}"
+elif [ "$1" = ${COMMAND_STANDALONE} ]; then
+ args=("${args[@]:1}")
+
+ echo "Starting Job Manager"
+
+ exec $(drop_privs_cmd) "$FLINK_HOME/bin/standalone-job.sh"
start-foreground "${args[@]}"
+elif [ "$1" = ${COMMAND_HISTORY_SERVER} ]; then
+ args=("${args[@]:1}")
+
+ echo "Starting History Server"
+
+ exec $(drop_privs_cmd) "$FLINK_HOME/bin/historyserver.sh" start-foreground
"${args[@]}"
+elif [ "$1" = "taskmanager" ]; then
+ args=("${args[@]:1}")
+
+ echo "Starting Task Manager"
+
+ exec $(drop_privs_cmd) "$FLINK_HOME/bin/taskmanager.sh" start-foreground
"${args[@]}"
+fi
+
+args=("${args[@]}")
+
+# Running command in pass-through mode
+exec $(drop_privs_cmd) "${args[@]}"
diff --git a/2.0/scala_2.12-java11-ubuntu/release.metadata
b/2.0/scala_2.12-java11-ubuntu/release.metadata
new file mode 100644
index 0000000..38200f4
--- /dev/null
+++ b/2.0/scala_2.12-java11-ubuntu/release.metadata
@@ -0,0 +1,2 @@
+Tags: 2.0-preview1-scala_2.12-java11, 2.0-scala_2.12-java11,
scala_2.12-java11, 2.0-preview1-scala_2.12, 2.0-scala_2.12, scala_2.12,
2.0-preview1-java11, 2.0-java11, java11, 2.0-preview1, 2.0, latest
+Architectures: amd64,arm64v8
diff --git a/2.0/scala_2.12-java17-ubuntu/Dockerfile
b/2.0/scala_2.12-java17-ubuntu/Dockerfile
new file mode 100644
index 0000000..35cd97f
--- /dev/null
+++ b/2.0/scala_2.12-java17-ubuntu/Dockerfile
@@ -0,0 +1,96 @@
+###############################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###############################################################################
+
+FROM eclipse-temurin:17-jre-jammy
+
+# Install dependencies
+RUN set -ex; \
+ apt-get update; \
+ apt-get -y install gpg libsnappy1v5 gettext-base libjemalloc-dev; \
+ rm -rf /var/lib/apt/lists/*
+
+# Grab gosu for easy step-down from root
+ENV GOSU_VERSION 1.11
+RUN set -ex; \
+ wget -nv -O /usr/local/bin/gosu
"https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg
--print-architecture)"; \
+ wget -nv -O /usr/local/bin/gosu.asc
"https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg
--print-architecture).asc"; \
+ export GNUPGHOME="$(mktemp -d)"; \
+ for server in ha.pool.sks-keyservers.net $(shuf -e \
+ hkp://p80.pool.sks-keyservers.net:80 \
+ keyserver.ubuntu.com \
+ hkp://keyserver.ubuntu.com:80 \
+ pgp.mit.edu) ; do \
+ gpg --batch --keyserver "$server" --recv-keys
B42F6819007F00F88E364FD4036A9C25BF357DD4 && break || : ; \
+ done && \
+ gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
+ gpgconf --kill all; \
+ rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
+ chmod +x /usr/local/bin/gosu; \
+ gosu nobody true
+
+# Configure Flink version
+ENV
FLINK_TGZ_URL=https://dlcdn.apache.org/flink/flink-2.0-preview1/flink-2.0-preview1-bin-scala_2.12.tgz
\
+
FLINK_ASC_URL=https://downloads.apache.org/flink/flink-2.0-preview1/flink-2.0-preview1-bin-scala_2.12.tgz.asc
\
+ GPG_KEY=8D56AE6E7082699A4870750EA4E8C4C05EE6861F \
+ CHECK_GPG=true
+
+# Prepare environment
+ENV FLINK_HOME=/opt/flink
+ENV PATH=$FLINK_HOME/bin:$PATH
+RUN groupadd --system --gid=9999 flink && \
+ useradd --system --home-dir $FLINK_HOME --uid=9999 --gid=flink flink
+WORKDIR $FLINK_HOME
+
+# Install Flink
+RUN set -ex; \
+ wget -nv -O flink.tgz "$FLINK_TGZ_URL"; \
+ \
+ if [ "$CHECK_GPG" = "true" ]; then \
+ wget -nv -O flink.tgz.asc "$FLINK_ASC_URL"; \
+ export GNUPGHOME="$(mktemp -d)"; \
+ for server in ha.pool.sks-keyservers.net $(shuf -e \
+ hkp://p80.pool.sks-keyservers.net:80 \
+ keyserver.ubuntu.com \
+ hkp://keyserver.ubuntu.com:80 \
+ pgp.mit.edu) ; do \
+ gpg --batch --keyserver "$server" --recv-keys "$GPG_KEY" && break || :
; \
+ done && \
+ gpg --batch --verify flink.tgz.asc flink.tgz; \
+ gpgconf --kill all; \
+ rm -rf "$GNUPGHOME" flink.tgz.asc; \
+ fi; \
+ \
+ tar -xf flink.tgz --strip-components=1; \
+ rm flink.tgz; \
+ \
+ chown -R flink:flink .; \
+ \
+ # Replace default REST/RPC endpoint bind address to use the container's
network interface \
+ CONF_FILE="${FLINK_HOME}/conf/config.yaml"; \
+ /bin/bash "$FLINK_HOME/bin/config-parser-utils.sh" "${FLINK_HOME}/conf"
"${FLINK_HOME}/bin" "${FLINK_HOME}/lib" \
+ "-repKV" "rest.address,localhost,0.0.0.0" \
+ "-repKV" "rest.bind-address,localhost,0.0.0.0" \
+ "-repKV" "jobmanager.bind-host,localhost,0.0.0.0" \
+ "-repKV" "taskmanager.bind-host,localhost,0.0.0.0" \
+ "-rmKV" "taskmanager.host=localhost";
+
+# Configure container
+COPY docker-entrypoint.sh /
+ENTRYPOINT ["/docker-entrypoint.sh"]
+EXPOSE 6123 8081
+CMD ["help"]
diff --git a/2.0/scala_2.12-java17-ubuntu/docker-entrypoint.sh
b/2.0/scala_2.12-java17-ubuntu/docker-entrypoint.sh
new file mode 100755
index 0000000..e081109
--- /dev/null
+++ b/2.0/scala_2.12-java17-ubuntu/docker-entrypoint.sh
@@ -0,0 +1,190 @@
+#!/usr/bin/env bash
+
+###############################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###############################################################################
+
+COMMAND_STANDALONE="standalone-job"
+COMMAND_HISTORY_SERVER="history-server"
+
+# If unspecified, the hostname of the container is taken as the JobManager
address
+JOB_MANAGER_RPC_ADDRESS=${JOB_MANAGER_RPC_ADDRESS:-$(hostname -f)}
+CONF_FILE_DIR="${FLINK_HOME}/conf"
+
+drop_privs_cmd() {
+ if [ $(id -u) != 0 ]; then
+ # Don't need to drop privs if EUID != 0
+ return
+ elif [ -x /sbin/su-exec ]; then
+ # Alpine
+ echo su-exec flink
+ else
+ # Others
+ echo gosu flink
+ fi
+}
+
+copy_plugins_if_required() {
+ if [ -z "$ENABLE_BUILT_IN_PLUGINS" ]; then
+ return 0
+ fi
+
+ echo "Enabling required built-in plugins"
+ for target_plugin in $(echo "$ENABLE_BUILT_IN_PLUGINS" | tr ';' ' '); do
+ echo "Linking ${target_plugin} to plugin directory"
+ plugin_name=${target_plugin%.jar}
+
+ mkdir -p "${FLINK_HOME}/plugins/${plugin_name}"
+ if [ ! -e "${FLINK_HOME}/opt/${target_plugin}" ]; then
+ echo "Plugin ${target_plugin} does not exist. Exiting."
+ exit 1
+ else
+ ln -fs "${FLINK_HOME}/opt/${target_plugin}"
"${FLINK_HOME}/plugins/${plugin_name}"
+ echo "Successfully enabled ${target_plugin}"
+ fi
+ done
+}
+
+set_config_options() {
+ local config_parser_script="$FLINK_HOME/bin/config-parser-utils.sh"
+ local config_dir="$FLINK_HOME/conf"
+ local bin_dir="$FLINK_HOME/bin"
+ local lib_dir="$FLINK_HOME/lib"
+
+ local config_params=()
+
+ while [ $# -gt 0 ]; do
+ local key="$1"
+ local value="$2"
+
+ config_params+=("-D${key}=${value}")
+
+ shift 2
+ done
+
+ if [ "${#config_params[@]}" -gt 0 ]; then
+ "${config_parser_script}" "${config_dir}" "${bin_dir}" "${lib_dir}"
"${config_params[@]}"
+ fi
+}
+
+prepare_configuration() {
+ local config_options=()
+
+ config_options+=("jobmanager.rpc.address" "${JOB_MANAGER_RPC_ADDRESS}")
+ config_options+=("blob.server.port" "6124")
+ config_options+=("query.server.port" "6125")
+
+ if [ -n "${TASK_MANAGER_NUMBER_OF_TASK_SLOTS}" ]; then
+ config_options+=("taskmanager.numberOfTaskSlots"
"${TASK_MANAGER_NUMBER_OF_TASK_SLOTS}")
+ fi
+
+ if [ ${#config_options[@]} -ne 0 ]; then
+ set_config_options "${config_options[@]}"
+ fi
+
+ if [ -n "${FLINK_PROPERTIES}" ]; then
+ process_flink_properties "${FLINK_PROPERTIES}"
+ fi
+}
+
+process_flink_properties() {
+ local flink_properties_content=$1
+ local config_options=()
+
+ local OLD_IFS="$IFS"
+ IFS=$'\n'
+ for prop in $flink_properties_content; do
+ prop=$(echo $prop | tr -d '[:space:]')
+
+ if [ -z "$prop" ]; then
+ continue
+ fi
+
+ IFS=':' read -r key value <<< "$prop"
+
+ value=$(echo $value | envsubst)
+
+ config_options+=("$key" "$value")
+ done
+ IFS="$OLD_IFS"
+
+ if [ ${#config_options[@]} -ne 0 ]; then
+ set_config_options "${config_options[@]}"
+ fi
+}
+
+maybe_enable_jemalloc() {
+ if [ "${DISABLE_JEMALLOC:-false}" == "false" ]; then
+ JEMALLOC_PATH="/usr/lib/$(uname -m)-linux-gnu/libjemalloc.so"
+ JEMALLOC_FALLBACK="/usr/lib/x86_64-linux-gnu/libjemalloc.so"
+ if [ -f "$JEMALLOC_PATH" ]; then
+ export LD_PRELOAD=$LD_PRELOAD:$JEMALLOC_PATH
+ elif [ -f "$JEMALLOC_FALLBACK" ]; then
+ export LD_PRELOAD=$LD_PRELOAD:$JEMALLOC_FALLBACK
+ else
+ if [ "$JEMALLOC_PATH" = "$JEMALLOC_FALLBACK" ]; then
+ MSG_PATH=$JEMALLOC_PATH
+ else
+ MSG_PATH="$JEMALLOC_PATH and $JEMALLOC_FALLBACK"
+ fi
+ echo "WARNING: attempted to load jemalloc from $MSG_PATH but the
library couldn't be found. glibc will be used instead."
+ fi
+ fi
+}
+
+maybe_enable_jemalloc
+
+copy_plugins_if_required
+
+prepare_configuration
+
+args=("$@")
+if [ "$1" = "help" ]; then
+ printf "Usage: $(basename "$0")
(jobmanager|${COMMAND_STANDALONE}|taskmanager|${COMMAND_HISTORY_SERVER})\n"
+ printf " Or $(basename "$0") help\n\n"
+ printf "By default, Flink image adopts jemalloc as default memory
allocator. This behavior can be disabled by setting the 'DISABLE_JEMALLOC'
environment variable to 'true'.\n"
+ exit 0
+elif [ "$1" = "jobmanager" ]; then
+ args=("${args[@]:1}")
+
+ echo "Starting Job Manager"
+
+ exec $(drop_privs_cmd) "$FLINK_HOME/bin/jobmanager.sh" start-foreground
"${args[@]}"
+elif [ "$1" = ${COMMAND_STANDALONE} ]; then
+ args=("${args[@]:1}")
+
+ echo "Starting Job Manager"
+
+ exec $(drop_privs_cmd) "$FLINK_HOME/bin/standalone-job.sh"
start-foreground "${args[@]}"
+elif [ "$1" = ${COMMAND_HISTORY_SERVER} ]; then
+ args=("${args[@]:1}")
+
+ echo "Starting History Server"
+
+ exec $(drop_privs_cmd) "$FLINK_HOME/bin/historyserver.sh" start-foreground
"${args[@]}"
+elif [ "$1" = "taskmanager" ]; then
+ args=("${args[@]:1}")
+
+ echo "Starting Task Manager"
+
+ exec $(drop_privs_cmd) "$FLINK_HOME/bin/taskmanager.sh" start-foreground
"${args[@]}"
+fi
+
+args=("${args[@]}")
+
+# Running command in pass-through mode
+exec $(drop_privs_cmd) "${args[@]}"
diff --git a/2.0/scala_2.12-java17-ubuntu/release.metadata
b/2.0/scala_2.12-java17-ubuntu/release.metadata
new file mode 100644
index 0000000..29a62b0
--- /dev/null
+++ b/2.0/scala_2.12-java17-ubuntu/release.metadata
@@ -0,0 +1,2 @@
+Tags: 2.0-preview1-scala_2.12-java17, 2.0-scala_2.12-java17,
scala_2.12-java17, 2.0-preview1-java17, 2.0-java17, java17
+Architectures: amd64,arm64v8
diff --git a/2.0/scala_2.12-java8-ubuntu/Dockerfile
b/2.0/scala_2.12-java8-ubuntu/Dockerfile
new file mode 100644
index 0000000..f934ff7
--- /dev/null
+++ b/2.0/scala_2.12-java8-ubuntu/Dockerfile
@@ -0,0 +1,96 @@
+###############################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###############################################################################
+
+FROM eclipse-temurin:8-jre-jammy
+
+# Install dependencies
+RUN set -ex; \
+ apt-get update; \
+ apt-get -y install gpg libsnappy1v5 gettext-base libjemalloc-dev; \
+ rm -rf /var/lib/apt/lists/*
+
+# Grab gosu for easy step-down from root
+ENV GOSU_VERSION 1.11
+RUN set -ex; \
+ wget -nv -O /usr/local/bin/gosu
"https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg
--print-architecture)"; \
+ wget -nv -O /usr/local/bin/gosu.asc
"https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg
--print-architecture).asc"; \
+ export GNUPGHOME="$(mktemp -d)"; \
+ for server in ha.pool.sks-keyservers.net $(shuf -e \
+ hkp://p80.pool.sks-keyservers.net:80 \
+ keyserver.ubuntu.com \
+ hkp://keyserver.ubuntu.com:80 \
+ pgp.mit.edu) ; do \
+ gpg --batch --keyserver "$server" --recv-keys
B42F6819007F00F88E364FD4036A9C25BF357DD4 && break || : ; \
+ done && \
+ gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
+ gpgconf --kill all; \
+ rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
+ chmod +x /usr/local/bin/gosu; \
+ gosu nobody true
+
+# Configure Flink version
+ENV
FLINK_TGZ_URL=https://dlcdn.apache.org/flink/flink-2.0-preview1/flink-2.0-preview1-bin-scala_2.12.tgz
\
+
FLINK_ASC_URL=https://downloads.apache.org/flink/flink-2.0-preview1/flink-2.0-preview1-bin-scala_2.12.tgz.asc
\
+ GPG_KEY=8D56AE6E7082699A4870750EA4E8C4C05EE6861F \
+ CHECK_GPG=true
+
+# Prepare environment
+ENV FLINK_HOME=/opt/flink
+ENV PATH=$FLINK_HOME/bin:$PATH
+RUN groupadd --system --gid=9999 flink && \
+ useradd --system --home-dir $FLINK_HOME --uid=9999 --gid=flink flink
+WORKDIR $FLINK_HOME
+
+# Install Flink
+RUN set -ex; \
+ wget -nv -O flink.tgz "$FLINK_TGZ_URL"; \
+ \
+ if [ "$CHECK_GPG" = "true" ]; then \
+ wget -nv -O flink.tgz.asc "$FLINK_ASC_URL"; \
+ export GNUPGHOME="$(mktemp -d)"; \
+ for server in ha.pool.sks-keyservers.net $(shuf -e \
+ hkp://p80.pool.sks-keyservers.net:80 \
+ keyserver.ubuntu.com \
+ hkp://keyserver.ubuntu.com:80 \
+ pgp.mit.edu) ; do \
+ gpg --batch --keyserver "$server" --recv-keys "$GPG_KEY" && break || :
; \
+ done && \
+ gpg --batch --verify flink.tgz.asc flink.tgz; \
+ gpgconf --kill all; \
+ rm -rf "$GNUPGHOME" flink.tgz.asc; \
+ fi; \
+ \
+ tar -xf flink.tgz --strip-components=1; \
+ rm flink.tgz; \
+ \
+ chown -R flink:flink .; \
+ \
+ # Replace default REST/RPC endpoint bind address to use the container's
network interface \
+ CONF_FILE="${FLINK_HOME}/conf/config.yaml"; \
+ /bin/bash "$FLINK_HOME/bin/config-parser-utils.sh" "${FLINK_HOME}/conf"
"${FLINK_HOME}/bin" "${FLINK_HOME}/lib" \
+ "-repKV" "rest.address,localhost,0.0.0.0" \
+ "-repKV" "rest.bind-address,localhost,0.0.0.0" \
+ "-repKV" "jobmanager.bind-host,localhost,0.0.0.0" \
+ "-repKV" "taskmanager.bind-host,localhost,0.0.0.0" \
+ "-rmKV" "taskmanager.host=localhost";
+
+# Configure container
+COPY docker-entrypoint.sh /
+ENTRYPOINT ["/docker-entrypoint.sh"]
+EXPOSE 6123 8081
+CMD ["help"]
diff --git a/2.0/scala_2.12-java8-ubuntu/docker-entrypoint.sh
b/2.0/scala_2.12-java8-ubuntu/docker-entrypoint.sh
new file mode 100755
index 0000000..e081109
--- /dev/null
+++ b/2.0/scala_2.12-java8-ubuntu/docker-entrypoint.sh
@@ -0,0 +1,190 @@
+#!/usr/bin/env bash
+
+###############################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###############################################################################
+
+COMMAND_STANDALONE="standalone-job"
+COMMAND_HISTORY_SERVER="history-server"
+
+# If unspecified, the hostname of the container is taken as the JobManager
address
+JOB_MANAGER_RPC_ADDRESS=${JOB_MANAGER_RPC_ADDRESS:-$(hostname -f)}
+CONF_FILE_DIR="${FLINK_HOME}/conf"
+
+drop_privs_cmd() {
+ if [ $(id -u) != 0 ]; then
+ # Don't need to drop privs if EUID != 0
+ return
+ elif [ -x /sbin/su-exec ]; then
+ # Alpine
+ echo su-exec flink
+ else
+ # Others
+ echo gosu flink
+ fi
+}
+
+copy_plugins_if_required() {
+ if [ -z "$ENABLE_BUILT_IN_PLUGINS" ]; then
+ return 0
+ fi
+
+ echo "Enabling required built-in plugins"
+ for target_plugin in $(echo "$ENABLE_BUILT_IN_PLUGINS" | tr ';' ' '); do
+ echo "Linking ${target_plugin} to plugin directory"
+ plugin_name=${target_plugin%.jar}
+
+ mkdir -p "${FLINK_HOME}/plugins/${plugin_name}"
+ if [ ! -e "${FLINK_HOME}/opt/${target_plugin}" ]; then
+ echo "Plugin ${target_plugin} does not exist. Exiting."
+ exit 1
+ else
+ ln -fs "${FLINK_HOME}/opt/${target_plugin}"
"${FLINK_HOME}/plugins/${plugin_name}"
+ echo "Successfully enabled ${target_plugin}"
+ fi
+ done
+}
+
+set_config_options() {
+ local config_parser_script="$FLINK_HOME/bin/config-parser-utils.sh"
+ local config_dir="$FLINK_HOME/conf"
+ local bin_dir="$FLINK_HOME/bin"
+ local lib_dir="$FLINK_HOME/lib"
+
+ local config_params=()
+
+ while [ $# -gt 0 ]; do
+ local key="$1"
+ local value="$2"
+
+ config_params+=("-D${key}=${value}")
+
+ shift 2
+ done
+
+ if [ "${#config_params[@]}" -gt 0 ]; then
+ "${config_parser_script}" "${config_dir}" "${bin_dir}" "${lib_dir}"
"${config_params[@]}"
+ fi
+}
+
+prepare_configuration() {
+ local config_options=()
+
+ config_options+=("jobmanager.rpc.address" "${JOB_MANAGER_RPC_ADDRESS}")
+ config_options+=("blob.server.port" "6124")
+ config_options+=("query.server.port" "6125")
+
+ if [ -n "${TASK_MANAGER_NUMBER_OF_TASK_SLOTS}" ]; then
+ config_options+=("taskmanager.numberOfTaskSlots"
"${TASK_MANAGER_NUMBER_OF_TASK_SLOTS}")
+ fi
+
+ if [ ${#config_options[@]} -ne 0 ]; then
+ set_config_options "${config_options[@]}"
+ fi
+
+ if [ -n "${FLINK_PROPERTIES}" ]; then
+ process_flink_properties "${FLINK_PROPERTIES}"
+ fi
+}
+
+process_flink_properties() {
+ local flink_properties_content=$1
+ local config_options=()
+
+ local OLD_IFS="$IFS"
+ IFS=$'\n'
+ for prop in $flink_properties_content; do
+ prop=$(echo $prop | tr -d '[:space:]')
+
+ if [ -z "$prop" ]; then
+ continue
+ fi
+
+ IFS=':' read -r key value <<< "$prop"
+
+ value=$(echo $value | envsubst)
+
+ config_options+=("$key" "$value")
+ done
+ IFS="$OLD_IFS"
+
+ if [ ${#config_options[@]} -ne 0 ]; then
+ set_config_options "${config_options[@]}"
+ fi
+}
+
+maybe_enable_jemalloc() {
+ if [ "${DISABLE_JEMALLOC:-false}" == "false" ]; then
+ JEMALLOC_PATH="/usr/lib/$(uname -m)-linux-gnu/libjemalloc.so"
+ JEMALLOC_FALLBACK="/usr/lib/x86_64-linux-gnu/libjemalloc.so"
+ if [ -f "$JEMALLOC_PATH" ]; then
+ export LD_PRELOAD=$LD_PRELOAD:$JEMALLOC_PATH
+ elif [ -f "$JEMALLOC_FALLBACK" ]; then
+ export LD_PRELOAD=$LD_PRELOAD:$JEMALLOC_FALLBACK
+ else
+ if [ "$JEMALLOC_PATH" = "$JEMALLOC_FALLBACK" ]; then
+ MSG_PATH=$JEMALLOC_PATH
+ else
+ MSG_PATH="$JEMALLOC_PATH and $JEMALLOC_FALLBACK"
+ fi
+ echo "WARNING: attempted to load jemalloc from $MSG_PATH but the
library couldn't be found. glibc will be used instead."
+ fi
+ fi
+}
+
+maybe_enable_jemalloc
+
+copy_plugins_if_required
+
+prepare_configuration
+
+args=("$@")
+if [ "$1" = "help" ]; then
+ printf "Usage: $(basename "$0")
(jobmanager|${COMMAND_STANDALONE}|taskmanager|${COMMAND_HISTORY_SERVER})\n"
+ printf " Or $(basename "$0") help\n\n"
+ printf "By default, Flink image adopts jemalloc as default memory
allocator. This behavior can be disabled by setting the 'DISABLE_JEMALLOC'
environment variable to 'true'.\n"
+ exit 0
+elif [ "$1" = "jobmanager" ]; then
+ args=("${args[@]:1}")
+
+ echo "Starting Job Manager"
+
+ exec $(drop_privs_cmd) "$FLINK_HOME/bin/jobmanager.sh" start-foreground
"${args[@]}"
+elif [ "$1" = ${COMMAND_STANDALONE} ]; then
+ args=("${args[@]:1}")
+
+ echo "Starting Job Manager"
+
+ exec $(drop_privs_cmd) "$FLINK_HOME/bin/standalone-job.sh"
start-foreground "${args[@]}"
+elif [ "$1" = ${COMMAND_HISTORY_SERVER} ]; then
+ args=("${args[@]:1}")
+
+ echo "Starting History Server"
+
+ exec $(drop_privs_cmd) "$FLINK_HOME/bin/historyserver.sh" start-foreground
"${args[@]}"
+elif [ "$1" = "taskmanager" ]; then
+ args=("${args[@]:1}")
+
+ echo "Starting Task Manager"
+
+ exec $(drop_privs_cmd) "$FLINK_HOME/bin/taskmanager.sh" start-foreground
"${args[@]}"
+fi
+
+args=("${args[@]}")
+
+# Running command in pass-through mode
+exec $(drop_privs_cmd) "${args[@]}"
diff --git a/2.0/scala_2.12-java8-ubuntu/release.metadata
b/2.0/scala_2.12-java8-ubuntu/release.metadata
new file mode 100644
index 0000000..477a7aa
--- /dev/null
+++ b/2.0/scala_2.12-java8-ubuntu/release.metadata
@@ -0,0 +1,2 @@
+Tags: 2.0-preview1-scala_2.12-java8, 2.0-scala_2.12-java8, scala_2.12-java8,
2.0-preview1-java8, 2.0-java8, java8
+Architectures: amd64,arm64v8