前言
- 阅读前提:大致了解skywalking以及docker基础知识。
- 关于skywalking是什么,自行搜索吧。标题里面写的是skywalking的6.0 alpha版本( 正式版本还没出)。为什么选择6.0a是因为他支持undertow 2.0的版本,我这里spring boot的运行容器是undertow,而5.0的版本不支持。所以具体选择什么版本,要根据自己的运行环境来定,当然目前的6.0也不是稳定版(skywalking的support list)。目前我也不打算上生产环境。
- 其实本身skywalking的部署是比较简单的,如果不是集群模式,只需要运行sh startup.sh就行了,之后部署服务的agent。所以如果你不打算用docker部署的话,也不用看这篇文章,因为侧重点在docker。
- 因为skywalking并没有发布任何官方镜像在doker hub,倒是有私人的镜像,如果直接拿来用,也只能部署在本机玩玩看。
说正事吧
- skywalking的架构大致分为三块(我只是粗略理解):
- agent:此模块跟你的app集成在一起,收集app的信息,然后发送到collector
- oap:主要处理agent发来的消息,并持久化到存储层(官方推荐elasticsearch来做存储)。
- ui层当然就是展现收集来的信息了。
所以我制作docker image的时候,把skywalking分成两块,一块是oap,一块是ui。
- 制作镜像:
- 去github官网下载master分支代码,进入到docker分支,可以看到ui和oap两个目录,然后再去官网下载skywalking 6.0a的版本下载压缩包,改名为apache-skywalking-apm-incubating.tar.gz,然后分别放到上面所说的两个目录中。如图所示,ui里面的web.yml 改为webapp.yml

- 先看oap的dockerfile
FROM openjdk:8-jre-alpine
ENV DIST_NAME=apache-skywalking-apm-incubating \
JAVA_OPTS=" -Xms256M -Xmx512M"
# Install required packages
RUN apk add --no-cache \
bash
COPY "$DIST_NAME.tar.gz" /
RUN set -ex; \
tar -xzf "$DIST_NAME.tar.gz"; \
rm -rf "$DIST_NAME.tar.gz"; rm -rf "$DIST_NAME/config/log4j2.xml"; \
rm -rf "$DIST_NAME/bin"; rm -rf "$DIST_NAME/webapp"; rm -rf "$DIST_NAME/agent"; \
#改为gmt时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
WORKDIR $DIST_NAME
COPY application.yml config/
COPY log4j2.xml config/
COPY docker-entrypoint.sh .
EXPOSE 12800 11800
ENTRYPOINT ["sh", "docker-entrypoint.sh"]
在oap目录下运行 docker build -t oap:1.0 .
,生成oap镜像。
然后运行 docker run -d -p 11800:11800 -p 12800:12800 oap:1.0
。
接着 docker ps
,然后会看到

至此,oap服务部署完成。
- ui的dockerfile
FROM openjdk:8-jre-alpine
ENV DIST_NAME=apache-skywalking-apm-incubating \
JAVA_OPTS=" -Xms256M -Xmx512M"
# Install required packages
RUN apk add --no-cache \
bash
COPY "$DIST_NAME.tar.gz" /
RUN set -ex; \
tar -xzf "$DIST_NAME.tar.gz"; \
rm -rf "$DIST_NAME.tar.gz"; rm -rf "$DIST_NAME/config"; \
rm -rf "$DIST_NAME/bin"; rm -rf "$DIST_NAME/oap-libs"; rm -rf "$DIST_NAME/agent"; \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
WORKDIR $DIST_NAME
COPY docker-entrypoint.sh .
COPY logback.xml webapp/
EXPOSE 8080
ENTRYPOINT ["sh", "docker-entrypoint.sh"]
同时修改webapp.yml中的listOfServers属性,将ip改为oap容器上所在宿主机的真实ip,端口不变。
在ui目录下运行 docker build -t oap:1.0 .
,生成ui镜像。
然后运行docker run -d -p 8080:8080 ui:1.0
。
至此ui服务部署完成。
然后可以在浏览器上敲 http:ip(ui服务所在宿主机的ip):8080,可以看到skywalking的界面。

最后将你的app集成agent,运行之后会看到skywalking上多一个服务
网友评论