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 — 监听端口
  1. 以上四种配置为可选配置。如果没有配置,Dubbo 会自动获取 IP 和端口。请根据部署场景灵活选择。
  2. 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
  1. PORT_TO_REGISTRYIP_TO_REGISTRY 不会用作默认的 PORT_TO_BINDIP_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 本地操作流程:

  1. 将项目克隆到本地
git clone git@github.com:dubbo/dubbo-docker-sample.git
cd dubbo-docker-sample
  1. 打包本地 maven
mvn clean install
  1. 通过 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
  1. 从镜像创建和运行容器
# 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 

  1. 从另一个主机或容器测试执行
telnet 30.5.97.6 20881
ls
invoke org.apache.dubbo.test.docker.DemoService.hello("world")

上次修改时间:2023 年 1 月 28 日:更新 Docker.md (#1959) (a296a74687e)