一、编写Dockerfile
Dockerfile 指令详细注释如下:
# 使用带有管理插件的官方 RabbitMQ 镜像作为基础
FROM rabbitmq:3.9-management# 复制自定义模板文件到 RabbitMQ 管理插件的模板目录
# 这里假设 ./users.ejs 和 ./limits.ejs 是用于自定义管理界面的模板文件
COPY ./users.ejs /opt/rabbitmq/plugins/rabbitmq_management-3.9.29/priv/www/js/tmpl
COPY ./limits.ejs /opt/rabbitmq/plugins/rabbitmq_management-3.9.29/priv/www/js/tmpl# 设置环境变量 ACTIVEMQ_HOME,虽然这里与 RabbitMQ 无关,但保留原样
ENV ACTIVEMQ_HOME /mydocker/activemq# 更新 apt 包列表,并安装 curl 工具,用于下载插件
RUN apt-get -o Acquire::Check-Date=false update && apt-get install -y curl# 下载延迟消息交换插件
# 将插件下载到 RabbitMQ 的 plugins 目录下
RUN curl -L https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/3.9.0/rabbitmq_delayed_message_exchange-3.9.0.ez > $RABBITMQ_HOME/plugins/rabbitmq_delayed_message_exchange-3.9.0.ez# 更改插件文件的所有者,确保 RabbitMQ 用户可以访问和管理插件
RUN chown rabbitmq:rabbitmq $RABBITMQ_HOME/plugins/rabbitmq_delayed_message_exchange-3.9.0.ez# 启用延迟消息交换插件
RUN rabbitmq-plugins enable rabbitmq_delayed_message_exchange
上传Dockerfile 和自定义模版,自行下载。上传到服务器
二、构建镜像
用上面Dockerfile 打包为本地镜像
注意:要在上面mydocker/rabbitMq目录下执行
docker build -t my-rabbitmq .
执行结果如下:
[+] Building 100.7s (12/12) FINISHED docker:default=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 732B 0.0s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [internal] load metadata for docker.io/library/rabbitmq:3.9-management 15.3s=> [1/7] FROM docker.io/library/rabbitmq:3.9-management@sha256:4c4b66ad5ec40b2c27943b9804d307bf31c17c8537cd0cd107236200a9cd2814 0.0s=> [internal] load build context 0.0s=> => transferring context: 61B 0.0s=> CACHED [2/7] COPY ./users.ejs /opt/rabbitmq/plugins/rabbitmq_management-3.9.29/priv/www/js/tmpl 0.0s=> CACHED [3/7] COPY ./limits.ejs /opt/rabbitmq/plugins/rabbitmq_management-3.9.29/priv/www/js/tmpl 0.0s=> [4/7] RUN apt-get -o Acquire::Check-Date=false update && apt-get install -y curl 63.0s=> [5/7] RUN curl -L https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/3.9.0/rabbitmq_delayed_message_exchange-3.9.0.ez > /opt/rabbitmq/plugins/rabbitmq_delayed_message_ex 17.5s=> [6/7] RUN chown rabbitmq:rabbitmq /opt/rabbitmq/plugins/rabbitmq_delayed_message_exchange-3.9.0.ez 0.3s => [7/7] RUN rabbitmq-plugins enable rabbitmq_delayed_message_exchange 3.3s => exporting to image 1.2s => => exporting layers 1.1s => => writing image sha256:5580b8387db966233515e6582f57d04b07014cd9280d8593839903932dc0cffa 0.0s => => naming to docker.io/library/my-rabbitmq
查看打包好的镜像:my-rabbitmq
[root@syf rabbitMq]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-rabbitmq latest 5580b8387db9 45 seconds ago 319MB
dockertest 1.0 7f4faa206171 9 months ago 760MB
centosjava8 1.0 b66e5037b732 9 months ago 1.27GB
nginx latest 605c77e624dd 2 years ago 141MB
redis 6.2.6 7614ae9453d1 2 years ago 113MB
mysql 5.7 c20987f18b13 2 years ago 448MB
portainer/portainer-ce 2.9.1 bc46de77a3ff 2 years ago 252MB
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g latest 3fa112fd3642 8 years ago 6.85GB
三、运行镜像
运行上面打包好的镜像
docker run -d -p 15672:15672 -p 5672:5672 \-e RABBITMQ_DEFAULT_VHOST=my_vhost \-e RABBITMQ_DEFAULT_USER=admin \-e RABBITMQ_DEFAULT_PASS=admin \--hostname myRabbit \--name rabbitmq \my-rabbitmq
参数说明:
- -d:表示在后台运行容器;
- -p:将容器的端口 5672(应用访问端口)和 15672 (控制台Web端口号)映射到主机中;
- -e:指定环境变量:
- RABBITMQ_DEFAULT_VHOST:默认虚拟机名;
- RABBITMQ_DEFAULT_USER:默认的用户名;
- RABBITMQ_DEFAULT_PASS:默认的用户密码;
- --hostname:指定主机名(RabbitMQ 的一个重要注意事项是它根据所谓的 节点名称 存储数据,默认为主机名);
- --name rabbitmq :设置容器名称;
- my-rabbitmq:容器使用的镜像名称;
设置rabbitmq 自动启
docker update rabbitmq --restart=always
四、启动 rabbitmq_management
rabbitmq_management
是 RabbitMQ 的一个插件,它提供了对 RabbitMQ 服务器的管理界面和 HTTP API。通过这个插件,用户可以:
- 监控 队列、交换机、连接等的状态。
- 管理 创建、删除队列、绑定、用户权限等。
- 配置 查看配置信息,进行一些配置上的调整。
- 统计信息 获取详细的统计信息,如消息的发送速率、队列深度等。
方法一:
docker exec -it rabbitmq /bin/bash
---------------------------------rabbitmq-plugins enable rabbitmq_management
方法二::
docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_management
五、测试访问 RabbitMQ
浏览器输入地址:http://ip:15672 即可访问后台管理页面,如下:
注意: 由于我在启动容器的时候设置了默认的用户名 (Admin) 和密码 (Admin),所以需要使用设置的用户名和密码进行登录。
登录进去后的管理页面如下:
提示: 如果无法访问可以尝试开启防火墙 15672 端口:
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload