Docker?搭建?RabbitMQ的詳細(xì)過程
前言
在現(xiàn)代微服務(wù)與分布式架構(gòu)中,RabbitMQ 是一款成熟的開源消息隊(duì)列中間件,提供了可靠的消息投遞、豐富的路由策略和管理插件。通過 Docker 部署 RabbitMQ,可以快速搭建、輕松擴(kuò)展,并與容器化平臺(tái)無縫集成。
本文將指導(dǎo)你通過 Docker 快速搭建一個(gè) RabbitMQ 環(huán)境,講解目錄結(jié)構(gòu)、啟動(dòng)腳本編寫、參數(shù)詳解,以及兩種網(wǎng)絡(luò)模式(Host 網(wǎng)絡(luò)模式 vs Port 映射模式)的部署示例與對(duì)比。
一、準(zhǔn)備工作
首先,確保你的系統(tǒng)上已經(jīng)安裝了 Docker。
Linux上進(jìn)行Docker安裝有兩種方式:
- Docker自動(dòng)化安裝
- Docker手動(dòng)安裝
可以根據(jù)該文章的步驟進(jìn)行安裝:http://www.dbjr.com.cn/server/339879ek2.htm
二、設(shè)置目錄結(jié)構(gòu)
為了持久化存儲(chǔ)日志、數(shù)據(jù)和配置,需要在宿主機(jī)上創(chuàng)建對(duì)應(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ù)庫(kù)文件conf
:存放自定義配置(如 rabbitmq.conf、advanced.config、enabled_plugins)
三、編寫啟動(dòng)腳本
將目錄準(zhǔn)備工作與容器運(yùn)行命令整合到腳本 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" # 運(yùn)行 RabbitMQ 容器(Host 網(wǎng)絡(luò)模式) docker run -d \ --restart=always \ # 容器重啟策略 --name "$DOCKER_NAME" \ # 容器名稱 --network host \ # 主機(jī)網(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 \ # 默認(rèn)用戶名 -e RABBITMQ_DEFAULT_PASS=admin123456 \ # 默認(rèn)密碼 -e RABBITMQ_ENABLED_PLUGINS="rabbitmq_management" \ # 啟用管理插件 rabbitmq:management # 官方管理版鏡像
保存后,賦予執(zhí)行權(quán)限并運(yùn)行:
chmod +x run_rabbitmq.sh ./run_rabbitmq.sh
解釋各個(gè)參數(shù):
-d
:后臺(tái)運(yùn)行容器。--restart=always
:重啟策略:當(dāng)容器退出或 Docker 重啟時(shí),總是自動(dòng)重啟該容器。--name "$DOCKER_NAME"
:容器的名稱為docker-rabbitmq
。--network host
:使用主機(jī)網(wǎng)絡(luò)模式(Host networking),容器與宿主機(jī)共享網(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 默認(rèn)用戶名(第一次啟動(dòng)時(shí)生效)。-e RABBITMQ_DEFAULT_PASS=…
:環(huán)境變量,設(shè)置 RabbitMQ 默認(rèn)密碼。-e RABBITMQ_ENABLED_PLUGINS=…
:環(huán)境變量,啟用指定插件(以逗號(hào)分隔),此處開啟管理控制臺(tái)插件。rabbitmq:management
:指定鏡像及標(biāo)簽,management
版本內(nèi)置了管理插件與 Web 控制臺(tái)。
四、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
特點(diǎn)
容器直接使用宿主機(jī)的網(wǎng)絡(luò)棧,RabbitMQ 內(nèi)部監(jiān)聽的端口(默認(rèn) 5672、15672)會(huì)直接映射到宿主機(jī)相同端口。
網(wǎng)絡(luò)性能最佳,無額外的 NAT 轉(zhuǎn)發(fā)開銷。
優(yōu)點(diǎn)
簡(jiǎn)化網(wǎng)絡(luò)配置,無需額外的 -p 端口映射。
延遲更低,吞吐更高。
缺點(diǎn)
與宿主機(jī)完全共享端口,若宿主機(jī)已有同端口服務(wù)運(yùn)行,會(huì)沖突。
安全隔離較弱,容器網(wǎng)絡(luò)直接暴露給宿主機(jī)。
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:將宿主機(jī)的 5673 端口映射到容器內(nèi)的 5672(AMQP)端口。
- -p 15673:15672:將宿主機(jī)的 15673 端口映射到容器內(nèi)的 15672(管理控制臺(tái))端口。
優(yōu)點(diǎn)
- 靈活指定宿主機(jī)端口,避免與其他服務(wù)沖突。
- 容器網(wǎng)絡(luò)與宿主機(jī)隔離更好,安全性更高。
缺點(diǎn)
相比 Host 模式,略有端口轉(zhuǎn)發(fā)開銷。
需手動(dòng)管理多端口映射配置。
五、端口配置對(duì)比
特性 | Host 網(wǎng)絡(luò)模式 | Port 映射模式 |
---|---|---|
配置命令 | --network host | -p host:container |
網(wǎng)絡(luò)性能 | 最佳,無 NAT 轉(zhuǎn)發(fā)開銷 | 有少量轉(zhuǎn)發(fā)開銷 |
端口沖突風(fēng)險(xiǎn) | 高,容器直接占用宿主機(jī)端口 | 低,可自定義宿主機(jī)端口 |
安全隔離 | 較弱 | 較強(qiáng) |
多容器端口復(fù)用 | 不支持 | 支持,不同容器映射到不同端口 |
配置復(fù)雜度 | 簡(jiǎn)單 | 需要顯式映射 |
六、配置示例
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
訪問管理控制臺(tái)
瀏覽器訪問 http://<宿主機(jī)IP>:15672
,使用 admin/admin123456
登錄。
八、擴(kuò)展與高可用
集群部署
- 在多臺(tái)主機(jī)上運(yùn)行相同腳本,調(diào)整容器名稱與配置
- 使用
rabbitmq_peer_discovery_classic_config
或 Kubernetes 插件實(shí)現(xiàn)自動(dòng)發(fā)現(xiàn)與集群組網(wǎng)
鏡像隊(duì)列與策略
- 在管理控制臺(tái)或配置文件中設(shè)置隊(duì)列鏡像策略,確保消息持久化與高可用
監(jiān)控與告警
- 接入 Prometheus、Grafana 等監(jiān)控體系,利用 RabbitMQ Exporter 采集指標(biāo)
九、常用命令
修改默認(rèn)密碼
如果需要修改 RabbitMQ 的默認(rèn)密碼,可以使用以下命令:
docker exec -it "$DOCKER_NAME" rabbitmqctl change_password admin newpassword
請(qǐng)將 newpassword
替換為希望設(shè)置的新密碼。
啟用其他插件
如果需要啟用其他 RabbitMQ 插件,可以使用以下命令:
docker exec -it "$DOCKER_NAME" rabbitmq-plugins enable <plugin_name>
請(qǐng)將 <plugin_name>
替換為希望啟用的插件名稱。
到此這篇關(guān)于Docker 搭建 RabbitMQ的詳細(xì)過程的文章就介紹到這了,更多相關(guān)Docker 搭建 RabbitMQ內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker buildx構(gòu)建多平臺(tái)鏡像并推送到私有倉(cāng)庫(kù)的方法
這篇文章主要介紹了Docker buildx構(gòu)建多平臺(tái)鏡像并推送到私有倉(cāng)庫(kù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01解決Docker刪除鏡像報(bào)錯(cuò):Error response from daemon:con
刪除Docker鏡像時(shí)遇到?jīng)_突,因?yàn)殓R像正在被一個(gè)運(yùn)行中的容器使用,解決方法是先停止并刪除該容器,然后再嘗試刪除鏡像,此外,還可以選擇強(qiáng)制刪除鏡像,但這可能會(huì)導(dǎo)致數(shù)據(jù)丟失2024-11-11docker-compose容器互相連接的實(shí)現(xiàn)
本文主要介紹了docker-compose容器互相連接的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03