將 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 — 監聽埠號
- 以上四個配置是可選的。如果沒有配置,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。設定 provider 使用環境變數
DUBBO_IP_TO_REGISTRY=30.5.97.6
和DUBBO_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
- 從另一台主機或容器執行測試
telnet 30.5.97.6 20881
ls
invoke org.apache.dubbo.test.docker.DemoService.hello("world")
最後修改日期:2023 年 1 月 28 日:更新 Docker.md (#1959) (a296a74687e)