构建并运行本地服务容器
本教程将本地构建的 Linux 二进制封装到仓库的社区运行时镜像。采用 Linux host 网络运行一个 NameServer 和一个 Broker,所有监听器只绑定环回地址。这是开发拓扑,不包含副本故障切换或公开监听器 。
使用具备 Rust、仓库构建前提及 Docker 的 Linux 主机或 Linux 虚拟机。客户端也在同一台 Linux 主机运行。Windows 原生二进制不能在 Linux 镜像中执行,本教程也不假设 Docker Desktop 的 host 网络行为。Windows 原生体验请使用源码本地部署。
选择镜像路径
| 资产 | 行为 |
|---|---|
distribution/container/core-service.Dockerfile | 将指定二进制和配置复制进 distroless 运行时,不编译 Rust |
docker/Dockerfile.base | 包含服务及独立测试驱动的多阶段构建/运行目标 |
| Core Helm chart 镜像 values | 需要填入实际可用制品的引用;默认标签不证明远端仓库可用 |
以下命令使用第一条路径。二进制 CPU 架构、动态库要求必须与所选 distroless 运行时匹配。主机编译成功本身不能证明容器可以启动。
构建二进制及最小上下文
在 Linux 的仓库根目录执行:
cargo build --release -p rocketmq-namesrv --bin rocketmq-namesrv-rust
cargo build --release -p rocketmq-broker --bin rocketmq-broker-rust
mkdir -p .rocketmq-container-demo/context
cp distribution/container/core-service.Dockerfile .rocketmq-container-demo/context/Dockerfile
cp LICENSE-APACHE NOTICE .rocketmq-container-demo/context/
cp target/release/rocketmq-namesrv-rust target/release/rocketmq-broker-rust .rocketmq-container-demo/context/
cp rocketmq-website/examples/first-message/namesrv.toml .rocketmq-container-demo/context/
cp rocketmq-website/examples/first-message/broker.toml .rocketmq-container-demo/context/
docker build -f .rocketmq-container-demo/context/Dockerfile \
--build-arg SERVICE=namesrv --build-arg BINARY=rocketmq-namesrv-rust \
--build-arg CONFIG=namesrv.toml -t rocketmq-docs/namesrv:local .rocketmq-container-demo/context
docker build -f .rocketmq-container-demo/context/Dockerfile \
--build-arg SERVICE=broker --build-arg BINARY=rocketmq-broker-rust \
--build-arg CONFIG=broker.toml -t rocketmq-docs/broker:local .rocketmq-container-demo/context
这里有意使用独立构建上下文:仓库根 .dockerignore 排除了 target/。两个镜像都以 UID/GID 10001:10001 运行指定程序,默认配置在 /etc/rocketmq/service.toml,工作目录为 /var/lib/rocketmq。镜像不包含用于交互修复命令的 shell。