当前位置: 首页 > article >正文

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

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

mkdir -p /opt/module/flink-docker

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

cp -r /opt/module/flink-1.16.3 /opt/module/flink-docker

cd /opt/module/flink-docker

mv 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.3

docker 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.kler.cn/news/366473.html

相关文章:

  • Vue前端开发2.2 数据绑定
  • dbt-codegen: dbt自动生成模板代码
  • HBuilder X 中Vue.js基础使用->计算属性的应用(三)
  • Java Spring Boot 项目开发示例指南
  • es实现桶聚合
  • 微信小程序中关闭默认的 `navigationBar`,并使用自定义的 `nav-bar` 组件
  • 7. 配置
  • 用更多的钱买电脑而不是手机
  • 【pytest学习】pytest.main()
  • 数据库的CURD【MySql】
  • HttpContext模块 --- http上下文模块
  • 从零学习大模型(五)-----提示学习(Prompt Engineering)
  • 【C++融会贯通】多态
  • python爬虫实战案例——抓取B站视频,不同清晰度抓取,实现音视频合并,超详细!(内含完整代码)
  • 功能自动化测试工具Appium使用步骤讲解
  • 分类预测 | WOA-LightGBM基于鲸鱼算法优化轻量级梯度提升机算法数据分类预测Matlab程序
  • 安装OpenResty
  • Page Cache(页缓存)与脏页的关系
  • 安卓设备获取唯一id解决方案
  • rust:特征特征对象对象安全
  • 【JAVA毕业设计】基于Vue和SpringBoot的校园管理系统
  • Elasticsearch安装使用
  • Java线程死锁与活锁
  • Vue Router 如何配置 404 页面?
  • 解释 RESTful API,以及如何使用它构建 web 应用程序(AI)
  • 京准电钟:NTP网络校时服务器应用计算机大数据