背景

目前在dockerhub仓库中,Apache官方提供的Dubbo Admin镜像只有2tag0.1.0latest,我在测试的过程中发现这两个官方镜像都存在问题,运行环境是:Spring Boot 2.2.0 + Dubbo 2.7.3,即使按照 https://github.com/apache/dubbo-admin/issues/342 进行配置后前端页面还是不展示微服务的元数据。

于是我克隆了Dubbo Admin源码并在本地IDEA中启动,元数据又正常展示了。猜测是最新的develop分支修复了某些问题。

修改配置

按照Dubbo Admin的配置说明,需要在Zookeeper中添加一个节点/dubbo/config/dubbo/dubbo.properties,其内容为:

1
2
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.metadata-report.address=zookeeper://127.0.0.1:2181

这一步目前来看是需要手动操作的,参考 https://github.com/apache/dubbo-admin/issues/342 我们可以修改dubbo-admin-server源码让其进行自动配置。

修改org.apache.dubbo.admin.config.ConfigCenter类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
...

@Configuration
public class ConfigCenter implements InitializingBean {

@Value("${admin.registry.address:}")
private String registryAddress;

@Value("${admin.metadata-report.address:}")
private String metadataAddress;

...

private static final String PREFIX = "zookeeper://";

@Override
public void afterPropertiesSet() throws Exception {
logger.info("dubbo-admin#ConfigCenter start. In afterPropertiesSet method registryAddress=" + registryAddress);
if (!registryAddress.startsWith(PREFIX)) {
return;
}
String connectString = registryAddress.substring(PREFIX.length());
CuratorFramework zkClient = CuratorFrameworkFactory.builder()
.connectString(connectString)
.retryPolicy(new ExponentialBackoffRetry(1000, 3))
.build();
zkClient.start();

if (zkClient.checkExists().forPath("/dubbo/config/dubbo/dubbo.properties") == null) {
zkClient.create()
.creatingParentsIfNeeded()
.forPath("/dubbo/config/dubbo/dubbo.properties");
}
zkClient.setData()
.forPath(
"/dubbo/config/dubbo/dubbo.properties",
("dubbo.registry.address=" + registryAddress + "\ndubbo.metadata-report.address=" + metadataAddress).getBytes()
);
logger.info("dubbo-admin#ConfigCenter afterPropertiesSet process end.");
}

...

}

我们可以在启动参数中传入registryAddressmetadataAddress从而动态写入Zookeeper中。

maven打包

接下来我们对dubbo-admin-server模块进行打包:mvn package。执行成功后可在/dubbo-admin-server/target目录中看到打好的dubbo-admin-server-0.3.0-SNAPSHOT.jar包,此jar包已经包含了dubbo-admin-ui模块编译之后的dist静态文件,本地可直接java -jar dubbo-admin-server-0.3.0-SNAPSHOT.jar启动。启动成功后访问http://127.0.0.1:8080可查看控制台。

制作Docker镜像

编写Dockerfile

进入工作目录编写Dockerfile文件

1
2
3
> cd /opt/images/dubbo-admin
> touch Dockerfile
> vim Dockerfile

Dockerfile文件内容如下:

1
2
3
4
5
6
FROM openjdk:8
MAINTAINER SunChaser <admin@lilu.org.cn>
COPY *.jar /app.jar
CMD ["--server.prot=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

上传jar包至Dockerfile同级目录。

如果是云服务器,可使用命令上传文件:scp -r /path/dubbo-admin-server-0.3.0-SNAPSHOT.jar root@ip:/opt/images/dubbo-admin

制作镜像并推送

制作镜像:docker build -t sunchaserlilu/dubbo-admin:2021.0.0 .

由于要推送至官方dockerhub仓库,镜像命名需要遵循一定规则:用户名/镜像名:tag

注意命令最后面有一个小数点.

登录docker推送镜像至dockerhub仓库:

1
2
> docker login #输入正确的用户名和密码
> docker push sunchaserlilu/dubbo-admin:2021.0.0

推送会有一点慢,请耐心等待推送完成,然后就可以在 https://hub.docker.com/ 上搜索到我们刚才推送的镜像了。