rocketmq5.3.0 arm64 编译并打包docker镜像

打印 上一主题 下一主题

主题 680|帖子 680|积分 2040

背景

2024.7.22刚爆出来的毛病 CVE-2024-23321
要求将rocketmq升级到5.3.0

https://www.cvedetails.com/cve/CVE-2024-23321/?q=CVE-2024-23321
源码下载地点

https://rocketmq.apache.org/download/

下载底子镜像并升级

底子镜像

考虑到系统架构为arm64,但官方并没有发布对应架构的docker镜像,本次在dockerhub上拉取了一个别人打包的rocketmq:4.9.7作为本次打包的底子镜像(近来连不上dockerhub,拉不下来么的办法)
  1. # 基础镜像中提供了jdk1.8的运行环境,不再需要我们单独创建环境
  2. docker pull dyrnq/rocketmq:4.9.7
复制代码
编译源码

教程:https://rocketmq.apache.org/zh/docs/quickStart/01quickstart
编译按照官网给的编译方式在对应服务器上运行即可,本次记载怎样准备编译环境
  1. # 需要环境
  2. jdk1.8
  3. maven
复制代码
我是直接在宿主机上编译的(容器内下载很慢,不知道为啥),运行系统是银河麒麟,安装包的管理方式是yum,类似centos,但linux原理上大同小异
  1. # 安装openjdk(jdk需要去apache官网登录下载有点麻烦,openjdk一样用)
  2. yum install java-1.8.0-openjdk
  3. # 安装maven,maven主要是为了编译
  4. yum install maven
  5. # 验证安装
  6. java -version
  7. mvn -version
复制代码

  1. # 编译命令,记得将5.2.0换成你下载的5.3.0,编译时间很长(亲测吃完饭回来还没编译完,要下一堆东西)
  2. unzip rocketmq-all-5.2.0-source-release.zip
  3. cd rocketmq-all-5.2.0-source-release/
  4. mvn -Prelease-all -DskipTests -Dspotbugs.skip=true clean install -U
  5. cd distribution/target/rocketmq-5.2.0/rocketmq-5.2.0
复制代码
最后天生的distribution/target/rocketmq-5.2.0/rocketmq-5.2.0就是能在你操纵系统中运行的包
打包镜像

镜像操纵必要在容器中执行,利用之前下载的4.9.7的镜像创建一个容器
  1. docker run -it  dyrnq/rocketmq:4.9.7 /bin/bash
复制代码
容器内工作目录是/opt/rocketmq,把之前编译好的文件利用docker cp命令复制到容器内/home/下,此处有一个权限问题,我在宿主机上的用户是root,而容器内默认用户只有一个rocketmq,复制进去之后的文件权限也是root,无法操纵,但在/home/下有个rocketmq的目录权限都是rocketmq的用户和组

将编译好的rocketmq-5.3.0放到/home/rocketmq下后权限就变了,**原理未知 **
此时把容器内/opt/rocketmq/目录下文件都删除,将/home/rocketmq/rocketmq-5.3.0/下的文件复制到/opt/rocketmq中即可
  1. rm -rf /opt/rocketmq/*
  2. cp -r /home/rocketmq/rocketmq-5.3.0/* /opt/rocketmq/
复制代码
退出容器,提交
  1. docker commit 容器id rocketmq:5.3.0-arm64
复制代码
注意此时有个问题是镜像内环境变量中mq的版本还是4.9.7,我是重新写了一个Dockerfile设置了一下环境变量,重新提交了一下

到此,适用于arm64版本的rocketmq-5.3.0打包完成
利用

通过docker-compose创建
  1. version: '3'
  2. services:
  3. # rocketmq相关
  4.   namesrv:
  5.     image: rocketmq:5.3.0-arm64
  6.     container_name: rocketmq-namesrv
  7.     restart: always
  8.     mem_limit: "50g"
  9.     #volumes:
  10.       #- ./namesrv-logs:/home/rocketmq/logs/rocketmqlogs
  11.     networks:
  12.       - rocketmq
  13.     ports:
  14.       - 9876:9876
  15.     environment:
  16.       - TZ=Asia/Shanghai
  17.       - MAX_POSSIBLE_HEAP=4096m
  18.       #- JAVA_OPT_EXT=-server -Xms64m -Xmx64m -Xmn64m
  19.     command: sh mqnamesrv
  20.   broker:
  21.     image: rocketmq:5.3.0-arm64
  22.     container_name: rocketmq-broker
  23.     depends_on:
  24.       - namesrv
  25.     restart: always
  26.     mem_limit: "50g"
  27.     volumes:
  28.       - ./broker.conf:/etc/broker.conf:ro
  29.       #- ./broker-logs:/home/rocketmq/logs/rocketmqlogs
  30.     networks:
  31.       - rocketmq
  32.     ports:
  33.       - 10909:10909
  34.       - 10911:10911
  35.     environment:
  36.       - TZ=Asia/Shanghai
  37.       - NAMESRV_ADDR=namesrv:9876
  38.       - MAX_POSSIBLE_HEAP=4096m
  39.       #- JAVA_OPT_EXT=-server -Xms64m -Xmx64m -Xmn64m
  40.     command: sh mqbroker -c /etc/broker.conf
  41.   # # 提供可视化rocketmq页面,可选择部署,不需要页面可不部署
  42.   mqconsole:
  43.     image: candice0630/rocketmq-console-ng:2.0 #这儿是非apache官方编译的ng镜像,而是从dockerhub上下载的专用于arm64(aarch64)架构的镜像
  44.     container_name: rmqconsole
  45.     networks:
  46.       - rocketmq
  47.     ports:
  48.       - 19876:8080
  49.     environment:
  50.       JAVA_OPTS: -Drocketmq.config.namesrvAddr=namesrv:9876 -Drocketmq.config.isVIPChannel=false
  51.     depends_on:
  52.       - namesrv
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊雷无声

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表