Docker?搭建?RabbitMQ的詳細過程
前言
在現(xiàn)代微服務(wù)與分布式架構(gòu)中,RabbitMQ 是一款成熟的開源消息隊列中間件,提供了可靠的消息投遞、豐富的路由策略和管理插件。通過 Docker 部署 RabbitMQ,可以快速搭建、輕松擴展,并與容器化平臺無縫集成。
本文將指導(dǎo)你通過 Docker 快速搭建一個 RabbitMQ 環(huán)境,講解目錄結(jié)構(gòu)、啟動腳本編寫、參數(shù)詳解,以及兩種網(wǎng)絡(luò)模式(Host 網(wǎng)絡(luò)模式 vs Port 映射模式)的部署示例與對比。
一、準備工作
首先,確保你的系統(tǒng)上已經(jīng)安裝了 Docker。
Linux上進行Docker安裝有兩種方式:
- Docker自動化安裝
- Docker手動安裝
可以根據(jù)該文章的步驟進行安裝:http://www.dbjr.com.cn/server/339879ek2.htm
二、設(shè)置目錄結(jié)構(gòu)
為了持久化存儲日志、數(shù)據(jù)和配置,需要在宿主機上創(chuàng)建對應(yīng)目錄,并賦予 RabbitMQ 容器內(nèi)部用戶(UID 999)的寫權(quán)限。
# 創(chuàng)建日志、數(shù)據(jù)和配置目錄 mkdir -p "$DIR/rabbitmq/log" mkdir -p "$DIR/rabbitmq/data" mkdir -p "$DIR/rabbitmq/conf" # 設(shè)置目錄權(quán)限為容器內(nèi) rabbitmq 用戶(UID 999) sudo chown -R 999:999 \ "$DIR/rabbitmq/log" \ "$DIR/rabbitmq/data" \ "$DIR/rabbitmq/conf"
log:存放 RabbitMQ 日志data:存放 Mnesia 數(shù)據(jù)庫文件conf:存放自定義配置(如 rabbitmq.conf、advanced.config、enabled_plugins)
三、編寫啟動腳本
將目錄準備工作與容器運行命令整合到腳本 rabbitmq_install.sh 中,方便一鍵部署與更新。
#!/bin/bash
# 安裝路徑與容器名稱
DIR="/opt/docker/demo"
DOCKER_NAME="docker-rabbitmq"
# 創(chuàng)建目錄并設(shè)置權(quán)限
mkdir -p "$DIR/rabbitmq/log"
mkdir -p "$DIR/rabbitmq/data"
mkdir -p "$DIR/rabbitmq/conf"
sudo chown -R 999:999 "$DIR/rabbitmq/log" \
"$DIR/rabbitmq/data" \
"$DIR/rabbitmq/conf"
# 運行 RabbitMQ 容器(Host 網(wǎng)絡(luò)模式)
docker run -d \
--restart=always \ # 容器重啟策略
--name "$DOCKER_NAME" \ # 容器名稱
--network host \ # 主機網(wǎng)絡(luò)模式
-v "$DIR/rabbitmq/log:/var/log/rabbitmq" \ # 日志掛載
-v "$DIR/rabbitmq/data:/var/lib/rabbitmq/mnesia" \ # 數(shù)據(jù)掛載
-v "$DIR/rabbitmq/conf:/etc/rabbitmq" \ # 配置掛載
-e RABBITMQ_DEFAULT_USER=admin \ # 默認用戶名
-e RABBITMQ_DEFAULT_PASS=admin123456 \ # 默認密碼
-e RABBITMQ_ENABLED_PLUGINS="rabbitmq_management" \ # 啟用管理插件
rabbitmq:management # 官方管理版鏡像保存后,賦予執(zhí)行權(quán)限并運行:
chmod +x run_rabbitmq.sh ./run_rabbitmq.sh
解釋各個參數(shù):
-d:后臺運行容器。--restart=always:重啟策略:當(dāng)容器退出或 Docker 重啟時,總是自動重啟該容器。--name "$DOCKER_NAME":容器的名稱為docker-rabbitmq。--network host:使用主機網(wǎng)絡(luò)模式(Host networking),容器與宿主機共享網(wǎng)絡(luò)棧。-v "$DIR/rabbitmq/log:/var/log/rabbitmq":日志掛載-v "$DIR/rabbitmq/data:/var/lib/rabbitmq/mnesia": 數(shù)據(jù)掛載。-v "$DIR/rabbitmq/conf:/etc/rabbitmq":配置掛載。-e RABBITMQ_DEFAULT_USER=…:環(huán)境變量,設(shè)置 RabbitMQ 默認用戶名(第一次啟動時生效)。-e RABBITMQ_DEFAULT_PASS=…:環(huán)境變量,設(shè)置 RabbitMQ 默認密碼。-e RABBITMQ_ENABLED_PLUGINS=…:環(huán)境變量,啟用指定插件(以逗號分隔),此處開啟管理控制臺插件。rabbitmq:management:指定鏡像及標(biāo)簽,management版本內(nèi)置了管理插件與 Web 控制臺。
四、Host 網(wǎng)絡(luò)模式 vs Port 映射模式
1. Host 網(wǎng)絡(luò)模式
命令示例
docker run -d \ --restart=always \ --name "$DOCKER_NAME" \ --network host \ -v "$DIR/rabbitmq/log:/var/log/rabbitmq" \ -v "$DIR/rabbitmq/data:/var/lib/rabbitmq/mnesia" \ -v "$DIR/rabbitmq/conf:/etc/rabbitmq" \ -e RABBITMQ_DEFAULT_USER=admin \ -e RABBITMQ_DEFAULT_PASS=admin123456 \ -e RABBITMQ_ENABLED_PLUGINS="rabbitmq_management" \ rabbitmq:management
特點
容器直接使用宿主機的網(wǎng)絡(luò)棧,RabbitMQ 內(nèi)部監(jiān)聽的端口(默認 5672、15672)會直接映射到宿主機相同端口。
網(wǎng)絡(luò)性能最佳,無額外的 NAT 轉(zhuǎn)發(fā)開銷。
優(yōu)點
簡化網(wǎng)絡(luò)配置,無需額外的 -p 端口映射。
延遲更低,吞吐更高。
缺點
與宿主機完全共享端口,若宿主機已有同端口服務(wù)運行,會沖突。
安全隔離較弱,容器網(wǎng)絡(luò)直接暴露給宿主機。
2. Port 映射模式
命令示例
docker run -d \ --restart=always \ --name "$DOCKER_NAME" \ -p 5673:5672 \ -p 15673:15672 \ -v "$DIR/rabbitmq/log:/var/log/rabbitmq" \ -v "$DIR/rabbitmq/data:/var/lib/rabbitmq/mnesia" \ -v "$DIR/rabbitmq/conf:/etc/rabbitmq" \ -e RABBITMQ_DEFAULT_USER=admin \ -e RABBITMQ_DEFAULT_PASS=admin123456 \ -e RABBITMQ_ENABLED_PLUGINS="rabbitmq_management" \ rabbitmq:management
含義
- -p 5673:5672:將宿主機的 5673 端口映射到容器內(nèi)的 5672(AMQP)端口。
- -p 15673:15672:將宿主機的 15673 端口映射到容器內(nèi)的 15672(管理控制臺)端口。
優(yōu)點
- 靈活指定宿主機端口,避免與其他服務(wù)沖突。
- 容器網(wǎng)絡(luò)與宿主機隔離更好,安全性更高。
缺點
相比 Host 模式,略有端口轉(zhuǎn)發(fā)開銷。
需手動管理多端口映射配置。
五、端口配置對比
| 特性 | Host 網(wǎng)絡(luò)模式 | Port 映射模式 |
|---|---|---|
| 配置命令 | --network host | -p host:container |
| 網(wǎng)絡(luò)性能 | 最佳,無 NAT 轉(zhuǎn)發(fā)開銷 | 有少量轉(zhuǎn)發(fā)開銷 |
| 端口沖突風(fēng)險 | 高,容器直接占用宿主機端口 | 低,可自定義宿主機端口 |
| 安全隔離 | 較弱 | 較強 |
| 多容器端口復(fù)用 | 不支持 | 支持,不同容器映射到不同端口 |
| 配置復(fù)雜度 | 簡單 | 需要顯式映射 |
六、配置示例
rabbitmq.conf(放置于 $DIR/rabbitmq/conf/rabbitmq.conf)
# 修改 AMQP 端口 listeners.tcp.default = 5673 # 修改為你想要的端口 # 修改 RabbitMQ 管理界面端口 management.listener.port = 15673 # 修改為你想要的端口 # 允許非本地訪問 guest 用戶 loopback_users.guest = false
enabled_plugins(放置于 $DIR/rabbitmq/conf/enabled_plugins)
[rabbitmq_management,rabbitmq_peer_discovery_classic_config].
七、查看與管理
查看容器狀態(tài)
docker ps | grep "$DOCKER_NAME"
查看日志
tail -f "$DIR/rabbitmq/log/rabbit@$(hostname).log" 或 docker logs -f $DOCKER_NAME
訪問管理控制臺
瀏覽器訪問 http://<宿主機IP>:15672,使用 admin/admin123456 登錄。

八、擴展與高可用
集群部署
- 在多臺主機上運行相同腳本,調(diào)整容器名稱與配置
- 使用
rabbitmq_peer_discovery_classic_config或 Kubernetes 插件實現(xiàn)自動發(fā)現(xiàn)與集群組網(wǎng)
鏡像隊列與策略
- 在管理控制臺或配置文件中設(shè)置隊列鏡像策略,確保消息持久化與高可用
監(jiān)控與告警
- 接入 Prometheus、Grafana 等監(jiān)控體系,利用 RabbitMQ Exporter 采集指標(biāo)
九、常用命令
修改默認密碼
如果需要修改 RabbitMQ 的默認密碼,可以使用以下命令:
docker exec -it "$DOCKER_NAME" rabbitmqctl change_password admin newpassword
請將 newpassword 替換為希望設(shè)置的新密碼。
啟用其他插件
如果需要啟用其他 RabbitMQ 插件,可以使用以下命令:
docker exec -it "$DOCKER_NAME" rabbitmq-plugins enable <plugin_name>
請將 <plugin_name> 替換為希望啟用的插件名稱。
到此這篇關(guān)于Docker 搭建 RabbitMQ的詳細過程的文章就介紹到這了,更多相關(guān)Docker 搭建 RabbitMQ內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker buildx構(gòu)建多平臺鏡像并推送到私有倉庫的方法
這篇文章主要介紹了Docker buildx構(gòu)建多平臺鏡像并推送到私有倉庫,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
解決Docker刪除鏡像報錯:Error response from daemon:con
刪除Docker鏡像時遇到?jīng)_突,因為鏡像正在被一個運行中的容器使用,解決方法是先停止并刪除該容器,然后再嘗試刪除鏡像,此外,還可以選擇強制刪除鏡像,但這可能會導(dǎo)致數(shù)據(jù)丟失2024-11-11

