Docker 将代理定义导入停靠的RabbitMQ
我有一个RabbitMQ代理,已经定义了一些交换和队列。我知道我可以通过HTTP API导出和导入这些定义。我想对它进行Dockerize,并在它启动时导入所有代理定义 理想情况下,它可以像通过API一样轻松地完成。我可以编写一组Docker 将代理定义导入停靠的RabbitMQ,docker,rabbitmq,Docker,Rabbitmq,我有一个RabbitMQ代理,已经定义了一些交换和队列。我知道我可以通过HTTP API导出和导入这些定义。我想对它进行Dockerize,并在它启动时导入所有代理定义 理想情况下,它可以像通过API一样轻松地完成。我可以编写一组rabbitmqctl命令,但是如果有很多定义,这可能需要相当长的时间。此外,其他人通过web界面所做的每一项更改都必须插入 我通过编写一个脚本来休眠一个curl请求并启动服务器,从而实现了我想要的功能,但这似乎很容易出错,而且并不优雅。有没有更好的方法进行定义导入/导
rabbitmqctl
命令,但是如果有很多定义,这可能需要相当长的时间。此外,其他人通过web界面所做的每一项更改都必须插入
我通过编写一个脚本来休眠一个curl请求并启动服务器,从而实现了我想要的功能,但这似乎很容易出错,而且并不优雅。有没有更好的方法进行定义导入/导出
,还是这是最好的办法
我的Dockerfile:
FROM rabbitmq:management
LABEL description="Rabbit image" version="0.0.1"
ADD init.sh /init.sh
ADD rabbit_e6f2965776b0_2015-7-14.json /rabbit_config.json
CMD ["/init.sh"]
FROM rabbitmq:3.6.14-management-alpine
ADD definitions.json /etc/rabbitmq
ADD rabbitmq.config /etc/rabbitmq
EXPOSE 4369 5672 25672 15672
init.sh
sleep 10 && curl -i -u guest:guest -d @/rabbit_config.json -H "content-type:application/json" http://localhost:15672/api/definitions -X POST &
rabbitmq-server $@
您可以使用RabbitMQ启动容器,配置资源(队列、交换、绑定),然后将配置的容器作为新映像提交。此图像可用于启动新容器
更多详细信息参见我不确定这是否是一个选项,但处理这种情况最简单的方法是定期创建一个新的空RabbitMQ容器,并让它作为RabbitMQ集群的一部分加入第一个容器。队列的配置将复制到第二个容器中
然后,您可以停止容器并使用在docker存储库中创建新容器的版本化映像。此过程将只保存您对映像所做的更改,这样您就不必担心每次重新导入配置。您只需获得最新的映像即可获得最新的配置 有一种将定义上载到Docker容器的简单方法。 使用预配置的节点将定义导出到
json
文件
然后将此文件移动到Dockerfile所在的同一文件夹中,并在同一文件夹中创建rabbitmq.config
。以下是rabbitmq.config
的上下文:
[
{ rabbit, [
{ loopback_users, [ ] },
{ tcp_listeners, [ 5672 ] },
{ ssl_listeners, [ ] },
{ hipe_compile, false }
] },
{ rabbitmq_management, [ { listener, [
{ port, 15672 },
{ ssl, false }
] },
{ load_definitions, "/etc/rabbitmq/definitions.json" }
] }
].
然后准备适当的Dockerfile:
FROM rabbitmq:management
LABEL description="Rabbit image" version="0.0.1"
ADD init.sh /init.sh
ADD rabbit_e6f2965776b0_2015-7-14.json /rabbit_config.json
CMD ["/init.sh"]
FROM rabbitmq:3.6.14-management-alpine
ADD definitions.json /etc/rabbitmq
ADD rabbitmq.config /etc/rabbitmq
EXPOSE 4369 5672 25672 15672
定义将在映像生成期间加载。运行容器时,所有定义都已应用
rabbitmqadmin导出rabbit.definitions.json
导出定义
Add rabbit.definitions.json/tmp/rabbit.definitions.json
环境:
-RABBITMQ_服务器\u附加\u ERL_参数=-RABBITMQ_管理加载\u定义“/tmp/rabbit.definitions.json”
实际上,更深入地思考您的问题,如果使用RabbitMQ API的资源声明是幂等的,那么您为什么需要它,这样您就可以调用
queueDeclare
或exchangeDeclare
,而不用担心资源是否已经存在。当我想重置配置并运行我的应用程序时,我总是重新创建我的容器,它配置RabbitMQ中所需的所有内容!我选择将my.json的内容粘贴到Docker机密中。