CentOS中离线安装DockerCompos并用其部署Rabbitmq(使用离线导入导出docker镜像方式)

场景

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-management
    container_name: rabbitmq
    hostname: my-rabbit
    ports:
      - "5672:5672"   # AMQP 协议端口
      - "15672:15672" # 管理界面端口
    volumes:
      - ./data:/var/lib/rabbitmq
      - ./logs:/var/log/rabbitmq
    environment:
      - RABBITMQ_DEFAULT_USER=svip
      - RABBITMQ_DEFAULT_PASS=123456
      - RABBITMQ_DEFAULT_VHOST=/badao
    restart: always
    healthcheck:
      test: ["CMD", "rabbitmq-diagnostics", "status"]
      interval: 30s
      timeout: 10s
      retries: 5
    networks:
      - rabbitmq_net

networks:
  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 ./data

chmod 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](mailto: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端口,使用上面配置的用户名密码登录即可。

相关推荐
卷无止境39 分钟前
Windows 上丝滑开发 Python,并稳定构建 Docker 镜像
后端·python·docker
阿无,5 小时前
RabbitMQ面试题
分布式·rabbitmq
吕海洋5 小时前
目前可用的docker源2026.08
运维·docker·容器
gsls2008087 小时前
Penpot Docker 部署与 MCP 服务配置文档
运维·docker·容器·原型·penpot
xrlfreedom8 小时前
大厂 MCP 面试实录:本地 Server 远程化改造中的技术选型与落地实践
docker·json schema·mcp
艾伦_耶格宇12 小时前
【DOCKER容器实战】-2MySQL
运维·docker·容器
禅口魔心13 小时前
RK3576开发——Docker部署
docker·嵌入式linux
随便做点啥14 小时前
32卡×4090 24GB,Qwen3.8-27B-FP8 集群部署报告
服务器·经验分享·docker·vllm
To_OC1 天前
跑了3个Docker容器后,我终于搞懂镜像和容器到底啥关系
后端·docker·容器
tryCbest1 天前
Docker 从零到精通:知识与跨平台使用指南
docker·容器