linux利用docker快速启动rocketmq,并配置用户名和密码
安装rocketmq
你可以通过Docker启动RocketMQ,以下是详细步骤:
1. 获取RocketMQ Docker镜像
首先,从Docker Hub获取官方的RocketMQ镜像:
docker pull apache/rocketmq:4.9.3
你可以根据需要选择不同版本的RocketMQ镜像。
2. 启动NameServer容器
RocketMQ的NameServer负责注册服务,首先启动它:
docker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:4.9.3 sh mqnamesrv
--name rmqnamesrv
:为容器命名-p 9876:9876
:映射NameServer的端口,外部通过9876访问apache/rocketmq:4.9.3
:使用RocketMQ镜像sh mqnamesrv
指定运行的命令。当容器启动时,它会在容器内执行sh mqnamesrv
命令,这个命令会启动RocketMQ的NameServer服务。mqnamesrv
是RocketMQ NameServer的启动脚本。
3. 启动Broker容器
然后,启动Broker(消息中间件的核心):
docker run -d --name rmqbroker
--link rmqnamesrv:namesrv
-p 10911:10911 -p 10909:10909 -p 10912:10912
-e "NAMESRV_ADDR=namesrv:9876"
-e "JAVA_OPT_EXT=-server -Xms512M -Xmx512M -Xmn256m"
apache/rocketmq:4.9.3 sh mqbroker
--link rmqnamesrv:namesrv
:将NameServer容器连接到Broker容器-p 10911:10911
:用于客户端/服务器传输的端口-p 10909:10909
:用于外部服务的端口-e "NAMESRV_ADDR=namesrv:9876"
:指定NameServer的地址-e "JAVA_OPT_EXT=-server -Xms512M -Xmx512M -Xmn256m"
:设置Java虚拟机参数
4. 验证RocketMQ运行状态
通过以下命令检查容器是否正常运行:
docker ps
5. 访问RocketMQ
如果需要访问RocketMQ的控制台,可以使用一个RocketMQ控制台的Docker镜像:
docker run -d -p 8080:8080 --name rmqconsole
--link rmqnamesrv:namesrv
-e "NAMESRV_ADDR=namesrv:9876"
styletang/rocketmq-console-ng
--link rmqnamesrv:namesrv
将当前容器与另一个名为rmqnamesrv
的容器进行连接,并且在当前容器内部为这个连接的NameServer容器起一个别名namesrv
。
这样,在rmqconsole
容器内可以通过namesrv
来访问NameServer的服务。
-e "NAMESRV_ADDR=namesrv:9876"
使用环境变量NAMESRV_ADDR
来指定NameServer的地址。在当前容器中,namesrv
指代的是通过--link
链接的NameServer容器,而NameServer的端口是9876。因此,控制台需要通过namesrv:9876
与NameServer进行通信。
styletang/rocketmq-console-ng
使用styletang/rocketmq-console-ng
这个镜像,该镜像是RocketMQ的管理控制台,用于通过Web界面监控、管理RocketMQ的消息队列。
这会启动控制台,可以通过浏览器访问http://
。
这样你就可以通过Docker在Linux上启动并运行RocketMQ了。
我这样安装了之后,rocketmq.access-key和rocketmq.secret-key是什么
我想启动ACL列表,我是按你上面给的docker命令来的,我现在应该怎么补充
如果你是按我之前提供的Docker命令来启动RocketMQ,并且现在想启用access-key
和secret-key
进行身份验证,步骤如下:
在RocketMQ中,access-key
和 secret-key
是用于身份验证和授权的访问凭证。这些凭证用于确保客户端在与RocketMQ服务交互时具备适当的权限。这种机制主要在开启了**ACL(访问控制列表)**功能时使用。
默认情况下,RocketMQ不会启用ACL,也就是不需要access-key
和secret-key
。但如果你希望加强安全性,尤其是在生产环境中,可以通过启用ACL来限制哪些用户可以发布或消费消息。
1. 创建ACL配置文件
由于你是通过Docker启动的RocketMQ,需要在Broker容器中配置ACL。首先,你需要为Broker配置plain_acl.yml
文件。
可以按照以下步骤操作:
方法 1: 修改本地文件并挂载到Docker容器中
你可以在宿主机(虚拟机)的某个目录下创建plain_acl.yml
文件,并通过Docker挂载这个文件到容器中。
文件内容:
在宿主机上,创建一个目录(例如/path/to/rocketmq/conf
),然后在该目录下创建plain_acl.yml
文件:
accounts:
- accessKey: myAccessKey
secretKey: mySecretKey
whiteRemoteAddress: "192.168.*.*"
admin: false
defaultTopicPerm: DENY
defaultGroupPerm: DENY
topicPerms:
- topicA=PUB|SUB
groupPerms:
- groupA=PUB|SUB
accessKey
:用户的访问凭证,类似于用户名。secretKey
:用户的安全密钥,类似于密码。whiteRemoteAddress
:允许的IP地址范围。topicPerms
:指定该用户对哪些Topic有发布(PUB)或订阅(SUB)的权限。groupPerms
:指定该用户对哪些消费组(Group)有权限。
修改Docker命令挂载配置文件:
在启动RocketMQ Broker时,增加挂载本地ACL配置文件的参数。
你可以重新启动RocketMQ Broker容器并挂载配置文件:
docker run -d --name rmqbroker
--link rmqnamesrv:namesrv
-p 10911:10911 -p 10909:10909 -p 10912:10912
-e "NAMESRV_ADDR=namesrv:9876"
-e "JAVA_OPT_EXT=-server -Xms512M -Xmx512M -Xmn256m"
-v /path/to/rocketmq/conf/plain_acl.yml:/opt/rocketmq-4.9.3/conf/plain_acl.yml
apache/rocketmq:4.9.3 sh mqbroker
在这条命令中:
-v /path/to/rocketmq/conf/plain_acl.yml:/opt/rocketmq-4.9.3/conf/plain_acl.yml
:将宿主机上的plain_acl.yml
文件挂载到Docker容器中。
方法 2: 进入容器内修改配置文件
你也可以进入Docker容器内,直接修改RocketMQ的plain_acl.yml
文件。
进入Broker容器:
docker exec -it rmqbroker /bin/bash
创建并编辑plain_acl.yml
文件:
在容器内,创建或修改配置文件(通常位于/opt/rocketmq-4.9.3/conf/plain_acl.yml
):
cd /opt/rocketmq-4.9.3/conf
vi plain_acl.yml
按照上面提供的格式进行编辑保存。
2. 修改控制台配置
你需要让RocketMQ的控制台也使用access-key
和secret-key
来进行访问。
重新启动RocketMQ控制台容器时,设置环境变量来指定身份验证信息:
docker run -d -p 8080:8080 --name rmqconsole
--link rmqnamesrv:namesrv
-e "NAMESRV_ADDR=namesrv:9876"
-e "rocketmq.config.accessKey=myAccessKey"
-e "rocketmq.config.secretKey=mySecretKey"
styletang/rocketmq-console-ng
3. 客户端配置
你的客户端(生产者或消费者)在连接RocketMQ时需要指定access-key
和secret-key
。例如,在Java代码中使用:
DefaultMQProducer producer = new DefaultMQProducer("producerGroup");
producer.setNamesrvAddr("localhost:9876");
producer.setAccessKey("myAccessKey");
producer.setSecretKey("mySecretKey");
producer.start();
4. 验证ACL
确保你已经正确启用了ACL功能,客户端提供正确的access-key
和secret-key
后,才能发布和消费消息。
这样你就可以在Docker环境下启用RocketMQ的access-key
和secret-key
进行身份验证了。
- 如果你没有特别配置ACL,那么RocketMQ不会强制要求
access-key
和secret-key
。 - 如果你开启了ACL,
access-key
和secret-key
需要手动在ACL配置文件中定义。
如果你刚安装了RocketMQ,且没有显式启用ACL,那么你不需要关心access-key
和secret-key
。
linux关机后再开机,需要重新启动
当你已经创建并运行了容器之后,如果只是停止了这些容器(例如关闭虚拟机),你不需要再次使用docker run
来启动它们。因为docker run
的作用是创建并启动新的容器,而你已经有了这些容器。
要再次启动已经创建的容器,应该使用docker start
命令。
启动已经存在的容器
使用 docker start
启动已存在的容器(包括你之前创建的NameServer、Broker和Console容器):
启动NameServer容器
docker start rmqnamesrv
启动Broker容器
docker start rmqbroker
启动Console容器
docker start rmqconsole
检查容器状态
你可以使用以下命令查看Docker中所有容器的状态,包括正在运行的和已停止的:
docker ps -a
- 如果容器处于
Exited
状态,说明它已经停止,可以使用docker start
来重新启动。 - 如果容器处于
Up
状态,说明它已经在运行。
docker run
vs docker start
docker run
:用于创建并启动一个新的容器。当你使用docker run
时,它会创建一个全新的容器实例,甚至如果容器名重复,会报错说该名字已存在。docker start
:用于启动已经创建的容器,这个容器可能是因为虚拟机关闭、手动停止等原因退出的。
因此,如果你已经创建了RocketMQ的容器,那么下次你只需要使用docker start <容器名>
来重新启动,而不必重新使用docker run
来创建新容器。