docker容器安装部署rocketmq

  • docker拉取rcketmq镜像
  • 运行中可能出现的问题


docker拉取rcketmq镜像

1、搜索rocketmq镜像

docker search rocketmq

2、拉取镜像

docker pull rocketmqinc/rocketmq

3、创建挂载文件目录

mkdir -p /docker/rocketmq/nameserver/logs /docker/rocketmq/nameserver/store

4、创建namesrv(需要加权的话前面加个sudo,无需挂载目录可以将 -v 参数去掉)

docker run -d --restart=always --name rmqnamesrv --privileged=true -p 9876:9876  -v /docker/rocketmq/nameserver/logs:/root/logs -v /docker/rocketmq/nameserver/store:/root/store -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq sh mqnamesrv

参数说明:

-d	以守护进程的方式启动
    --restart=always	docker重启时候容器自动重启
    --name rmqnamesrv	把容器的名字设置为rmqnamesrv 		-p 9876:9876	把容器内的端口9876挂载到宿主机9876上面 		
    -v  /docker/rocketmq/nameserver/logs:/root/logs	目录挂载 		
    -v  /docker/rocketmq/nameserver/store	目录挂载 		rmqnamesrv	容器的名字 		
    -e  “MAX_POSSIBLE_HEAP=100000000”	设置容器的最大堆内存为100000000
    rocketmqinc/rocketmq	使用的镜像名称 		sh mqnamesrv	启动namesrv服务

4、创建broker

docker run  --restart=always --name rmqbroker --link rmqnamesrv:namesrv -p 10911:10911 -p 10909:10909 --privileged=true -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" -itd  rocketmqinc/rocketmq sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
参数说明:
	-itd	 it使用交互式方式运行 d后台运行
	--restart=always	docker重启时候容器自动重启
	--name rmqbroker	把容器的名字设置为rmqbroker
	--link rmqnamesrv:namesrv	和rmqnamesrv容器通信
	-p 9876:9876	把容器内的端口9876挂载到宿主机9876上面
	-p 10909:10909	把容器的vip通道端口挂载到宿主机
	-e “NAMESRV_ADDR=namesrv:9876”	指定namesrv的地址为本机namesrv的ip地址:9876
	-e “MAX_POSSIBLE_HEAP=200000000” rocketmqinc/rocketmq sh mqbroker	指定broker服务的最大堆内存
	rocketmqinc/rocketmq	使用的镜像名称
	sh mqbroker -c /opt/docker/rocketmq/broker.conf	指定配置文件启动broker节点

这样就可以连接了
broker.conf 配置文件(文件位置:容器内 /opt/rocketmq/conf/broker.conf)里需加入一个配置 : autoCreateTopicEnable = true 这样才会自动创建topic

运行中可能出现的问题

1、我在创建broker创建namesrv和broker的时候没有进行目录挂载,如果有失败的可以把目录挂载去掉然后通过如下命令将文件复制到容器中
#从宿主机复制文件到容器(前面宿主机,后面为容器 centos为容器名)

sudo docker cp 目录/文件 centos:目录

#从容器复制文件到宿主机(前面容器,后面为宿主机 centos为容器名)

sudo docker cp centos:目录/文件 目录

2、我们使用docker exec -it /bin/bash 命令进入broker容器内时可能会出现如下错误:

Error response from daemon: Container XXX is restarting, wait until the container is running

我使用 docker logs 容器id 打印日志并没有打印出来什么,猜测可能是一直在循环启动(具体原因未知,没有进行排查) 就把启动容器命令中的 --restart=always 自动重启给去掉了,再次运行成功