002 docker安装rocketmq
docker search rocketmq
#拉取镜像
docker pull foxiswho/rocketmq:server-4.3.2
docker pull foxiswho/rocketmq:broker-4.3.2
#创建nameserver容器
docker create -p 9876:9876 --name rmqserver \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-e "JAVA_OPTS=-Duser.home=/opt" \
-v /rmq/rmqserver/logs:/opt/logs \
-v /rmq/rmqserver/store:/opt/store \
foxiswho/rocketmq:server-4.3.2
#创建broker容器
docker create -p 10911:10911 -p 10909:10909 --name rmqbroker \
-e "JAVA_OPTS=-Duser.home=/opt" \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-v /rmq/rmqbroker/conf/broker.conf:/etc/rocketmq/broker.conf \
-v /rmq/rmqbroker/logs:/opt/logs \
-v /rmq/rmqbroker/store:/opt/store \
foxiswho/rocketmq:broker-4.3.2
docker inspect rmqbroker
hostname -I
这个命令会返回所有配置的网络接口的 IP 地址列表。通常,你会看到一个或多个 IP 地址。选择正确的 IP 地址,它应该是你的 CentOS 7 宿主机的内网 IP 地址
#第二种更简单的创建方式(上面那种创建方式,不是很好使)
#创建broker-server
docker run -di -p 9876:9876 --name=rmqserver \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-e "JAVA_OPTS=-Duser.home=/opt" \
foxiswho/rocketmq:server-4.5.1
#创建broker
docker run -di -p 10911:10911 -p 10909:10909 --name=rmqbroker -e "JAVA_OPTS=-Duser.home=/opt" -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" foxiswho/rocketmq:broker-4.5.1
#配置broker容器的配置文件
docker exec -it rmqbroker /bin/bash
cd /etc/rocketmq/
vi broker.conf
#配置内容
brokerIP1=172.17.0.3 #内网IP
namesrvAddr=192.168.66.66:9876
brokerName=zzz
#启动容器
docker start rmqserver rmqbroker
#停止删除容器
docker stop rmqbroker rmqserver
docker rm rmqbroker rmqserver
提供的 Docker 命令和配置中,两个 IP 地址 198.168.1.3 和 192.168.66.66 分别代表以下含义:
brokerIP1=198.168.1.3:
这个 IP 地址应该是运行 broker 容器的宿主机的内网 IP 地址。
在 RocketMQ 的配置中,brokerIP1 用于指定 broker 实例的网络地址,这样客户端和其他 broker 实例才能正确地连接到它。
你需要确保这个 IP 地址是可从你的网络中的其他机器访问的,特别是如果你希望从外部访问 broker 服务的话。
在 CentOS 7 上,你可以使用 ip addr show 或 hostname -I 命令来查找宿主机的 IP 地址,并选择一个合适的内网 IP 地址进行配置。
namesrvAddr=192.168.66.66:9876:
这个 IP 地址和端口号指定了 nameserver 服务的地址。
在 RocketMQ 的配置中,namesrvAddr 用于告诉 broker 实例 nameserver 的位置,这样 broker 才能注册自己并发现其他 broker 实例。
这个地址应该是运行 nameserver 容器的宿主机的 IP 地址,以及 nameserver 容器内部监听的端口(在这个例子中是 9876),并且这个端口已经被映射到了宿主机的相同端口上。
由于你已经使用 Docker 运行了 nameserver 容器,并且使用了 -p 9876:9876 参数将容器的 9876 端口映射到了宿主机的 9876 端口,因此 192.168.66.66:9876 应该是运行 nameserver 容器的宿主机的 IP 地址和端口号。
在你的 docker ps 输出中,你可以看到两个容器都在运行,并且它们的端口已经被正确地映射到了宿主机的端口上。这意味着你应该能够从宿主机的网络环境中访问这些服务。
rmqserver 容器(nameserver)的 9876 端口被映射到了宿主机的 9876 端口。
rmqbroker 容器(broker)的 10909 和 10911 端口被映射到了宿主机的相同端口上。
请确保你配置的 IP 地址 198.168.1.3 和 192.168.66.66 是正确的,并且这些地址在你的网络中是可达的。如果这些地址是示例地址,并且不是你实际网络中的地址,请替换为你实际的宿主机 IP 地址。
另外,请注意,如果你的 Docker 容器和宿主机位于不同的网络命名空间中(例如,使用了 Docker 的桥接网络或自定义网络),你可能需要使用 Docker 网络提供的服务发现机制或配置路由来确保容器之间以及容器与宿主机之间的网络通信。但是,在你的情况下,由于你已经使用了端口映射,通常不需要额外的网络配置就可以从宿主机访问容器服务。
在 Docker 中,容器默认会使用 Docker 引擎创建的虚拟网络(如桥接网络)。每个容器在这个虚拟网络中都会被分配一个唯一的 IP 地址。
但是,当你使用 -p 参数将容器的端口映射到宿主机的端口时,你实际上是在设置 NAT(网络地址转换),允许从宿主机网络访问容器内的服务。此时,容器的 IP 地址在宿主机外部是不可见的,访问是通过宿主机的 IP 地址和映射的端口进行的。
然而,在容器内部配置 brokerIP1 和 namesrvAddr 时,你通常需要使用宿主机的实际 IP 地址(或可以从容器网络中访问到的宿主机 IP 地址),因为这些配置是用于容器之间的通信。
两个 IP 地址 198.168.1.3 和 192.168.66.66 的不同是因为它们代表了不同的网络实体(可能是不同的宿主机)或不同的网络接口/子网。在配置 RocketMQ 时,需要确保这些地址是正确的,并且与你的网络环境和 Docker 容器的配置相匹配。
在你提供的 ifconfig 输出中,列出了 CentOS 7 宿主机上的多个网络接口,包括 Docker 的虚拟网桥 docker0 和其他物理或虚拟接口如 eth0、lo 以及一些虚拟以太网接口(veth)。
为了确定运行 RocketMQ 容器时应该使用的两个 IP 地址(一个用于 nameserver,一个用于 broker),我们需要考虑以下几点:
宿主机外部访问:
如果你的 RocketMQ 集群需要从宿主机外部访问,那么你应该使用宿主机的公共 IP 地址或可从外部访问的内网 IP 地址。
但是,请注意,直接暴露 RocketMQ 服务到公网可能带来安全风险,因此通常建议使用防火墙、VPN 或其他安全措施。
容器间通信:
如果 RocketMQ 的 nameserver 和 broker 容器只需要在宿主机内部或 Docker 网络内部通信,那么你可以使用 Docker 网络的内部 IP 地址。
在你的情况下,docker0 网桥的 IP 地址范围是 173.17.0.0/16,但容器通常会被分配这个子网内的动态 IP 地址,这些地址在容器重启时可能会改变。
静态 IP 配置:
为了确保容器间通信的稳定性和可预测性,你可以在 Docker 网络中为容器配置静态 IP 地址。
这通常涉及到创建自定义的 Docker 网络,并在运行容器时使用 --ip 参数指定 IP 地址。
使用宿主机的 IP 地址:
在大多数情况下,为了简化配置和避免 Docker 网络带来的复杂性,人们会选择使用宿主机的 IP 地址来配置 RocketMQ 的 namesrvAddr 和 brokerIP1。
在你的 ifconfig 输出中,eth0 接口的 IP 地址 看起来是一个合适的候选者,因为它是宿主机上的一个物理或虚拟网络接口,并且很可能在你的网络中是可达的。
基于以上分析,如果你打算使用宿主机的 IP 地址来配置 RocketMQ,并且你的 eth0 接口是连接到你的内部网络或互联网的接口,那么你可以:
将 namesrvAddr 配置为 192.168.33.1:9876(假设 nameserver 容器在宿主机的 9876 端口上监听)。
将 brokerIP1 也配置为192.168.33.1(或宿主机上的其他可达 IP 地址),但请注意,brokerIP1 通常不需要指定端口号,因为它是用于标识 broker 实例的网络地址。
然而,请确保这些配置与你的网络环境和安全策略相符。如果你有特定的网络要求或安全考虑,请相应地调整这些配置。
docker stop rmqserver rmqbroker