前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker-2:docker-compose化sentinel-dashboard用于本地开发

docker-2:docker-compose化sentinel-dashboard用于本地开发

作者头像
千里行走
发布2020-02-20 10:09:17
2.2K0
发布2020-02-20 10:09:17
举报
文章被收录于专栏:千里行走千里行走

目录

(1).需求

(2).sentinel-dashboard镜像制作与docker化

1.镜像工程

2.Dockerfile文件

3.docker-compose.yml与重要注意事项

3.1.docker-compose.yml文件详述

3.2.网卡关联

3.3.docker network相关命令

4.本地docker化sentinel-dashboard

(3).服务接入sentinel-dashboard

(4).相关资料

架构实战交流钉钉群号:23394754

目前寻找合适职位:百人规模创业公司的基础架构负责人,总架,CTO。

(1).需求

笔者经常在本地mac本上研究一些东西,需要一个本地的开发环境,使用docker来管理环境是一个性价比非常高的做法,方便调试。

为什么不在公司的服务器上做?

因为太危险,现代IT技术的发展尤其是容器化技术的普及,虽然带来了生产效率的大幅度提升,但同时也加大了风险,一条命令就可以删掉所有服务,有很多真实发生的例子。而高级架构师的权限是非常大的,几乎拥有系统所有权限,需要有良好的习惯和本地能力。

PS:

我在做相关开发/研究/查证时,一定会把公司的所有窗口全部关闭,反之一样,两者绝对不并行进行,太危险了。

(2).sentinel-dashboard镜像制作与docker化

1.镜像工程

可以自行从github下载并编译,或者直接下载release的编译好的版本,如:

https://github.com/alibaba/Sentinel/releases/download/1.7.1/sentinel-dashboard-1.7.1.jar

笔者提供sentinel-dashboard镜像制作的工程,位于:

https://github.com/hepyu/sentinel-dashboard-docker-image.git

2.Dockerfile文件

#基础镜像
#centos版本不要超过宿主机的centos版本
FROM hpy253215039/oraclejdk-skywalking-linux-64:8u221
MAINTAINER      hpy253215039@163.com
 
RUN mkdir -p /sentinel-dashboard \
;mkdir -p /data/logs
 
#ADD ./config/ /sentinel-dashboard/
ADD ./jar/1.7.1/ /sentinel-dashboard/
 
EXPOSE 8080
 
CMD java ${JAVA_OPTS} -jar /sentinel-dashboard/sentinel-dashboard-1.7.1.jar

注意,使用的是包含skywalking的镜像:oraclejdk-skywalking-linux-64,如果skywalking与sentinel可以结合使用,可以看到有哪些服务使用了sentinel限流,较实用。后续有时间研究一下。

3.docker-compose.yml与重要注意事项

3.1.docker-compose.yml文件详述

version: '2'
 
services:
 
  sentinel:
    image: hpy253215039/sentinel-dashboard:1.7.1
    container_name: sentinel
    restart: on-failure
    environment:
      JAVA_OPTS: "-Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -Djava.security.egd=file:/dev/./urandom -Dcsp.sentinel.api.port=8719"
    ports:
      - "8718:8080"
      - "8719:8719"
networks:
    - default
 
networks:
  default:
    external:
      name: docker-quick-start_default

field

说明

-Dserver.port=8080

指定sentinel-dashboard的web端口

-Dcsp.sentinel.dashboard.server=localhost:8080

把sentinel-dashboard自己注册到控制台

-Djava.security.egd=file:/dev/./urandom

加快随机数产生过程。Linux中的随机数可以从两个特殊的文件中产生,一个是/dev/urandom.另外一个是/dev/random。他们产生随机数的原理是利用当前系统的熵池来计算出固定一定数量的随机比特,然后将这些比特作为字节流返回。熵池就是当前系统的环境噪音,熵指的是一个系统的混乱程度,系统噪音可以通过很多参数来评估,如内存的使用,文件的使用量,不同类型的进程数量等等。如果当前环境噪音变化的不是很剧烈或者当前环境噪音很小,比如刚开机的时候,而当前需要大量的随机比特,这时产生的随机数的随机效果就不是很好了。

-Dcsp.sentinel.api.port=8719

客户端提供给dashboard访问或者查看sentinel的运行数据。

3.2.网卡关联

本地开发有一个问题,即宿主机与docker容器中的服务不在一个网段,且如果docker中的容器不关联指定网卡时,不同的container的网段也不一样,这样本地完全没有办法用。

所以我们要解决两个问题:

问题1:本地机器与docker容器网络互通。

这个使用V**解决,参照笔者文章:

docker-1:本地开发打通宿主机与docker服务网络

问题2:统一docker中不同容器的网段

比如,创建一个docker-net:

docker network create --subnet=172.18.0.0/16 docker-net

然后通过docker-compose.yml文件中绑定,绑定方式如:

services:
  ......
networks:
    - default
 
networks:
  default:
    external:
      name: docker-quick-start_default

笔者由于已经在本地docker-compose化了dev环境的apollo,所以直接用apollo的subnet作为sentinel的绑定源。

apollo的dev容器化参见官方,docker-compose化脚本位于:

https://github.com/ctripcorp/apollo/tree/master/scripts/docker-quick-start

3.3.docker network相关命令

docker network ls:查看本地网络

localhost:sentinel-dashboard-docker-image hpy$ docker network ls
NETWORK ID          NAME                                      DRIVER              SCOPE
340e1147ea14        bridge                                    bridge              local
ba521e40aa4a        docker-mac-network_default                bridge              local
afc2a047ff9a        docker-quick-start_default                bridge              local
a4d50cbee98c        docker_default                            bridge              local
3b9a2701fbf2        host                                      host                local
43764f85fd7c        kong-net                                  bridge              local
79832d32db34        macvlan_net                               macvlan             local
a4d4942ba567        none                                      null                local
a063dc7efb24        sentinel-dashboard-docker-image_default   bridge              local

Docker network inspect docker-quick-start_default:查看网络详情,内容过多就不截取了。可以看到网段。

4.本地docker化sentinel-dashboard

直接执行sh ./docker-image.sentinel-dashboard.sh进行镜像构建。

然后执行docker化命令:

docker-compose up -d

-d表示后台运行。

本地浏览器访问:http://localhost:8718/#/dashboard/home

实际生产中会配合prometheus,grafana的强大能力进行全面度量,图过大文中不清晰,大图位于:

https://github.com/hepyu/sentinel-dashboard-docker-image/blob/master/images/image-1.png

(3).服务接入sentinel-dashboard

注意,如果不使用阿里云的ahas服务,不要使用如下jar包,否则会自动连阿里云的ahas而造成sentinel-dashboard的数据收集端口启动失败,无法接入服务。

<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>ahas-sentinel-client</artifactId>
</dependency>

要接入的服务需要增加如下启动参数:

-Dproject.name=demo-http-receive -Dcsp.sentinel.dashboard.server=sentinel-dashboard-docker-ip:8080 -Dcsp.sentinel.api.port=8733

因为有V**打通,所以直接写sentinel-dashboard容器的ip即可。容器ip可以通过命令:

docker inspect 容器name | grep -i ipaddress获得。

(4).相关资料

docker-1:本地开发打通宿主机与docker服务网络

生产级kubernetes实践:

https://github.com/hepyu/k8s-app-config

生产级微服务框架:

https://github.com/saf-group/saf

微服务框架saf-1:saf工程结构拓扑解析

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 千里行走 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档