場景
Docker+DockerCompose實現部署jenkins,并實現jenkinsfile打包SpringBoot+Vue流水線項目過程詳解、踩坑記錄(附鏡像資源、離線包資源下載):
Docker+DockerCompose實現部署jenkins,并實現jenkinsfile打包SpringBoot+Vue流水線項目過程詳解、踩坑記錄(附鏡像資源、離線包資源下載)_jenkins+springboot+docker+docker-compose部署-CSDN博客
參考上面類似的方式實現使用DockerCompose部署Rabbimq。
因服務器無法連接外網,但是已經安裝了Docker,所以需要離線安裝DockerCompose,
并且先從能通外網的電腦或服務將rabbitmq的docker鏡像進行導出,然后將其導入到服務器上。
RabbiMQ
RabbitMQ是一個開源的,在AMQP基礎上完整的,可復用的企業消息系統。
支持主流的操作系統,Linux、Windows、MacOX等
多種開發語言支持,Java、Python、Ruby、.NET、PHP、C/C++、node.js等
AMQP,即 Advanced Message Queuing Protocol(高級消息隊列協議),是一個網絡協議,是應用層協議的一個開放標準,為面向消息的中間件設計。
基于此協議的客戶端與消息中間件可傳遞消息,并不受客戶端/中間件不同產品,不同的開發語言等條件的限制。2006年,AMQP 規范發布。
2007年,Rabbit 技術公司基于 AMQP 標準開發的 RabbitMQ 1.0 發布。RabbitMQ 采用 Erlang 語言開發。Erlang 語言由 Ericson 設計,專門為開發高并發和分布式系統的一種語言,在電信領域使用廣泛。
其他主流 MQ 產品
ActiveMQ:Apache 出品,最流行的,能力強勁的開源消息總線,基于 JMS(Java Message Service)規范
RocketMQ:阿里低延遲、高并發、高可用、高可靠的分布式消息中間件,基于 JMS,目前由 Apache 基金會維護
Kafka:分布式,分區的,多副本的,多訂閱者的消息發布訂閱系統(分布式 MQ 系統),可以用于搜索日志,監控日志,訪問日志等
RabbitMQ核心架構
AMQP協議模型
組件???????? 作用???????????????????????????????????????????????????????類比案例
Producer?消息生產者,通過Exchange路由消息?快遞發貨方
Exchange?接收消息并根據規則推送到Queue(類型:Direct/Topic/Fanout/Headers)?快遞分揀中心
Queue?存儲消息的緩沖區(FIFO)?快遞暫存倉庫
Consumer?消息消費者,通過訂閱Queue獲取消息?快遞收件人
Channel?復用TCP連接的輕量級通信管道(減少資源消耗)?快遞運輸的子車道
注:
博客:
霸道流氓氣質-CSDN博客
實現
CentOS上離線安裝DockerCompose
這里假定服務器上已經安裝了Docker并且需要安裝DockerCompose的2.34.0版本
首先在有網絡的機器上下載 Docker Compose 二進制文件
wget https://github.com/docker/compose/releases/download/v2.34.0/docker-compose-linux-x86_64
如果是在windows電腦上,直接訪問后面的鏈接地址下載即可
下載之后將其上傳至要安裝的服務器,執行如下指令
# 將文件移動到可執行路徑
sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose# 添加執行權限
sudo chmod +x /usr/local/bin/docker-compose# 創建符號鏈接(可選)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose# 驗證安裝
docker-compose version
CentOS上使用導出導入docker鏡像的方式離線拉取Rabbimq鏡像
在服務器上無法訪問外網,所以需要在能拉取rabbitmq鏡像的服務器上拉取鏡像并導出,然后手動上傳至
服務器上并導入鏡像
有網的機器上拉取rabbitmq鏡像
docker pull rabbitmq:3.9-management
拉取完成后然后導出鏡像
docker save -o rabbitmq_3.9-management.tar? rabbitmq:3.9-management
導出成功之后將其下載到本地,并上傳至不能通外網的服務器上
執行導入命令
docker load -i rabbitmq_3.9-management.tar
導入成功
這里需要注意在導出Docker鏡像時tar包的命名格式,如果命名格式有問題,則將其下載到本地時會顯示0B大小,無法使用。
CentOS上導出Docker鏡像時命名格式要求
關于Docker鏡像導出文件命名的詳細規范與建議
合法字符集
允許:字母(a-zA-Z)、數字(0-9)、連字符(-)、下劃線(_)、點(.)
禁止:空格、/ \ : * ? " < > |等特殊符號(可能被系統解析為路徑或通配符)
文件擴展名
建議統一使用.tar作為后綴(Docker標準格式)
若壓縮可追加.gz:rabbitmq_3.9-management.tar.gz
CentOS上使用DockerCompose實現部署Rabbitmq
在上面實現服務器上離線安裝了DockerCompose以及離線加載Rabbitmq鏡像后,在服務器上某目錄新建
docker-compose.yml文件,文件內容如下:
version: '3.8'services:rabbitmq:image: rabbitmq:3.9-managementcontainer_name: rabbitmqhostname: my-rabbitports:- "5672:5672"?? # AMQP 協議端口- "15672:15672" # 管理界面端口volumes:- ./data:/var/lib/rabbitmq- ./logs:/var/log/rabbitmqenvironment:- RABBITMQ_DEFAULT_USER=svip- RABBITMQ_DEFAULT_PASS=123456- RABBITMQ_DEFAULT_VHOST=/badaorestart: alwayshealthcheck:test: ["CMD", "rabbitmq-diagnostics", "status"]interval: 30stimeout: 10sretries: 5networks:- rabbitmq_netnetworks:rabbitmq_net:driver: bridge
配置文件關鍵內容詳解:
volumes:
作用:掛載數據卷,實現數據持久化
格式:宿主機路徑:容器內路徑
路徑說明:
/var/lib/rabbitmq:RabbitMQ的數據存儲目錄
/var/log/rabbitmq:RabbitMQ的日志目錄
environment:
作用:設置容器環境變量
變量說明:
RABBITMQ_DEFAULT_USER:默認管理員用戶名
RABBITMQ_DEFAULT_PASS:默認管理員密碼
RABBITMQ_DEFAULT_VHOST:默認虛擬主機
healthcheck:
作用:定義健康檢查機制
配置項:
test:檢查命令,rabbitmq-diagnostics status返回0表示健康
interval:檢查間隔(30秒)
timeout:單次檢查超時時間(10秒)
retries:連續失敗多少次才判定為不健康
用途:Docker可以根據健康檢查結果管理容器
注意上面配置數據卷映射,所以在yml所在目錄下新建data目錄和logs目錄,
并授予這兩個目錄權限!!!
chmod 777 -R ./datachmod?777?-R?./logs
如果不授權直接啟動,則啟動失敗,可以查看日志提示權限問題:
docker-compose logs -f rabbitmq
如果先是啟動過再授予的權限,要先將data目錄刪掉重新建立并重新授權之后再啟動。
否則會提示:
Application rabbitmq_prelaunch exited with reason: {{shutdown,{failed_to_start_child,prelaunch,{badmatch,{error,{{shutdown,{failed_to_start_child,auth,{"Cookie file /var/lib/rabbitmq/.erlang.cookie must be accessible by owner only",[{auth,init_no_setcookie,0,[{file,"auth.erl"},{line,313}]},{auth,init,1,[{file,"auth.erl"},{line,165}]},{gen_server,init_it,2,[{file,"gen_server.erl"},{line,851}]},{gen_server,init_it,6,[{file,"gen_server.erl"},{line,814}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,240}]}]}}},{child,undefined,net_sup_dynamic,{erl_distribution,start_link,[#{clean_halt => false,name => rabbit_prelaunch_19@localhost,name_domain => shortnames,net_tickintensity => 4,net_ticktime => 60,supervisor => net_sup_dynamic}]},permanent,false,1000,supervisor,[erl_distribution]}}}}}},{rabbit_prelaunch_app,start,[normal,[]]}}
這個錯誤表明 RabbitMQ 啟動失敗,原因是 .erlang.cookie 文件的權限設置不正確。
啟動 RabbitMQ 服務
# 啟動服務
docker-compose up -d# 查看運行狀態
docker-compose ps# 查看日志
docker-compose logs -f rabbitmq
此時訪問服務器的15672端口,使用上面配置的用戶名密碼登錄即可。