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

相关推荐
神奇侠20243 小时前
快速入手K8s+Docker+KubeSphere+DevOps
docker·kubernetes·devops
帽儿山的枪手4 小时前
通过网络命名空间实现网络分流的思想及方法
网络协议·docker·dns
ronshi4 小时前
docker 多主机容器组网
docker·多主机容器组网
小码过河.6 小时前
CentOS 安装 Docker
linux·docker·centos
laimaxgg9 小时前
Dockerfile
linux·运维·服务器·ubuntu·docker
与passion共存9 小时前
Linux系统下Docker安装
linux·docker
西伯利亚猹9 小时前
Windows系统docker desktop安装(学习记录)
运维·docker·容器
LCY13310 小时前
centOS 安装和配置docker
linux·docker·centos
遇见火星11 小时前
基于Docker容器的CICD项目Jenkins/gitlab/harbor/Maven实战
docker·容器·gitlab·jenkins·maven·harbor·cicd
老友@14 小时前
RabbitMQ 深度解析:从基础到高级应用的全面指南
运维·分布式·rabbitmq