第16章 Docker 中 RabbiteMQ 的安装与配置及使用

第16章 Docker 中 RabbiteMQ 的安装与配置及使用

前言

  • 为什么要使用 RabbiteMQ?

    Apache ZooKeeper致力于开发和维护开源服务器,实现高度可靠的分布式协调。

  • 什么是 RabbiteMQ?

    Apache RabbiteMQ是Apache Software Foundation的一个软件项目,为大型分布式系统提供开源分布式配置服务,同步服务和命名注册表。 ZooKeeper是Hadoop的一个子项目,但现在它本身就是一个顶级项目。

    ZooKeeper是一种集中式服务,用于维护配置信息,命名,提供分布式同步和提供组服务。所有这些类型的服务都以分布式应用程序的某种形式使用。每次实施它们都需要做很多工作来修复不可避免的错误和竞争条件。由于难以实现这些类型的服务,应用程序最初通常会吝啬它们,这使得它们在变化的情况下变得脆弱并且难以管理。即使正确完成,这些服务的不同实现也会在部署应用程序时导致管理复杂性。

    Learn more about ZooKeeper on the ZooKeeper Wiki.

  • 什么是 Docker?

    具体请参考我的第08章内容。

  • 为什么要在 Docker 中安装 Jenkins?

    为了开发环境一致性、可移植性、易于管理和维护性。

目标

  • 完成 Jenkins 在 Docker 中的安装与配置。
  • 安装在 Docker 中的 Jenkins 能正常对外提供服务。
  • 在外部开发环境中能正常访问和使用 Jenkins 持续集成服务。

环境

  • **VMware:**VMware Workstation 14 Pro
  • **Linux:**CentOS7.4
  • **Docker:**18.06.0-ce, build 0ffa825
  • **Jenkins:**Jenkins2.121.1
  • **JDK:**jdk1.8.0_172

介绍

RabbitMQ是一个开源的多协议消息代理。

支持的标签和相应的Dockerfile链接

快速参考(Quick reference)

什么是RabbitMQ?

RabbitMQ是开源消息代理软件(有时称为面向消息的中间件),它实现了高级消息队列协议(AMQP)。 RabbitMQ服务器采用Erlang编程语言编写,构建于Open Telecom Platform框架之上,用于集群和故障转移。与代理接口的客户端库可用于所有主要编程语言。

wikipedia.org/wiki/RabbitMQ

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ULtK9UVO-1599612047189)(assets/logo-1535882663440.png)]

如何使用此镜像

运行守护进程(Running the daemon)

关于RabbitMQ的一个重要注意事项是它根据所谓的“节点名称”存储数据,默认为主机名。这对于在Docker中的使用意味着我们应该为每个守护进程明确指定-h/--hostname ,这样我们就不会获得随机主机名并且可以跟踪我们的数据:

$ sudo docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3

这将启动一个侦听默认端口5672的RabbitMQ容器。如果你给它一分钟,然后做docker log some-rabbit,你会在输出中看到一个类似于的块:

=INFO REPORT==== 6-Jul-2015::20:47:02 ===
node           : rabbit@my-rabbit
home dir       : /var/lib/rabbitmq
config file(s) : /etc/rabbitmq/rabbitmq.config
cookie hash    : UoNOcDhfxW9uoZ92wh6BjA==
log            : tty
sasl log       : tty
database dir   : /var/lib/rabbitmq/mnesia/rabbit@my-rabbit

注意那里的数据库目录,特别是它的“节点名称”附加到文件存储的末尾。默认情况下,此映像使/var/lib/rabbitmq中的所有卷都成为卷。

内存限制(Memory Limits)

RabbitMQ包含明确跟踪和管理内存使用的功能,因此需要了解cgroup强加的限制。

上游(upsteam)配置设置为vm_memory_high_watermark,文档中的"Memory Alarms"中对此进行了描述。

在此图像中,此值通过RABBITMQ_VM_MEMORY_HIGH_WATERMARK设置。此环境变量的值解释如下:

  • 0.49被视为49%,就像上游一样({vm_memory_high_watermark,0.49}
  • 56%被视为56%0.56; {vm_memory_high_watermark,0.56}
  • 1073741824被视为绝对字节数({vm_memory_high_watermark,{absolute,1073741824}}
  • 1024MiB被视为具有单位的绝对字节数({vm_memory_high_watermark,{absolute,“1024MiB”}}

主要的行为差异在于如何处理百分比。如果当前容器具有内存限制(--memory / -m),则将根据内存限制将百分比值计算为绝对字节值,而不是按原样传递给RabbitMQ。例如,使用--memory 2048m运行的容器(隐含的上游默认RABBITMQ_VM_MEMORY_HIGH_WATERMARK为40%)将有效限制设置为819MB(即2048MB40%)。

Erlang Cookie

有关cookie及其必要原因的更多信息,请参阅RabbitMQ“群集指南”RabbitMQ “Clustering Guide”

要设置一致的cookie(对于群集尤其有用,但也可以通过rabbitmqctl进行远程/跨容器管理),请使用RABBITMQ_ERLANG_COOKIE

$ sudo docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3

然后可以从单独的实例使用它来连接:

$ sudo docker run -it --rm --link some-rabbit:my-rabbit -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3 bash
root@f2a2d3d27c75:/# rabbitmqctl -n rabbit@my-rabbit list_users
Listing users ...
guest   [administrator]

或者,也可以使用RABBITMQ_NODENAME使重复的rabbitmqctl 调用更简单:

$ sudo docker run -it --rm --link some-rabbit:my-rabbit -e RABBITMQ_ERLANG_COOKIE='secret cookie here' -e RABBITMQ_NODENAME=rabbit@my-rabbit rabbitmq:3 bash
root@f2a2d3d27c75:/# rabbitmqctl list_users
Listing users ...
guest   [administrator]

Management Plugin

默认情况下安装并启用了管理插件(management plugin )提供的第二组标签,可在标准管理端口15672上使用,其默认用户名和密码为guest/guest

$ sudo docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3-management

自定义安装

$ sudo docker run -d --hostname node6.ringyin.com --name rabbitmq -p 5672:5672 -p 15671:15672 rabbitmq:3.7.8-management

5672是项目中连接rabbitmq的端口(我这里映射的是5672),15672是rabbitmq的web管理界面端口(我映射为15672)。执行完后,查看容器已经是正常运行的。

您可以通过在浏览器中访问http://container-ip:15671来访问它,或者如果您需要在主机外部访问,请在端口8080上访问它:

$ sudo docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 rabbitmq:3-management

然后,您可以在浏览器中转到http://localhost:15671或http://host-ip:15671。

Environment Variables

Dockerfile中定义了一小部分可能的环境变量,这些变量将通过docker引擎传递(如下所示)。有关RabbitMQ自身支持的环境变量列表,请参阅:

https://www.rabbitmq.com/configure.html

对于没有管理插件的SSL配置:

RABBITMQ_SSL_CACERTFILE
RABBITMQ_SSL_CERTFILE
RABBITMQ_SSL_DEPTH
RABBITMQ_SSL_FAIL_IF_NO_PEER_CERT
RABBITMQ_SSL_KEYFILE
RABBITMQ_SSL_VERIFY

对于使用管理插件的SSL配置:

RABBITMQ_MANAGEMENT_SSL_CACERTFILE
RABBITMQ_MANAGEMENT_SSL_CERTFILE
RABBITMQ_MANAGEMENT_SSL_DEPTH
RABBITMQ_MANAGEMENT_SSL_FAIL_IF_NO_PEER_CERT
RABBITMQ_MANAGEMENT_SSL_KEYFILE
RABBITMQ_MANAGEMENT_SSL_VERIFY

设置默认用户和密码

如果您希望更改guest/guest的默认用户名和密码,可以使用RABBITMQ_DEFAULT_USERRABBITMQ_DEFAULT_PASS环境变量:

$ sudo docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password rabbitmq:3-management

然后,您可以在浏览器中访问http://localhost:15671或http://host-ip:15671并使用用户/密码访问管理控制台

设置默认vhost

如果要更改默认vhost,可以使用RABBITMQ_DEFAULT_VHOST环境变量:

$ sudo docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost rabbitmq:3-management

启用HiPE

警告:

如果你使用的是Alpine变种,目前有一个突出的bug(Alpine Linux bug#5700)和erlang-hipe软件包阻止HiPE在Alpine Linux中运行。有关更多讨论,请参见docker-library / rabbitmq#151。

有关各种配置选项的更多信息,请参见 RabbitMQ “Configuration”

要在启动时启用HiPE编译器,请将RABBITMQ_HIPE_COMPILE设置为1.加载到官方文档:

设置为true以使用HiPE预编译RabbitMQ的部分,HiPE是Erlang的即时编译器。这将以增加启动时间为代价来增加服务器吞吐量。您可能会在启动时延迟几分钟后看到20-50%的性能提升。

因此,在配置运行状况检查,自动群集等时考虑启动延迟非常重要。

Enabling Plugins

创建Dockerfile将在运行时启用它们。要查看图像rabbitmq-plugins列表中存在的插件的完整列表

FROM rabbitmq:3.7-management
RUN rabbitmq-plugins enable --offline rabbitmq_mqtt rabbitmq_federation_management rabbitmq_stomp

您还可以在/etc/rabbitmq/enabled_plugins中将文件作为以句点结尾的原子的erlang列表挂载。

示例enabled_plugins

[rabbitmq_federation_management,rabbitmq_management,rabbitmq_mqtt,rabbitmq_stomp].

附加配置

如果需要其他配置,建议使用RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS环境变量,其语法在Erlang OTP设计原则用户指南(适用于-ApplName的值为-rabbit)的7.8节(“配置应用程序”)中进行了描述。

例如,配置log_levels类似于-e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS =“ - rabbit log_levels [{connection,error}]”

其他配置键将被指定为列表。例如,配置log_levelsauth_backends看起来像-e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS =“ - rabbit log_levels [{connection,error}] auth_backends [rabbit_auth_backend_ldap]”

连接到守护进程

$ sudo docker run --name some-app --link some-rabbit:rabbit -d application-that-uses-rabbitmq

Image Variants

rabbitmq图像有多种口味,每种都是针对特定用例而设计的。

rabbitmq:<version>

这是事实上的形象。如果您不确定您的需求是什么,您可能想要使用这个。它被设计为既可以用作丢弃容器(安装源代码并启动容器来启动应用程序),也可以用作构建其他图像的基础。

rabbitmq:alpine

此图片基于阿尔卑斯官方图片中流行的Alpine Linux项目。 Alpine Linux比大多数分发基础图像(约5MB)小得多,因此通常会导致更细的图像。

当希望最终图像尺寸尽可能小时,强烈建议使用此变体。需要注意的主要注意事项是它确实使用musl libc而不是glibc和朋友,因此某些软件可能会遇到问题,具体取决于其libc要求的深度。但是,大多数软件都没有这个问题,因此这种变体通常是一个非常安全的选择。有关可能出现的问题的更多讨论以及使用基于Alpine的图像的一些比较/比较,请参阅此黑客新闻评论主题。

为了最小化图像大小,在基于Alpine的图像中包含其他相关工具(例如git或bash)的情况并不常见。使用此图像作为基础,在您自己的Dockerfile中添加所需的内容(如果您不熟悉,请参阅alpine图像描述以获取如何安装软件包的示例)。

License

查看此映像中包含的软件的许可证信息。

与所有Docker映像一样,这些映像也可能包含其他许可证(例如来自基本分发版的Bash等,以及所包含的主要软件的任何直接或间接依赖关系)。

可以在repo-info存储库的rabbitmq /目录中找到一些能够自动检测的其他许可证信息。

对于任何预先构建的图像使用,图像用户有责任确保对此图像的任何使用都符合其中包含的所有软件的任何相关许可。

参考

https://hub.docker.com/_/rabbitmq/

License

查看此映像中包含的软件的许可证信息。

与所有Docker映像一样,这些映像也可能包含其他许可证(例如来自基本分发版的Bash等,以及所包含的主要软件的任何直接或间接依赖关系)。

可以在repo-info存储库的rabbitmq /目录中找到一些能够自动检测的其他许可证信息。

对于任何预先构建的图像使用,图像用户有责任确保对此图像的任何使用都符合其中包含的所有软件的任何相关许可。

参考

https://hub.docker.com/_/rabbitmq/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值