From 8b5b200daa0810b2c32dbfb6ce7fae170dfd6a9c Mon Sep 17 00:00:00 2001 From: xiangzihao <460888207@qq.com> Date: Wed, 26 Jun 2024 11:41:43 +0800 Subject: [PATCH] [Improvement-3802] docker image related optimization (#3804) * docker improvement * fix datasource env --- docker/.env | 33 ------------- docker/Dockerfile | 98 ++++++++++++++++++++++++-------------- docker/docker-compose.yaml | 54 +++++++-------------- 3 files changed, 80 insertions(+), 105 deletions(-) delete mode 100644 docker/.env diff --git a/docker/.env b/docker/.env deleted file mode 100644 index 800c55d9c3..0000000000 --- a/docker/.env +++ /dev/null @@ -1,33 +0,0 @@ -# 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. -# - -TZ=Asia/Shanghai - -SPRING_PROFILES_ACTIVE=h2 #mysql, pgsql -# If use mysql or pgsql, please set the following parameters -#SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/streampark?useSSL=false&useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8 -#SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/streampark?stringtype=unspecified -#SPRING_DATASOURCE_USERNAME=root -#SPRING_DATASOURCE_PASSWORD=streampark - -FLINK=flink1.14.5 -FLINK_IMAGE=flink:1.14.5-scala_2.12 - -RUN_COMMAND='/bin/sh -c "wget -P lib https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.0.31/mysql-connector-j-8.0.31.jar && bash bin/streampark.sh start_docker "' - -JOB_MANAGER_RPC_ADDRESS=flink-jobmanager diff --git a/docker/Dockerfile b/docker/Dockerfile index 87bc45a0bd..7451712e48 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -14,40 +14,66 @@ # See the License for the specific language governing permissions and # limitations under the License. # +FROM ubuntu:22.04 -FROM alpine:3.16 as deps-stage -COPY . / -WORKDIR / -RUN tar zxvf dist/apache-streampark*-*-bin.tar.gz \ -&& mv apache-streampark*-*-bin streampark - -FROM docker:dind -WORKDIR /streampark -COPY --from=deps-stage /streampark /streampark - -ENV NODE_VERSION=16.1.0 -ENV NPM_VERSION=7.11.2 - -RUN apk add openjdk8 \ - && apk add maven \ - && apk add wget \ - && apk add vim \ - && apk add bash \ - && apk add curl - -ENV JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk -ENV MAVEN_HOME=/usr/share/java/maven-3 -ENV PATH $JAVA_HOME/bin:$PATH -ENV PATH $MAVEN_HOME/bin:$PATH - -RUN wget "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz" \ - && tar zxvf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1 \ - && rm "node-v$NODE_VERSION-linux-x64.tar.gz" \ - && ln -s /usr/local/bin/node /usr/local/bin/nodejs \ - && curl -LO https://dl.k8s.io/release/v1.23.0/bin/linux/amd64/kubectl \ - && install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl - -RUN mkdir -p ~/.kube - -EXPOSE 10000 -EXPOSE 10030 +USER root + +# Install basic tools +RUN apt update && apt install -y wget curl vim net-tools iputils-ping \ + && apt install software-properties-common -y \ + && add-apt-repository ppa:openjdk-r/ppa -y +RUN apt update && apt install -y openjdk-8-jdk +RUN JAVA_PATH=$(ls -l /usr/lib/jvm | grep java-8-openjdk | grep ^d | awk -F ' ' '{print $9}'); \ + if [ -z "${JAVA_PATH}" ];then \ + echo "JAVA_PATH not found: $JAVA_PATH"; \ + exit 2; \ + else \ + ln -s /usr/lib/jvm/$JAVA_PATH/ /usr/lib/jvm/jdk8; \ + fi +ENV JAVA_HOME=/usr/lib/jvm/jdk8 + + +# Install docker +RUN \ + # Add Docker's official GPG key: + apt update && \ + apt install -y ca-certificates curl gnupg && \ + install -m 0755 -d /etc/apt/keyrings && \ + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \ + chmod a+r /etc/apt/keyrings/docker.gpg && \ + # Add the repository to Apt sources: + echo \ + "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ + "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null && \ + apt update && \ + # Install the Docker packages. + apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + + +# Install Tini +ARG TARGETPLATFORM +ENV TINI_VERSION v0.19.0 +RUN echo "TARGETPLATFORM: $TARGETPLATFORM" +RUN \ + if [ "$TARGETPLATFORM" = "linux/amd64" ];then \ + TINI_PLATFORM=amd64; \ + wget --no-check-certificate -O /usr/sbin/tini https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-$TINI_PLATFORM; \ + elif [ "$TARGETPLATFORM" = "linux/arm64" ];then \ + TINI_PLATFORM=arm64; \ + wget --no-check-certificate -O /usr/sbin/tini https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-$TINI_PLATFORM; \ + else \ + echo "unknown TARGETPLATFORM: $TARGETPLATFORM"; \ + exit 2; \ + fi +RUN chmod +x /usr/sbin/tini + + +# Install StreamPark +COPY dist/apache-streampark*-*-bin.tar.gz / +RUN tar -zxvf apache-streampark*-*-bin.tar.gz \ + && mv apache-streampark*-*-bin streampark \ + && rm -f apache-streampark*-*-bin.tar.gz + + +ENTRYPOINT ["/usr/sbin/tini", "--", "/streampark/bin/streampark.sh", "start_docker"] diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index 78817deb25..d4ab8b156f 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -15,53 +15,35 @@ # limitations under the License. version: '3.8' + services: - streampark-console: + streampark: image: apache/streampark:2.2.0 - command: ${RUN_COMMAND} ports: - - 10000:10000 - - 10030:10030 - env_file: .env + - "10000:10000" + - "10030:10030" + environment: + - TZ=Asia/Shanghai + - DATASOURCE_DIALECT=h2 # h2, mysql, pgsql +# If use mysql or pgsql, please set the following parameters +# - DATASOURCE_URL=jdbc:mysql://localhost:3306/streampark?useSSL=false&useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8 +# - DATASOURCE_URL=jdbc:postgresql://localhost:5432/streampark?stringtype=unspecified +# - DATASOURCE_USERNAME=root +# - DATASOURCE_PASSWORD=streampark volumes: - - flink:/streampark/flink/${FLINK} - /var/run/docker.sock:/var/run/docker.sock - /etc/hosts:/etc/hosts:ro - ~/.kube:/root/.kube:ro privileged: true - restart: unless-stopped - networks: - - streampark - - flink-jobmanager: - image: ${FLINK_IMAGE} - ports: - - "8081:8081" - command: jobmanager - volumes: - - flink:/opt/flink - env_file: .env - restart: unless-stopped - privileged: true - networks: - - streampark - - flink-taskmanager: - image: ${FLINK_IMAGE} - depends_on: - - flink-jobmanager - command: taskmanager - deploy: - replicas: 1 - env_file: .env - restart: unless-stopped - privileged: true + restart: always networks: - streampark + healthcheck: + test: [ "CMD", "curl", "http://streampark:10000" ] + interval: 5s + timeout: 5s + retries: 120 networks: streampark: driver: bridge - -volumes: - flink: