容器化部署的核心是通过Docker封装消息服务(如RocketMQ、RabbitMQ),实现快速部署、环境隔离和可移植性。以下是具体步骤:
容器化部署需依赖Docker(容器引擎)和Docker Compose(多容器编排工具),安装步骤如下:
安装Docker
更新系统软件包并安装依赖:
sudo yum update -y sudo yum install -y yum-utils device-mapper-persistent-data lvm2 添加Docker官方仓库并安装Docker CE(社区版):
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io 启动Docker服务并设置开机自启:
sudo systemctl start docker sudo systemctl enable docker 验证安装:
docker --version # 输出Docker版本信息即成功 安装Docker Compose
下载最新版Docker Compose二进制文件并赋予执行权限:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose 验证安装:
docker-compose --version # 输出Compose版本信息即成功 以RocketMQ(分布式消息中间件)为例,通过docker-compose.yml定义Broker(消息中转)、Namesrv(命名服务)和Web控制台三个服务,实现一键部署:
version: '3' services: namesrv: # 命名服务(RocketMQ核心组件,负责Topic路由) image: apache/rocketmq:4.9.3 # 使用官方镜像 container_name: rocket-namesrv command: sh mqnamesrv # 启动命名服务命令 ports: - "9876:9876" # 命名服务默认端口 volumes: - ./data/namesrv/logs:/home/rocketmq/logs # 持久化日志 broker: # 消息中转服务(负责消息存储、转发) image: apache/rocketmq:4.9.3 container_name: rocket-broker command: sh mqbroker -n namesrv:9876 # 连接命名服务 ports: - "10909:10909" # Broker默认端口 - "10911:10911" # Broker数据端口 volumes: - ./data/broker/logs:/home/rocketmq/logs - ./data/broker/store:/home/rocketmq/store - ./conf/broker.conf:/home/rocketmq/conf/broker.conf # 自定义配置文件 depends_on: - namesrv # 依赖命名服务,确保先启动 console: # Web管理控制台(可视化操作) image: styletang/rocketmq-console-ng container_name: rocket-console ports: - "8100:8080" # 控制台默认端口 environment: JAVA_OPTS: "-Drocketmq.namesrv.addr=namesrv:9876" # 指向命名服务地址 depends_on: - namesrv 若需修改RocketMQ的Broker配置(如Broker名称、集群模式),可创建conf/broker.conf文件,内容示例:
brokerClusterName=DefaultCluster # 集群名称 brokerName=broker-a # Broker名称 brokerId=0 # Broker ID(0表示Master,大于0表示Slave) deleteWhen=04 # 删除过期消息的时间点(04表示凌晨4点) fileReservedTime=48 # 消息存储保留时间(小时) brokerRole=ASYNC_MASTER # Broker角色(ASYNC_MASTER异步复制,SYNC_MASTER同步复制) flushDiskType=ASYNC_FLUSH # 刷盘方式(ASYNC_FLUSH异步刷盘,SYNC_FLUSH同步刷盘) autoCreateTopicEnable=true # 允许自动创建Topic(生产环境建议设为false) 在docker-compose.yml所在目录下,执行以下命令启动所有服务:
docker-compose up -d # 后台运行,输出日志可通过`docker-compose logs -f`查看 验证服务状态:
docker-compose ps # 查看所有容器状态(STATUS应为"Up") http://宿主机IP:8100,输入默认账号(admin)和密码(admin),即可查看Topic、生产者、消费者等信息。apache/rocketmq),避免第三方镜像的安全风险。volumes将容器内的日志、存储目录映射到宿主机,防止容器重启后数据丢失。通过以上步骤,即可在CentOS环境下实现消息服务(如RocketMQ)的容器化部署,快速搭建高可用的分布式消息系统。