Apache Flink 流处理-[CentOS|Rocky] 镜像

Flink Docker仓库包含了Dockerfiles用于为Flink构建docker images使用,这些 Dockerfile 由 Apache Flink 社区维护,但 Docker 社区负责在 Docker Hub 上构建和托管映像。目前市面上流行的Flink镜像都是基于Ubuntu镜像构建,由于项目需求变化,需要在容器中进行HDFS文件挂载(京东云海存储,适配了HDFS,目前驱动适配CentOS8)我们需要在CentOS8的镜像中重构Flink的官方镜像,一下示例按照Flink-1.19.0版本镜像制作过程示例如下:

CentOS8 镜像

shell 复制代码
FROM centos:centos8

# Install dependencies
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN set -ex; \
    dnf update -y; \
    dnf install -y epel-release; \
    dnf install -y gpg snappy gettext-devel jemalloc wget java-1.8.0-openjdk bind-utils; \
    yum clean all;

ENV GOSU_VERSION 1.17
ENV ARCH=arm64

RUN set -ex; \
  wget -nv -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$ARCH"; \
  wget -nv -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$ARCH.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://www.apache.org/dyn/closer.cgi?action=download&filename=flink/flink-1.19.0/flink-1.19.0-bin-scala_2.12.tgz \
    FLINK_ASC_URL=https://downloads.apache.org/flink/flink-1.19.0/flink-1.19.0-bin-scala_2.12.tgz.asc \
    GPG_KEY=028B6605F51BC296B56A5042E57D30ABEE75CA06 \
    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/flink-conf.yaml"; \
  if [ ! -e "$FLINK_HOME/conf/flink-conf.yaml" ]; then \
    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"; \
  else \
    sed -i 's/rest.address: localhost/rest.address: 0.0.0.0/g' "$CONF_FILE"; \
    sed -i 's/rest.bind-address: localhost/rest.bind-address: 0.0.0.0/g' "$CONF_FILE"; \
    sed -i 's/jobmanager.bind-host: localhost/jobmanager.bind-host: 0.0.0.0/g' "$CONF_FILE"; \
    sed -i 's/taskmanager.bind-host: localhost/taskmanager.bind-host: 0.0.0.0/g' "$CONF_FILE"; \
    sed -i '/taskmanager.host: localhost/d' "$CONF_FILE"; \
  fi;

# Configure container
COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
EXPOSE 6123 8081
CMD ["help"]

需要注意小编的电脑是Apple M1 Pro,因此在进行镜像编译的时候,需要将ARCH环境变量修改为arm64,如果是Intel芯片的x86架构,请将ARCH修改为amd64即可,修改结束后可以执行一下命令实现Flink镜像打包等工作:

shell 复制代码
jiangzhongzhou@ZBMac-C02CW08SM scala_2.12-java8-centos % docker build -t flink:1.19-scala_2.12-centos8-java8 .
[+] Building 311.6s (14/14) FINISHED                                                                                                                                                                                                                                                            docker:desktop-linux
 => [internal] load .dockerignore                                                                                                                                                                                                                                                                               0.0s
 => => transferring context: 2B                                                                                                                                                                                                                                                                                 0.0s
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                                                                            0.0s
 => => transferring dockerfile: 4.89kB                                                                                                                                                                                                                                                                          0.0s
 => [internal] load metadata for docker.io/library/centos:centos8                                                                                                                                                                                                                                              15.3s
 => [1/9] FROM docker.io/library/centos:centos8@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177                                                                                                                                                                                         0.0s
 => [internal] load build context                                                                                                                                                                                                                                                                               0.0s
 => => transferring context: 42B                                                                                                                                                                                                                                                                                0.0s
 => CACHED [2/9] RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*                                                                                                                                                                                                                              0.0s
 => CACHED [3/9] RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*                                                                                                                                                                                   0.0s
 => CACHED [4/9] RUN set -ex;     dnf install -y epel-release;     dnf update -y;     dnf install -y gpg snappy gettext-devel jemalloc wget java-1.8.0-openjdk bind-utils;     yum clean all;                                                                                                                   0.0s
 => [5/9] RUN set -ex;   wget -nv -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.17/gosu-arm64";   wget -nv -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/1.17/gosu-arm64.asc";   export GNUPGHOME="$(mktemp -d)";   for server in ha.pool.sks-key  18.9s
 => [6/9] RUN groupadd --system --gid=9999 flink &&     useradd --system --home-dir /opt/flink --uid=9999 --gid=flink flink                                                                                                                                                                                     0.2s
 => [7/9] WORKDIR /opt/flink                                                                                                                                                                                                                                                                                    0.0s
 => [8/9] RUN set -ex;   wget -nv -O flink.tgz "https://www.apache.org/dyn/closer.cgi?action=download&filename=flink/flink-1.19.0/flink-1.19.0-bin-scala_2.12.tgz";     if [ "true" = "true" ]; then     wget -nv -O flink.tgz.asc "https://downloads.apache.org/flink/flink-1.19.0/flink-1.19.0-bin-scala_2  276.1s
 => [9/9] COPY docker-entrypoint.sh /                                                                                                                                                                                                                                                                           0.0s
 => exporting to image                                                                                                                                                                                                                                                                                          0.9s
 => => exporting layers                                                                                                                                                                                                                                                                                         0.9s
 => => writing image sha256:ea57baecdc1d1fa59ac697062c4a59b3d0ed3abfc698b0f4ecfa4f6692009810                                                                                                                                                                                                                    0.0s
 => => naming to docker.io/library/flink:1.19-scala_2.12-centos8-java8                                                                                                                                                                                                                                          0.0s

What's Next?
  View a summary of image vulnerabilities and recommendations → docker scout quickview

Rocky 镜像

shell 复制代码
FROM arm64v8/rockylinux:9.3

# Install dependencies
RUN set -ex; \
    dnf update -y; \
    dnf install -y epel-release; \
    dnf install -y gpg snappy gettext-devel jemalloc wget java-1.8.0-openjdk bind-utils; \
    dnf clean all;

ENV GOSU_VERSION 1.17
ENV ARCH=arm64

RUN set -ex; \
  wget -nv -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$ARCH"; \
  wget -nv -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$ARCH.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://www.apache.org/dyn/closer.cgi?action=download&filename=flink/flink-1.19.0/flink-1.19.0-bin-scala_2.12.tgz \
    FLINK_ASC_URL=https://downloads.apache.org/flink/flink-1.19.0/flink-1.19.0-bin-scala_2.12.tgz.asc \
    GPG_KEY=028B6605F51BC296B56A5042E57D30ABEE75CA06 \
    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/flink-conf.yaml"; \
  if [ ! -e "$FLINK_HOME/conf/flink-conf.yaml" ]; then \
    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"; \
  else \
    sed -i 's/rest.address: localhost/rest.address: 0.0.0.0/g' "$CONF_FILE"; \
    sed -i 's/rest.bind-address: localhost/rest.bind-address: 0.0.0.0/g' "$CONF_FILE"; \
    sed -i 's/jobmanager.bind-host: localhost/jobmanager.bind-host: 0.0.0.0/g' "$CONF_FILE"; \
    sed -i 's/taskmanager.bind-host: localhost/taskmanager.bind-host: 0.0.0.0/g' "$CONF_FILE"; \
    sed -i '/taskmanager.host: localhost/d' "$CONF_FILE"; \
  fi;

# Configure container
COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
EXPOSE 6123 8081
CMD ["help"]

需要注意小编的电脑是Apple M1 Pro,因此在进行镜像编译的时候,需要将ARCH环境变量修改为arm64,如果是Intel芯片的x86架构,请将ARCH修改为amd64即可,修改结束后可以执行一下命令实现Flink镜像打包等工作:

shell 复制代码
jiangzhongzhou@ZBMac-C02CW08SM scala_2.12-java8-rocky % docker build -t flink:1.19-scala_2.12-rocky-java8 .
[+] Building 297.9s (12/12) FINISHED                                                                                                                                                                                                                                                            docker:desktop-linux
 => [internal] load .dockerignore                                                                                                                                                                                                                                                                               0.0s
 => => transferring context: 2B                                                                                                                                                                                                                                                                                 0.0s
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                                                                            0.0s
 => => transferring dockerfile: 4.72kB                                                                                                                                                                                                                                                                          0.0s
 => [internal] load metadata for docker.io/arm64v8/rockylinux:9.3                                                                                                                                                                                                                                               0.0s
 => [1/7] FROM docker.io/arm64v8/rockylinux:9.3                                                                                                                                                                                                                                                                 0.0s
 => [internal] load build context                                                                                                                                                                                                                                                                               0.0s
 => => transferring context: 42B                                                                                                                                                                                                                                                                                0.0s
 => CACHED [2/7] RUN set -ex;     dnf update -y;     dnf install -y epel-release;     dnf install -y gpg snappy gettext-devel jemalloc wget java-1.8.0-openjdk bind-utils;     dnf clean all;                                                                                                                   0.0s
 => [3/7] RUN set -ex;   wget -nv -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.17/gosu-arm64";   wget -nv -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/1.17/gosu-arm64.asc";   export GNUPGHOME="$(mktemp -d)";   for server in ha.pool.sks-key  16.0s
 => [4/7] RUN groupadd --system --gid=9999 flink &&     useradd --system --home-dir /opt/flink --uid=9999 --gid=flink flink                                                                                                                                                                                     0.3s 
 => [5/7] WORKDIR /opt/flink                                                                                                                                                                                                                                                                                    0.0s 
 => [6/7] RUN set -ex;   wget -nv -O flink.tgz "https://www.apache.org/dyn/closer.cgi?action=download&filename=flink/flink-1.19.0/flink-1.19.0-bin-scala_2.12.tgz";     if [ "true" = "true" ]; then     wget -nv -O flink.tgz.asc "https://downloads.apache.org/flink/flink-1.19.0/flink-1.19.0-bin-scala_2  277.3s 
 => [7/7] COPY docker-entrypoint.sh /                                                                                                                                                                                                                                                                           0.0s 
 => exporting to image                                                                                                                                                                                                                                                                                          4.1s 
 => => exporting layers                                                                                                                                                                                                                                                                                         4.1s 
 => => writing image sha256:eb38aa8f37e1a920e46efd4792d5803fed9ba95698e3d465ed365f98b67cad30                                                                                                                                                                                                                    0.0s 
 => => naming to docker.io/library/flink:1.19-scala_2.12-rocky-java8                                                                                                                                                                                                                                            0.0s 
                                                                                                                                                                                                                                                                                                                     
What's Next?
  View a summary of image vulnerabilities and recommendations → docker scout quickview
相关推荐
青春不流名13 小时前
flink任务提交example
大数据·flink
chirrupy_hamal14 小时前
VMware Workstation 保姆级 Linux(CentOS) 创建教程(附 iso)
linux·centos·虚拟机
YUELEI11814 小时前
Centos9 离线安装 MYSQL8
mysql·centos
EchoZeal1 天前
CentOS 7系统yum报错解决方案(CentOS 7官方EOL问题修复)
linux·运维·centos
半兽先生3 天前
CentOS 中安装 vim
linux·centos·vim
程序员阿灿3 天前
CentOS服务器能ping通却无法yum install:指定镜像源解决
linux·服务器·centos
Flink_China3 天前
京东物流基于Flink & StarRocks的湖仓建设实践
flink
一个小白5553 天前
Linux,redis群集模式,主从复制,读写分离
linux·运维·数据库·centos
四岁爱上了她4 天前
CentOS更换yum源
linux·运维·centos
Haoea!4 天前
Flink-01学习 介绍Flink及上手小项目之词频统计
大数据·学习·flink