Dubbo 部署到 Docker 环境
将 Dubbo 部署到 Docker 环境
一些部署场景需要动态指定服务注册的地址。例如,docker bridge 网络模式需要为外部网络通信指定注册主机 IP。Dubbo 在启动阶段提供了两对系统属性,用于设置外部通信的 IP 和端口地址。
- DUBBO_IP_TO_REGISTRY — 注册到注册中心的 IP 地址
- DUBBO_PORT_TO_REGISTRY — 注册到注册中心的端口
- DUBBO_IP_TO_BIND — 监听 IP 地址
- DUBBO_PORT_TO_BIND — 监听端口
- 以上四种配置为可选配置。如果没有配置,Dubbo 会自动获取 IP 和端口。请根据部署场景灵活选择。
- Dubbo 支持多协议。**如果一个应用程序同时暴露多个不同的协议服务,并且需要为每个服务分别指定 IP 或端口。请在上述属性之前分别添加协议前缀。** 例如
- HESSIAN_DUBBO_PORT_TO_BIND hessian 协议绑定端口
- DUBBO_DUBBO_PORT_TO_BIND dubbo 协议绑定端口
- HESSIAN_DUBBO_IP_TO_REGISTRY hessian 协议注册的 IP
- DUBBO_DUBBO_IP_TO_REGISTRY dubbo 协议注册的 IP
PORT_TO_REGISTRY
或IP_TO_REGISTRY
不会用作默认的PORT_TO_BIND
或IP_TO_BIND
,但反之则成立。
- 如果设置
PORT_TO_REGISTRY=20881
IP_TO_REGISTRY=30.5.97.6
,那么PORT_TO_BIND
IP_TO_BIND
不会受到影响。- 如果设置
PORT_TO_BIND=20881
IP_TO_BIND=30.5.97.6
,那么默认情况下PORT_TO_REGISTRY=20881
IP_TO_REGISTRY=30.5.97.6
。
dubbo-docker-sample 本地操作流程:
- 将项目克隆到本地
git clone git@github.com:dubbo/dubbo-docker-sample.git
cd dubbo-docker-sample
- 打包本地 maven
mvn clean install
- 通过 docker build 构建镜像
docker build --no-cache -t dubbo-docker-sample .
Dockerfile
FROM openjdk:8-jdk-alpine
ADD target/dubbo-docker-sample-0.0.1-SNAPSHOT.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT exec java $JAVA_OPTS -jar /app.jar
- 从镜像创建和运行容器
# Since we use the zk registration center, we start zk container first
docker run --name zkserver --restart always -d zookeeper:3.4.9
docker run -e DUBBO_IP_TO_REGISTRY=30.5.97.6 -e DUBBO_PORT_TO_REGISTRY=20881 -p 30.5.97.6:20881:20880 --link zkserver:zkserver -it --rm dubbo-docker-sample
假设主机 IP 为 30.5.97.6。通过环境变量
DUBBO_IP_TO_REGISTRY=30.5.97.6
DUBBO_PORT_TO_REGISTRY=20881
设置 provider 注册到注册中心的 IP 地址和端口 通过-p 30.5.97.6:20881:20880
实现端口映射,其中 20880 是 dubbo 自动选择的监听端口。没有监控 IP 配置,因此它将监听 0.0.0.0(所有 IP)。启动后,provider 的注册地址为 30.5.97.6:20881,容器的监听地址为:0.0.0.0:20880
- 从另一个主机或容器测试执行
telnet 30.5.97.6 20881
ls
invoke org.apache.dubbo.test.docker.DemoService.hello("world")
上次修改时间:2023 年 1 月 28 日:更新 Docker.md (#1959) (a296a74687e)