镜像官网:https://hub.docker.com/

1. 拉取 rabbitmq 版本镜像 (选择一个版本)

3.7-management-alpine (这是我选的版本号)
拉取镜像:
命令:docker pull rabbitmq:3.7-management-alpine
查看镜像:
[root@wangqinmin ~]# docker images
REPOSITORY          TAG                     IMAGE ID            CREATED             SIZE
rabbitmq            3.7-management-alpine   d0734dc6a1bb        5 days ago          131MB
运行rabbitmq命令: 
docker run -d --name Myrabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5673:5672 rabbitmq:3.7-management-alpine
这个可以不看:

另一个运行命令(多了--hostname rabbit-host ) 可以跟上面的对比着学习一下:
docker run -d --hostname rabbit-host --name Myrabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5673:5672 rabbitmq:3.7-management-alpine

运行rabbitmq命令解析(下面是命令拆分)

docker run -d --name   -- 这里是固定的

Myrabbitmq     -- 这个表示当rabbitmq在docker中运行起来后,在docker中的自定义名称 (就好比手机应用的重命名。爱改不改)

-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin   -- 给rabbitmq设置登录的用户名、密码(这里的用户名、密码都为admin)

-p 15672:15672 -p 5673:5672  -- 比如只看:-p 5673:5672 这里的 -p 表示映射端口, 5673表示linux服务器的端口号,5672表示docker镜像中运行程序的端口号 (我这里使用5673端口号的原因是:我的activemq的端口使用了5672) 

rabbitmq:3.7-management-alpine  -- 当使用命令:docker images 看见 REPOSTTORY 和 TAG 下面的rabbitmq 和 3.7-management-alpine 在他们中间加个 冒号

后面这几步可以不看:


使用命令查看rabbitmq运行情况:
[root@wangqinmin ~]# docker ps -a
CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS              PORTS                                                                                        NAMES
d0a8f8176dda        rabbitmq:3.7-management-alpine   "docker-entrypoint..."   4 minutes ago       Up 4 minutes        4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, 0.0.0.0:5673->5672/tcp   Myrabbitmq
373859f18930        0f55cf3661e9                     "docker-entrypoint..."   2 weeks ago         Up 2 weeks          0.0.0.0:63791->6379/tcp                                                                      redis
54e115dbc5ae        mysql:5.6.42                     "docker-entrypoint..."   2 weeks ago         Up 2 weeks          0.0.0.0:33061->3306/tcp                                                                      mysql.5.6.42
35937e30972d        mysql:5.6.26                     "/entrypoint.sh my..."   3 weeks ago         Up 3 weeks          0.0.0.0:33060->3306/tcp                                                                      mysql.5.6.26


我们发现里面有一段: 5671/tcp, 15671/tcp, 25672/tcp 
这个跟后面的:0.0.0.0:15672->15672/tcp, 0.0.0.0:5673->5672/tcp
显示不一样,表示没有被映射到linux上面去。
按理来说也不用映射出去,如果有什么问题的话,就把映射加上即可。


在运行rabbitmq的命令中: 
docker run -d --name Myrabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5673:5672 rabbitmq:3.7-management-alpine

里面其实就只加上了一段
-p 4369:4369 -p 5671:5671 -p 25672:25672  
就好了。


合起来就是:

docker run -d --name Myrabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 4369:4369 -p 5671:5671 -p 25672:25672 rabbitmq:3.7-management-alpine
端口号解析  (当做补充看看吧)
4369 (epmd), 25672 (Erlang distribution)
5672, 5671 (AMQP 0-9-1 without and with TLS)
15672 (if management plugin is enabled)
61613, 61614 (if STOMP is enabled)
1883, 8883 (if MQTT is enabled)


4369 (epmd), 25672 (Erlang distribution)
Epmd 是 Erlang Port Mapper Daemon 的缩写,在 Erlang 集群中相当于 dns 的作用,绑定在4369端口上。

5672, 5671 (AMQP 0-9-1 without and with TLS)
AMQP 是 Advanced Message Queuing Protocol 的缩写,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,专为面向消息的中间件设计。基于此协议的客户端与消息中间件之间可以传递消息,并不受客户端/中间件不同产品、不同的开发语言等条件的限制。Erlang 中的实现有 RabbitMQ 等。

15672 (if management plugin is enabled)
通过 http://serverip:15672 访问 RabbitMQ 的 Web 管理界面,默认用户名密码都是 guest。(注意:RabbitMQ 3.0之前的版本默认端口是55672,下同)

61613, 61614 (if STOMP is enabled)
Stomp 是一个简单的消息文本协议,它的设计核心理念就是简单与可用性,官方文档,实践一下 Stomp 协议需要:
一个支持 stomp 消息协议的 messaging server (譬如activemq,rabbitmq);
一个终端(譬如linux shell);
一些基本命令与操作(譬如nc,telnet)

1883, 8883 (if MQTT is enabled)
MQTT 只是 IBM 推出的一个消息协议,基于 TCP/IP 的。两个 App 端发送和接收消息需要中间人,这个中间人就是消息服务器(比如ActiveMQ/RabbitMQ),三者通信协议就是 MQTT

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐