Docker快速安装RabbitMQ服务

快速开始

#!/bin/bash
# 建议保存为start.sh脚本执行
docker run -d --hostname my-rabbit --name some-rabbit --restart always -p 15672:15672 -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password rabbitmq:3-management

PS: 第一次启动要下载rabbitmq镜像,请耐心等待,docker启动完毕后,访问 http:127.0.0.1:15672即可

启动示例

MacdeMacBook-Pro:docker mac$ cd rabbitmq/
MacdeMacBook-Pro:rabbitmq mac$ ls
start.sh
MacdeMacBook-Pro:rabbitmq mac$ vim start.sh
MacdeMacBook-Pro:rabbitmq mac$ ls
start.sh
MacdeMacBook-Pro:rabbitmq mac$ vim start_always.sh
MacdeMacBook-Pro:rabbitmq mac$ chmod +x start_always.sh
MacdeMacBook-Pro:rabbitmq mac$ ./start_always.sh
Unable to find image 'rabbitmq:3-management' locally
3-management: Pulling from library/rabbitmq
f17d81b4b692: Pull complete
02fe1bd1a85c: Pull complete
66c15a50f4da: Pull complete
Digest: sha256:3eb2fa0f83914999846f831f14b900c0c85cea8e5d2db48ff73cf7defa12fe96
Status: Downloaded newer image for rabbitmq:3-management
ff89a5c3bd4f952816b660c9b10e1489332b68537a2c0efd748fa14cab6f460b
MacdeMacBook-Pro:rabbitmq mac$ docker ps
CONTAINER ID        IMAGE                               COMMAND                  CREATED             STATUS              PORTS                                                                                                                                                                    NAMES
ff89a5c3bd4f        rabbitmq:3-management               "docker-entrypoint.s…"   4 minutes ago       Up 4 minutes        4369/tcp, 5671-5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15673->15672/tcp                                                                                                  some-rabbit

Web页面

PS: 账户和密码是在start.sh的启动脚本中设置的 user/password

支持的tags和相关的Dockerfile

  • 3.7.83.73latest (3.7/debian/Dockerfile)
  • 3.7.8-management3.7-management3-managementmanagement (3.7/debian/management/Dockerfile)
  • 3.7.8-alpine3.7-alpine3-alpinealpine (3.7/alpine/Dockerfile)
  • 3.7.8-management-alpine3.7-management-alpine3-management-alpinemanagement-alpine(3.7/alpine/management/Dockerfile)
  • 3.6.163.6 (3.6/debian/Dockerfile)
  • 3.6.16-management3.6-management (3.6/debian/management/Dockerfile)
  • 3.6.16-alpine3.6-alpine (3.6/alpine/Dockerfile)
  • 3.6.16-management-alpine3.6-management-alpine (3.6/alpine/management/Dockerfile)

参考资料

  • Where to get help:
    the Docker Community Forums, the Docker Community Slack, or Stack Overflow

  • Where to file issues:
    https://github.com/docker-library/rabbitmq/issues

  • Maintained by:
    the Docker Community

  • Supported architectures: (more info)
    amd64arm32v5arm32v6arm32v7arm64v8i386ppc64les390x

  • Published image artifact details:
    repo-info repo's repos/rabbitmq/ directory (history)
    (image metadata, transfer size, etc)

  • Image updates:
    official-images PRs with label library/rabbitmq
    official-images repo's library/rabbitmq file (history)

  • Source of this description:
    docs repo's rabbitmq/ directory (history)

  • Supported Docker versions:
    the latest release (down to 1.6 on a best-effort basis)

RabbitMQ快速入门

RabbitMQ is open source message broker software (sometimes called message-oriented middleware) that implements the Advanced Message Queuing Protocol (AMQP). The RabbitMQ server is written in the Erlang programming language and is built on the Open Telecom Platform framework for clustering and failover. Client libraries to interface with the broker are available for all major programming languages.

wikipedia.org/wiki/RabbitMQ

如何使用RabbitMQ的Docker镜像

Running the daemon

One of the important things to note about RabbitMQ is that it stores data based on what it calls the "Node Name", which defaults to the hostname. What this means for usage in Docker is that we should specify -h/--hostnameexplicitly for each daemon so that we don't get a random hostname and can keep track of our data:

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

This will start a RabbitMQ container listening on the default port of 5672. If you give that a minute, then do docker logs some-rabbit, you'll see in the output a block similar to:

=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

Note the database dir there, especially that it has my "Node Name" appended to the end for the file storage. This image makes all of /var/lib/rabbitmq a volume by default.

Memory Limits

RabbitMQ contains functionality which explicitly tracks and manages memory usage, and thus needs to be made aware of cgroup-imposed limits.

The upstream configuration setting for this is vm_memory_high_watermark, and it is described under "Memory Alarms" in the documentation.

In this image, this value is set via RABBITMQ_VM_MEMORY_HIGH_WATERMARK. The value of this environment variable is interpreted as follows:

  • 0.49 is treated as 49%, just like upstream ({ vm_memory_high_watermark, 0.49 })
  • 56% is treated as 56% (0.56{ vm_memory_high_watermark, 0.56 })
  • 1073741824 is treated as an absolute number of bytes ({ vm_memory_high_watermark, { absolute, 1073741824 } })
  • 1024MiB is treated as an absolute number of bytes with a unit ({ vm_memory_high_watermark, { absolute, "1024MiB" } })

The main behavioral difference is in how percentages are handled. If the current container has a memory limit (--memory/-m), a percentage value will be calculated to an absolute byte value based on the memory limit, rather than being passed to RabbitMQ as-is. For example, a container run with --memory 2048m (and the implied upstream-default RABBITMQ_VM_MEMORY_HIGH_WATERMARK of 40%) will set the effective limit to 819MB (which is 40% of 2048MB).

Erlang Cookie

See the RabbitMQ "Clustering Guide" for more information about cookies and why they're necessary.

For setting a consistent cookie (especially useful for clustering but also for remote/cross-container administration via rabbitmqctl), use RABBITMQ_ERLANG_COOKIE:

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

This can then be used from a separate instance to connect:

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

Alternatively, one can also use RABBITMQ_NODENAME to make repeated rabbitmqctl invocations simpler:

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

If you wish to provide the cookie via a file (such as with Docker Secrets), it needs to be mounted at /var/lib/rabbitmq/.erlang.cookie:

docker service create ... --secret source=my-erlang-cookie,target=/var/lib/rabbitmq/.erlang.cookie ... rabbitmq

(Note that it will likely also be necessary to specify uid=XXX,gid=XXX,mode=0600 in order for Erlang in the container to be able to read the cookie file properly. See Docker's --secret documentation for more details.)

Management Plugin

There is a second set of tags provided with the management plugin installed and enabled by default, which is available on the standard management port of 15672, with the default username and password of guest / guest:

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

You can access it by visiting http://container-ip:15672 in a browser or, if you need access outside the host, on port 8080:

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

You can then go to http://localhost:8080 or http://host-ip:8080 in a browser.

Environment Variables

A small selection of the possible environment variables are defined in the Dockerfile to be passed through the docker engine (listed below). For a list of environment variables supported by RabbitMQ itself, see: https://www.rabbitmq.com/configure.html

For SSL configuration without the management plugin:

RABBITMQ_SSL_CACERTFILE
RABBITMQ_SSL_CERTFILE
RABBITMQ_SSL_DEPTH
RABBITMQ_SSL_FAIL_IF_NO_PEER_CERT
RABBITMQ_SSL_KEYFILE
RABBITMQ_SSL_VERIFY

For SSL configuration using the management plugin:

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

Setting default user and password

If you wish to change the default username and password of guest / guest, you can do so with the RABBITMQ_DEFAULT_USER and RABBITMQ_DEFAULT_PASS environmental variables:

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

You can then go to http://localhost:8080 or http://host-ip:8080 in a browser and use user/passwordto gain access to the management console

To source the username and password from files instead of environment variables, add a _FILE suffix to the environment variable names (for example, RABBITMQ_DEFAULT_USER_FILE=/run/secrets/xxx to use Docker Secrets).

Setting default vhost

If you wish to change the default vhost, you can do so with the RABBITMQ_DEFAULT_VHOST environmental variables:

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

Enabling HiPE

See the RabbitMQ "Configuration" for more information about various configuration options.

For enabling the HiPE compiler on startup use RABBITMQ_HIPE_COMPILE set to 1. Accroding to the official documentation:

Set to true to precompile parts of RabbitMQ with HiPE, a just-in-time compiler for Erlang. This will increase server throughput at the cost of increased startup time. You might see 20-50% better performance at the cost of a few minutes delay at startup.

It is therefore important to take that startup delay into consideration when configuring health checks, automated clustering etc.

Enabling Plugins

Creating a Dockerfile will have them enabled at runtime. To see the full list of plugins present on the image rabbitmq-plugins list

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

You can also mount a file at /etc/rabbitmq/enabled_plugins with contents as an erlang list of atoms ending with a period.

Example enabled_plugins

[rabbitmq_federation_management,rabbitmq_management,rabbitmq_mqtt,rabbitmq_stomp].

Additional Configuration

If additional configuration is required, it is recommended to supply an appropriate /etc/rabbitmq/rabbitmq.conf file (see the "Configuration File(s)" section of the RabbitMQ documentation for more details), for example via bind-mount, Docker Configs, or a short Dockerfile with a COPY instruction.

Alternatively, it is possible to use the RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS environment variable, whose syntax is described in section 7.8 ("Configuring an Application") of the Erlang OTP Design Principles User's Guide (the appropriate value for -ApplName is -rabbit), this method requires a slightly different reproduction of its equivalent entry in rabbitmq.conf. For example, configuring channel_max would look something like -e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-rabbit channel_max 4007". Where the space between the variable channel_max and its value 4007 correctly becomes a comma when translated in the environment.

Additional configuration keys would be specified as a list. For example, configuring both channel_max and auth_backends would look something like -e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-rabbit channel_max 4007 auth_backends [rabbit_auth_backend_ldap,rabbit_auth_backend_internal]". Note that some variables such as for auth_backends require their value(s) to be enclosed in brackets, and for multiple values explicitly including the comma as a delimiter.

Connecting to the daemon

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

Image Variants

The rabbitmq images come in many flavors, each designed for a specific use case.

rabbitmq:<version>

This is the defacto image. If you are unsure about what your needs are, you probably want to use this one. It is designed to be used both as a throw away container (mount your source code and start the container to start your app), as well as the base to build other images off of.

rabbitmq:<version>-alpine

This image is based on the popular Alpine Linux project, available in the alpine official image. Alpine Linux is much smaller than most distribution base images (~5MB), and thus leads to much slimmer images in general.

This variant is highly recommended when final image size being as small as possible is desired. The main caveat to note is that it does use musl libc instead of glibc and friends, so certain software might run into issues depending on the depth of their libc requirements. However, most software doesn't have an issue with this, so this variant is usually a very safe choice. See this Hacker News comment thread for more discussion of the issues that might arise and some pro/con comparisons of using Alpine-based images.

To minimize image size, it's uncommon for additional related tools (such as git or bash) to be included in Alpine-based images. Using this image as a base, add the things you need in your own Dockerfile (see the alpine image description for examples of how to install packages if you are unfamiliar).

License

View license information for the software contained in this image.

As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained).

Some additional license information which was able to be auto-detected might be found in the repo-inforepository's rabbitmq/ directory.

As for any pre-built image usage, it is the image user's responsibility to ensure that any use of this image complies with any relevant licenses for all software contained within.

转载来源:Docker官网

Docker快速安装RabbitMQ服务相关推荐

  1. 使用docker快速安装Oracle11gR2

    使用docker快速安装Oracle11gR2 0. 前言 1. 安装及配置docker 2. 使用docker下载Oracle11g安装包镜像 3. 使用安装运行Oracle11g 4. 配置Ora ...

  2. Docker 快速安装搭建 Ngnix 环境,并配置反向代理

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  3. Docker快速安装Sybase数据库DBeaver数据库图形化管理开发工具

    Docker快速安装Sybase数据库 Sybase 15.7 Based on ifnazar/sybase_15_7 Needs about 30 seconds after start for ...

  4. Docker快速部署PostgreSQL服务

    Docker快速部署PostgreSQL服务 快速开始 请新建一个目录postgresql,进入目录postgresql,将以下文件保存为docker-compose.yml,然后执行docker-c ...

  5. 使用Docker快速安装部署ES和Kibana并配置IK中文分词器以及自定义分词拓展词库

    使用Docker快速安装部署ES和Kibana的前提:首先需要确保已经安装了Docker环境 如果没有安装Docker的话,可以参考上一篇的内容:Linux上安装Docker 有了Docker环境后, ...

  6. 使用Docker快速安装部署mysql

    使用Docker快速安装部署mysql的前提:首先需要确保已经安装了Docker环境 如果没有安装Docker的话,可以参考上一篇的内容:Linux上安装Docker 有了Docker环境后,就可以使 ...

  7. 在docker中安装RabbitMQ

    RabbitMQ官方地址: https://www.rabbitmq.com/ RabbitMQ下载地址: https://www.rabbitmq.com/download.html RabbitM ...

  8. 用docker快速安装xwiki

    Wiki是一种在网络上开放且可供多人协同创作的超文本系统 为了方便开发 和记录变更文档 决定安装一个xwiki系统 xwiki的学习与使用  --  http://www.xwikichina.com ...

  9. 编译安装rabbitmq服务端

    有一种方式是:下载rabbitmq-server-generic-unix压缩包,是不用编译的.是已经编译好的源码了 下面介绍编译源码安装   总括: 需要以下步骤:   1.安装erlange.因为 ...

最新文章

  1. AI以假乱真怎么办?TequilaGAN教你轻松辨真伪
  2. 实验室信息管理系统(南京浩展软件)
  3. 5848. 树上的操作
  4. GitHub访问慢-FastGithub下载及使用
  5. 问题:AmqpConnectException: java.net.ConnectException: Connection refused: connect
  6. scrapy.response
  7. bankeralgorithm.jar中没有主清单属性_怀旧服:迅击指环和其拉之怒属性一致,为何狂暴战用迅击更好...
  8. 云服务器搭建kms服务器-vol版本
  9. python redis.exceptions.ConnectionError
  10. Android 中Goolgle 相关服务的移植
  11. 哪种博客程序更适合国内使用?
  12. RTKlib源码解析:ppp和rtkpost中的周跳检测函数
  13. shapely包导入问题
  14. Silverlight 2学习教程(四):Chiron.exe:Silverlight 2打包和动态语言部署工具
  15. 一个计算机网络典型系统可由,计算机网络基础试题2.doc
  16. 虚幻4场景渲染源码分析概述
  17. [Windows]删除我的电脑WPS网盘等盘符
  18. 如何读取PHD实时数据
  19. 35 | 前端安全:如何打造一个可信的前端环境?
  20. SourceTree提交vue前端代码报错git -c diff.mnemonicprefix=false -c core.quotepath=false commit -q -F C:\Users\

热门文章

  1. UIWebView / NSURL / NSBoundle 相关应用 (实例,加载完成前的背景, 默认safari打开链接地址等)...
  2. 动态规划——数塔(hdu2084)
  3. SLAM方向公众号、知乎、博客学习参考
  4. 机器学习降维算法四:Laplacian Eigenmaps 拉普拉斯特征映射
  5. __init、__initdata和__exit、__exitdata
  6. ssh无秘钥登录报错sign_and_send_pubkey: signing failed: agent refused operation
  7. 查询mysql各个库和表的大小并按大小输出
  8. FileInfo类 c# 1614533684
  9. 验证内容是否为空的多种办法 1210 c#
  10. 28.课时28.【Django模块】with标签使用详解(Av61533158,P28)