将代理定义导入到Dockerized RabbitMQ中

我有一个RabbitMQ代理,已经定义了一些交换和队列。 我知道我可以通过HTTP API导出和导入这些定义。 我想对它进行Docker化,并在启动时导入所有的代理定义。

理想情况下,它将通过API完成。 我可以写一堆rabbitmqctl命令,但是有很多的定义可能需要一段时间。 另外,其他人通过networking界面进行的更改也必须插入。

我已经设法做了我想要的,通过编写一个脚本,睡觉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"] 

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 $@ 

有一个简单的方法将定义上传到Docker容器。 使用预先configuration的节点将定义导出到json文件。

然后将这个文件移动到Dockerfile所在的文件夹,然后在同一个文件夹中创build一个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:3.6.14-management-alpine ADD definitions.json /etc/rabbitmq ADD rabbitmq.config /etc/rabbitmq EXPOSE 4369 5672 25672 15672 

定义将在图像构build过程中加载。 当你运行容器时,所有的定义都将被应用。

您可以使用RabbitMQ启动您的容器,configuration资源(队列,交换,绑定),然后将您configuration的容器提交为新映像。 这个图像可以用来启动新的容器。

更多详细信息在https://docs.docker.com/articles/basics/#committing-saving-a-container-state

我不确定这是否是一种select,但处理这种情况的绝对最简单的方法是定期创build一个新的空RabbitMQ容器,并将它作为RabbitMQ集群的一部分join第一个容器。 队列的configuration将被复制到第二个容器。

然后,您可以停止容器,并使用docker commit在新容器的Docker存储库中创build版本化的映像。 这个过程只会保存你对图像所作的改变,然后它将使你不必担心每次重新导入configuration。 你只需要获得最新的形象,以获得最新的configuration!