將 Dubbo 部署到 Docker 環境

將 Dubbo 部署到 Docker 環境

某些部署情境需要動態指定服務註冊的地址。例如,Docker 橋接網路模式需要指定一個註冊主機 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。設定 provider 使用環境變數 DUBBO_IP_TO_REGISTRY=30.5.97.6DUBBO_PORT_TO_REGISTRY=20881 來註冊到註冊中心的 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)