专栏首页千里行走docker-2:docker-compose化sentinel-dashboard用于本地开发

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

目录

(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工程结构拓扑解析

本文分享自微信公众号 - 千里行走(a_thousands_of_miles),作者:千里行走

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 微服务框架saf-2:容器化部署allinone-demo

    (6).容器化部署saf-boot-starter-sample-allinone-service

    千里行走
  • motan-1:优雅关闭

    1.Motan支持在Consul、ZooKeeper集群环境下优雅的关闭节点,当需要关闭或重启节点时,可以先将待上线节点从集群中摘除,避免直接关闭影响正常请求。

    千里行走
  • rocketmq-5:生产级rocketmq集群部署

    集群形式:2m-2s-2namesrv;2个master,2个slave,2个namesrv。

    千里行走
  • Spark SQL 数据统计 Scala 开发小结

    Dataset API 属于用于处理结构化数据的 Spark SQL 模块,通过比 RDD 多的数据的结构信息,Spark SQL 在计算的时候可以进行额外的...

    李德鑫
  • Redis Sentinel 高可用机制

    Redis Sentinel 为 Redis 提供了一个简单的自动化的高可用机制。

    dys
  • sentinel搭建redis集群经验总结

    一、protected-mode 默认情况下,redis node和sentinel的protected-mode都是yes,在搭建集群时,若想从远程连接red...

    庞小明
  • 【应急响应】redis未授权访问致远程植入挖矿脚本(完结篇)

    aerfa
  • 推荐安全且匿名的邮箱 ProtonMail

    安全确实做得很好,关于这点我们尤其在意前端安全是否做得足够,比如对抗 XSS/CSRF 的策略,这在邮箱攻击里是常用的手法。另外在很多安全细节上很具备前瞻性,如...

    周俊辉
  • 【Leetcode】98. 验证二叉搜索树

    这道题目主要是利用二叉搜索树的一个性质: 二叉搜索树的中序遍历结果是一个升序的序列。 那么问题转变成:中序遍历 + 验证是不是升序.

    Leetcode名企之路
  • 【Leetcode】98. 验证二叉搜索树

    这道题目主要是利用二叉搜索树的一个性质: 二叉搜索树的中序遍历结果是一个升序的序列。 那么问题转变成:中序遍历 + 验证是不是升序.

    Leetcode名企之路

扫码关注云+社区

领取腾讯云代金券