使用docker build自制flink镜像供k8s使用

embedded/2024/10/23 6:40:00/

1、创建一个空目录专门用于自制docker镜像

mkdir -p /opt/module/flink-docker

2、将符合项目要求的本地flink拷贝到目录

cp -r /opt/module/flink-1.16.3 /opt/module/flink-dockercd /opt/module/flink-dockermv flink-1.16.3 flink

3、编写Dockerfile文件

FROM m.daocloud.io/docker.io/library/openjdk:8-jre #基于openjdk:8-jre镜像#设置环境变量
#本地准备好的flink软件目录,用于拷贝到镜像内部
ENV FLINK_DIR=flink/
#镜像中存放flink的Home目录
ENV FLINK_HOME=/opt/flink
#拷贝本地的文件到镜像指定地方
COPY gosu-amd64 /usr/local/bin/gosu
COPY gosu-amd64.asc /usr/local/bin/gosu.asc
#替换镜像中的镜像源
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list && \sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
#拷贝本地的文件到镜像指定地方
COPY gettext-base_0.21-4_amd64.deb /gettext-base_0.21-4_amd64.deb
COPY libjemalloc-dev_5.2.1-3_amd64.deb /libjemalloc-dev_5.2.1-3_amd64.deb# 在镜像内部运行下面的命令
RUN apt-get -y install dpkg; \dpkg -i /gettext-base_0.21-4_amd64.deb; \dpkg -i /libjemalloc-dev_5.2.1-3_amd64.deb; \apt-get -y install gettext-base libjemalloc-dev; \rm -rf /gettext-base_0.21-4_amd64.deb /libjemalloc-dev_5.2.1-3_amd64.deb; \rm -rf /var/lib/apt/lists/*
# 设置环境变量
ENV GOSU_VERSION 1.11
# 在镜像内部运行下面的命令
RUN 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# 设置环境变量
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
# 拷贝本地flink到镜像内部
COPY $FLINK_DIR $FLINK_HOME# 在镜像内部执行下面的命令
RUN set -ex; \chown -R flink:flink .; \chmod -R 775 .; \# Replace default REST/RPC endpoint bind address to use the container's network interface \sed -i 's/rest.address: localhost/rest.address: 0.0.0.0/g' $FLINK_HOME/conf/flink-conf.yaml; \sed -i 's/rest.bind-address: localhost/rest.bind-address: 0.0.0.0/g' $FLINK_HOME/conf/flink-conf.yaml; \sed -i 's/jobmanager.bind-host: localhost/jobmanager.bind-host: 0.0.0.0/g' $FLINK_HOME/conf/flink-conf.yaml; \sed -i 's/taskmanager.bind-host: localhost/taskmanager.bind-host: 0.0.0.0/g' $FLINK_HOME/conf/flink-conf.yaml; \sed -i '/taskmanager.host: localhost/d' $FLINK_HOME/conf/flink-conf.yaml;
# 在镜像内部执行下面的命令
RUN rm -rf $FLINK_DIR
# 拷贝文件到镜像根目录
COPY docker-entrypoint.sh /
# 在镜像内部执行下面的命令
RUN chmod +x /docker-entrypoint.sh
# 为容器指定默认执行的命令,容器启动时的默认行为
ENTRYPOINT ["/docker-entrypoint.sh"]
# 于声明容器运行时对外提供服务的端口
EXPOSE 6123 8081
# 镜像被启动后Docker容器默认执行的命令
CMD ["help"]

4、将Dockerfile中依赖的文件下载到本地

上文中用到的docker-entrypoint.sh、gettext-base_0.21-4_amd64.deb、gosu-amd64、gosu-amd64.asc和libjemalloc-dev_5.2.1-3_amd64.deb文件先下载到本地

Dockfile及docker-entrypoint.sh可以参考

flink-docker/1.18/scala_2.12-java8-ubuntu at master · apache/flink-docker · GitHub

5、构建镜像包

docker build --no-cache -t flink:1.16.3 ./

6、打标签,目的是为了推送到Harbor

docker tag flink:1.16.3 harbor的ip:harbor的端口/flink/flink:1.16.3docker push harbor的ip:harbor的端口/flink/flink:1.16.3

7、使用k8s部署

参考flink官方创建所需的yaml文件,或者下载文末百度网盘中的文件(使用的namespace为flink)

Kubernetes 设置 | Apache Flink

# 进入k8s部署文件yaml所在目录
cd /opt/session-mode
# 部署
kubectl apply -f .

flink-docker.tgz
链接:https://pan.baidu.com/s/1ItGu2Sh3nigtwvRAeGGUHQ?pwd=5qj0 
提取码:5qj0

session-mode.zip
链接:https://pan.baidu.com/s/1aKtBuV8NtoHKFCaPn1Zi5w?pwd=l9k1 
提取码:l9k1

参考:

https://www.cnblogs.com/chouc/p/17330527.html
GitHub - apache/flink-docker: Docker packaging for Apache Flink


http://www.ppmy.cn/embedded/129753.html

相关文章

整理一下实际开发和工作中Git工具的使用 (持续更新中)

介绍一下Git 在实际开发和工作中,Git工具的使用可以说是至关重要的,它不仅提高了团队协作的效率,还帮助开发者有效地管理代码版本。以下是对Git工具使用的扩展描述: 版本控制:Git能够跟踪代码的每一个修改记录&#x…

51单片机的仓库管理系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温湿度传感器人体红外传感器掉电保存模块按键、LED、蜂鸣器等模块构成。适用于仓库环境监控等相似项目。 可实现功能: 1、LCD1602实时显示商品库存、仓库温湿度和安全情况 2、人体红外传感器(按键模拟…

python 深度学习 项目调试 图像分割 detectron2

起因, 目的: 继续调试深度学习项目。 目标是,先调试10个项目。就是练练手。 项目介绍 项目来源: https://github.com/facebookresearch/detectron2项目目的: 图像处理,目标检测牛逼的地方: facebook 出品 30.3k star. 安装过程: 这个项…

Pytest参数详解 — 基于命令行模式!

1、--collect-only 查看在给定的配置下哪些测试用例会被执行 2、-k 使用表达式来指定希望运行的测试用例。如果测试名是唯一的或者多个测试名的前缀或者后缀相同,可以使用表达式来快速定位,例如: 命令行-k参数.png 3、-m 标记(…

深度学习系列——RNN/LSTM/GRU,seq2seq/attention机制

1、RNN/LSTM/GRU可参考: https://zhuanlan.zhihu.com/p/636756912 (1)对于这里面RNN的表示中,使用了输入x和h的拼接描述,其他公式中也是如此 (2)各符号图含义如下 2、关于RNN细节,…

【C++篇】栈的层叠与队列的流动:在 STL 的节奏中聆听算法的静谧旋律

文章目录 C 栈与队列详解:基础与进阶应用前言第一章:栈的介绍与使用1.1 栈的介绍1.2 栈的使用1.2.1 最小栈1.2.2 示例与输出 1.3 栈的模拟实现 第二章:队列的介绍与使用2.1 队列的介绍2.2 队列的使用2.2.1 示例与输出 2.3 队列的模拟实现2.3.…

【Python】爬虫

Python爬虫是一种自动化下载网页内容的程序。以下是一个简单的Python爬虫示例,使用requests库获取网页,并用BeautifulSoup解析网页。 首先,你需要安装必要的库: pip install requests pip install beautifulsoup4 以下是一个简…

探究Redis

为什么要用Redis Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 Redis是一种常见的缓存技术,通常用来改善网站性能。 常用的缓存技术有Redis、Memcache,能力对比如…