生产有bug,对flink源码做出修改,build flink 源码后需要build flink docker 供生产使用。
docker images 环境准备
window 11,docker desktop,可用的科学环境,flink-docker
docker build的本质,也是启动一个容器,但是环境会略有不同,用户级配置无效。 在构建时,需要注入http_proxy等参数 build 需要下载一些uninx 文件以及 flink.tar 包,确保网络无障碍后在 build。同理,配置 http 代理端口。(科学地址宿主机ip,允许局域网内连接)。
Dockerfile 准备
从 flink-docker 的 7810aea07f6d365a7da2ebb986937a7b5e4d709f
提交创建一个新分支
使用的 docker file 为 1.13/scala_2.11-java8-debian/
git checkout -b tag-1.13 7810aea07f6d365a7da2ebb986937a7b5e4d709f
另外需要注意,window 下编译的 flink,需要修改下 shell 脚本的回车换行符
sed -i 's/\r$//g' xxx;
由于我是需要build 自己的flink code,需要修改几处 DockerFile
# 修改配置
CHECK_GPG=FALSE
# 添加flink 源
# copy flink.tgz to dirname path
COPY flink-1.13.0-bin-scala_2.11.tgz flink.tgz
# 注释掉
# wget -nv -O flink.tgz "$FLINK_TGZ_URL";
# 修改shell 格式
# set fileformat=unix
find ./bin -regex ".*sh\\|.*flink" | xargs sed -i 's/\r$//g'; \
chmod a+wx ./bin/*; \
# 修改 docker-entrypoint
# set fileformat=unix
RUN set -ex; \
sed -i 's/\r$//g' /docker-entrypoint.sh;
最终修改的Dockerfile 放在文末。
上build,科学给力的话,build 蛮快的
docker build --pull --no-cache \
--build-arg "HTTP_PROXY=http://192.168.10.xx:10809" \
--build-arg "HTTPS_PROXY=http://192.168.10.xx:10809" \
--build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
-t xxx/my-flink:1.13.0-scala_2.11-java8 .
build 完成后
贴一下 flink 1.13.0 build 命令
一堆跳过: 跳过test 执行,跳过文档编译,跳过代码格式检查,跳过 license 检查,跳过web-ui编译
mvn clean source:jar install -DskipTests -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -Drat.skip=true -T 4C -Dspotless.check.skip=true -Pskip-webui-build
完整Dockerfile
注意版本!!!
FROM openjdk:8-jre
# Install dependencies
RUN set -ex; \
apt-get update; \
# 改动
apt-get -y install libsnappy1v5 gettext-base libjemalloc-dev openssh-server vim; \
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_ASC_URL=https://www.apache.org/dist/flink/flink-1.13.0/flink-1.13.0-bin-scala_2.11.tgz.asc \
GPG_KEY=31D2DD10BFC15A2D \
CHECK_GPG=FALSE
# 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
# copy flink.tgz to dirname path
# 改动
COPY flink-1.13.0-bin-scala_2.11.tgz flink.tgz
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; \
\
# set fileformat=unix
# 改动
find ./bin -regex ".*sh\\|.*flink" | xargs sed -i 's/\r$//g'; \
chmod a+wx ./bin/*; \
chown -R flink:flink .;
# Configure container
COPY docker-entrypoint.sh /
# set fileformat=unix
# 改动
RUN set -ex; \
sed -i 's/\r$//g' /docker-entrypoint.sh;
ENTRYPOINT ["/docker-entrypoint.sh"]
EXPOSE 6123 8081
CMD ["help"]