第一步你需要有镜像包,这个2023年的时候docker就不能用pull拉取镜像了,需要你自己找
第二步我用的是FinalShell,用别的可视化界面也用,
在你自己平时放镜像包的地方创建一个叫rocketmq的文件夹,放入镜像包后,创建一个叫Dockerfile的文件,进入文件把下面的代码写入
cd /opt/rocketmq
touch Dockerfile
vim Dockerfile
# 使用本地的 openjdk 8 镜像作为基础镜像
FROM openjdk:8
# 设置工作目录
WORKDIR /opt/rocketmq
# 复制 RocketMQ 的压缩包到容器内的工作目录
COPY rocketmq-all-4.9.3-bin-release.zip .
# 解压 RocketMQ 压缩包
RUN apt-get update && \
apt-get install -y unzip && \
unzip rocketmq-all-4.9.3-bin-release.zip && \
rm rocketmq-all-4.9.3-bin-release.zip && \
apt-get purge -y unzip && \
apt-get autoremove -y && \
rm -rf /var/lib/apt/lists/*
# 设置环境变量
ENV ROCKETMQ_HOME=/opt/rocketmq/rocketmq-all-4.9.3-bin-release
ENV PATH=$PATH:$ROCKETMQ_HOME/bin
# 暴露 RocketMQ 的端口(根据实际需要调整)
EXPOSE 9876 10911 10909
# 启动命令(这里只是示例,你可能需要根据实际情况调整)
CMD ["sh", "-c", "cd $ROCKETMQ_HOME/bin && nohup sh mqnamesrv & nohup sh mqbroker -n localhost:9876 & tail -f /dev/null"]
然后就是打包成镜像
docker build -t rocketmq:4.9.3 .
在之后打包容器
docker run -d \
--name rmqnamesrv \
-p 9876:9876 \
-v /home/rocketmq/data/namesrv/logs:/root/logs \
-v /home/rocketmq/data/namesrv/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" \
rocketmq:4.9.3
用下面的命令就可以查看创建好的容器和镜像
docker ps//查看容器
docker images //查看镜像
红色箭头就是我们的镜像和容器
这个如果你虚拟机关了,再次重启时就会处于处于 Exited
状态,用下面的命令重启一下就行
docker rm rocketmq-console rmqbroker rmqnamesrv
docker run -d --name rmqbroker --link rmqnamesrv:namesrv -p 10911:10911 -p 10909:10909 -v /home/rocketmq/data/broker/logs:/root/logs -v /home/rocketmq/data/broker/store:/root/store -v /home/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf --privileged=true -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmq:4.9.3 sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = DefaultCluster
#broker 名称,master 和 slave 使用相同的名称,表明他们的主从关系
brokerName = broker-a
#0 表示 Master,大于 0 表示不同的 slave
brokerId = 0
#表示几点做消息删除动作,默认是凌晨 4 点
deleteWhen = 04
#在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48
#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示 Master 和 Slave
之间同步数据的机制;
brokerRole = ASYNC_MASTER
#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH 表示同步刷盘和异步刷盘;SYNC_FLUSH
消息写入磁盘后才返回成功状态,ASYNC_FLUSH 不需要;
flushDiskType = ASYNC_FLUSH
# 设置 broker 节点所在服务器的 ip 地址
brokerIP1 = 192.168.27.128