Docker下如何构建包含延迟插件的RabbitMQ镜像

👨🏻‍💻 热爱摄影的程序员

👨🏻‍🎨 喜欢编码的设计师

🧕🏻 擅长设计的剪辑师

🧑🏻‍🏫 一位高冷无情的编码爱好者

大家好,我是 DevOps 工程师

欢迎分享 / 收藏 / 赞 / 在看!

【需求】通常情况下,RabbitMQ 的镜像是不带有延迟插件 rabbitmq_delayed_message_exchange 的,需要开发者在创建容器后进入到容器,手动安装插件,这样显得非常繁琐,因此笔者将该插件整合至基础镜像 rabbitmq:3.12-management 中,顺带复习一下如何提交镜像,并发布到 Docker Hub。

题外话:构建包含延迟插件的 RabbitMQ 镜像专业情况下是使用 Dockerfile 的形式构建,本文更多地是阐述如何提交个性化的镜像。使用如下脚本构建前,需下载好对应插件,并指定正确的路径。

复制代码
FROM rabbitmq:3.10.6-management
MAINTAINER hayden
ADD ./rabbitmq_delayed_message_exchange-3.12.0.ez /plugins
RUN rabbitmq-plugins enable rabbitmq_delayed_message_exchange
ENTRYPOINT ["rabbitmq-server"]

内容基于:编程洪同学 - Docker 教程

【解决】

首先,创建临时容器 rabbitmq-tmp

复制代码
docker run -d \
--name rabbitmq-tmp \
-p 5672:5672 -p 15672:15672 \
rabbitmq:3.12-management

GitHub - rabbitmq-delayed-message-exchange - releases 中下载延迟插件 rabbitmq_delayed_message_exchange-3.12.0.ez ,并保存到本地。

注意:笔者使用的基础镜像是 rabbitmq:3.12-management,则需要下载 3.12.x 版本的插件。

将插件导入到容器:

复制代码
docker cp <本地插件路径> rabbitmq-tmp:/opt/rabbitmq/plugins

进入临时容器,查看插件是否导入成功:

复制代码
# 进入容器
docker exec -it rabbitmq-tmp bash

# 查看插件是否导入成功
cd /opt/rabbitmq/plugins
ls

安装并开启插件:

复制代码
rabbitmq-plugins enable rabbitmq_shovel rabbitmq_shovel_management

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

退出临时容器,重新启动临时容器,登录控制台,发现可以交换机一栏选择 x-delayed-message 选项:

复制代码
exit
docker restart rabbitmq-tmp


提交镜像:

复制代码
docker commit -m "commit rabbitmq container with delayed plugins" -a "hongyoudan" rabbitmq-tmp rabbitmq-management-delayed:3.12

登录 Docker Hub 账号:

复制代码
docker login

添加新标签并推送镜像:

复制代码
docker tag rabbitmq-management-delayed:3.12 hongyoudan/rabbitmq-management-delayed:3.12

docker push hongyoudan/rabbitmq-management-delayed:3.12

在 Docker Hub 仓库中可以看到刚刚推送的镜像:

至此,所有工作结束,可以删除临时容器以及其他一切文件,也可以再跑一次测试一下是否安装成功,笔者这边就不提供步骤了。

相关推荐
Liudef061 小时前
Docker企业级应用:从入门到生产环境最佳实践
docker·容器·eureka
?ccc?2 小时前
容器技术技术入门与 Docker 环境部署
运维·docker·容器
时时刻刻看着自己的心2 小时前
docker启动报错
运维·docker·容器
容器魔方3 小时前
开源之夏2025 | Karmada 社区中选学生名单公布!
云原生·容器·云计算
匆匆那年9673 小时前
Docker容器中安装MongoDB,导入数据
运维·docker·容器
紫璨月4 小时前
rabbitMQ读取不到ThreadLocal消息的bug
rabbitmq·bug·java-rabbitmq
i小溪4 小时前
在使用 Docker 时,如果容器挂载的数据目录(如 `/var/moments`)位于数据盘,只要服务没有读写,数据盘是否就不会被唤醒?
人工智能·docker
二当家的素材网4 小时前
Centos和麒麟系统如何每天晚上2点10分定时备份达梦数据库
linux·数据库·centos
挑战者6668884 小时前
CentOS 系统高效部署 Dify 全攻略
linux·运维·centos
蓝纹绿茶7 小时前
【Mac】实现Docker下载安装【正在逐步完善】
macos·docker·容器