物联网架构成长之路(24)-Docker练习之Compose容器编排

0.前言
  一开始学的之后,是想一步到位直接上Kubernetes(K8s)的,后面没想到,好像有点复杂,有些概念不是很懂。因此学习东西还是要循序渐进,慢慢来。先了解单机编排技术Docker Compose,了解一些技术细节及原理后,在入手K8s。还是不能一口吃成胖子,要多吃几口才可以。而且目前公司都是一些小项目,能用得上DockerCompose已经很不错了,还想要上K8s,估计是不现实的。

1. 安装

  可以通过运行下面命令进行安装,

1 curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` -o docker-compose
2 chmod +x docker-compose
3 mv docker-compose /usr/local/bin

  安装Tab自动补全

curl -L https://raw.githubusercontent.com/docker/compose/1.23.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

  由于我看得是《Spring Cloud与Docker微服务架构实战 第二版》这本书,里面刚好有个例子,这里就用这个做练手。

1 git clone https://github.com/itmuch/spring-cloud-docker-microservice-book-code-docker/
2 cd spring-cloud-docker-microservice-book-code-docker
3 cd docker-1-simple
4 mvn clean package docker:build

  里面的每个微服务都构建成一个Docker Image,然后就可以开干了。

2. 简单例子

  从一个简单的例子开始
  Dockerfile 文件

1 FROM java:latest
2 VOLUME /tmp
3 ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar app.jar
4 RUN bash -c ‘touch /app.jar‘
5 EXPOSE 9000
6 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]

  docker-compose.yml 文件

1 version: ‘3‘
2 services:
3     eureka:
4         build: .
5         ports:
6             - "8761:8761"

  执行 docker-compose up

  从下图可以看出,docker-compose 执行后,分别创建了 compose_eureka Image, compose_default Network, compose_eureka_1_b5 Container

  以上就是入门了,关于docker-compose更多的语法,这里就不展开了,具体肯定是参考其他博客,或者官方文档吧

3. 实战练习

  参考书本上的例子进行练习

  3.1 基于Spring Boot微服务的Compose编写

  这里要使用上述 github 代码里 docker-1-simple 这个目录下的代码进行编译

 1 version: ‘3‘
 2 services:
 3     discovery:
 4         image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-discovery-eureka:0.0.1-SNAPSHOT
 5         ports:
 6             - "8761:8761"
 7     microservice-provider-user:
 8         image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-provider-user:0.0.1-SNAPSHOT
 9     microservice-consumer-movie-ribbon-hystrix:
10         image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-consumer-movie-ribbon-hystrix:0.0.1-SNAPSHOT
11     microservice-gateway-zuul:
12         image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-gateway-zuul:0.0.1-SNAPSHOT
13     microservice-hystrix-dashboard:
14         image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-hystrix-dashboard:0.0.1-SNAPSHOT
15         ports:
16             - "8030:8030"
17     microservice-hystrix-turbine:
18         image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-hystrix-turbine:0.0.1-SNAPSHOT

  运行后,就启动对应的6个Image,以下是运行后效果

  使用之前的weave scope工具查看docker, 可以看到5个微服务通过Spring Boot的Eureka连接在一起了。还有一个microservice-hystrix-dashboard这个没有在里面是因为这个是一个仪表盘(Dashboard),不属于实际业务,所以代码里面没有关联起来,实际上是已启动的。
  从图中还可以看到,后面的那两个集群etcd和elasticsearch,这两个是之前做练习时创建的。初学者,利用这个weave scope工具来查看和监控,挺好用的。

  3.2 基于Eureka高可用(HA)的Compose编写

  这里要使用上述 github 代码里 docker-2-eureka-ha 这个目录下的代码进行编译

 1 version: "3"
 2 services:
 3   peer1:      # 默认情况下,其他服务可使用服务名称连接到该服务。对于peer2节点,它需连接http://peer1:8761/eureka/,因此,我们可配置该服务的名称为peer1。
 4     image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT
 5     ports:
 6       - "8761:8761"
 7     environment:
 8       - spring.profiles.active=peer1
 9   peer2:
10     image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT
11     hostname: peer2
12     ports:
13       - "8762:8762"
14     environment:
15       - spring.profiles.active=peer2
16
17 ## 使用Compose编排高可用的Eureka Server

  通过Eureka自带的Dashboard可以看到启动的两个容器已经互相注册,实现高可用(HA)功能

  3.3 基于Spring Boot微服务集群及动态伸缩的Compose编写

  这里要使用上述 github 代码里 docker-3-complex 这个目录下的代码进行编译,要在每个项目的根目录下,执行 mvn clean package docker:build

 1 version: "3"
 2 services:
 3   peer1:
 4     image: itmuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT
 5     ports:
 6       - "8761:8761"
 7     environment:
 8       - spring.profiles.active=peer1
 9   peer2:
10     image: itmuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT
11     hostname: peer2
12     ports:
13       - "8762:8762"
14     environment:
15       - spring.profiles.active=peer2
16   microservice-provider-user:
17     image: itmuch/microservice-provider-user:0.0.1-SNAPSHOT
18   microservice-consumer-movie-ribbon-hystrix:
19     image: itmuch/microservice-consumer-movie-ribbon-hystrix:0.0.1-SNAPSHOT
20   microservice-gateway-zuul:
21     image: itmuch/microservice-gateway-zuul:0.0.1-SNAPSHOT
22   microservice-hystrix-turbine:
23     image: itmuch/microservice-hystrix-turbine:0.0.1-SNAPSHOT

  通过Eureka的Dashboard查看

  仔细查看下图,可以观察到各个Container间箭头的指向,用于理解Spring Boot各个微服务间关系

  执行以下命令,为各个微服务动态扩容。让各个微服务都执行3个实例,由于docker-compose版本问题,建议使用 --scale 参数来设置启动实例。

1 docker-compose up --scale microservice-provider-user=3 2     --scale microservice-consumer-movie-ribbon-hystrix=3 3     --scale microservice-gateway-zuul=3 4     --scale microservice-hystrix-turbine=3

  Eureka的Dashboard查看

  3.4 修改之前博客中的etcd集群配置,改为docker-compose方式启动(自己实践)

 1 version: "3"
 2 services:
 3     etcd01:
 4         image: etcd:3.3
 5         ports:
 6             - "10001:2379"
 7             - "10011:2380"
 8         #volumes:
 9         #- "/root/workspace/docker/k8s/etcd/data11:/data"
10         command:
11             - /bin/etcd
12             - --data-dir
13             - /data
14             - -name
15             - etcd01
16             - -advertise-client-urls
17             - http://etcd01:2379
18             - -listen-client-urls
19             - http://0.0.0.0:2379
20             - -initial-advertise-peer-urls
21             - http://etcd01:2380
22             - -listen-peer-urls
23             - http://0.0.0.0:2380
24             - -initial-cluster-state
25             - new
26             - -initial-cluster-token
27             - docker-etcd
28             - -initial-cluster
29             - etcd01=http://etcd01:2380,etcd02=http://etcd02:2380,etcd03=http://etcd03:2380
30     etcd02:
31         image: etcd:3.3
32         ports:
33             - "10002:2379"
34             - "10012:2380"
35         #volumes:
36         #- "/root/workspace/docker/k8s/etcd/data22:/data"
37         command:
38             - /bin/etcd
39             - --data-dir
40             - /data
41             - -name
42             - etcd02
43             - -advertise-client-urls
44             - http://etcd02:2379
45             - -listen-client-urls
46             - http://0.0.0.0:2379
47             - -initial-advertise-peer-urls
48             - http://etcd02:2380
49             - -listen-peer-urls
50             - http://0.0.0.0:2380
51             - -initial-cluster-state
52             - new
53             - -initial-cluster-token
54             - docker-etcd
55             - -initial-cluster
56             - etcd01=http://etcd01:2380,etcd02=http://etcd02:2380,etcd03=http://etcd03:2380
57     etcd03:
58         image: etcd:3.3
59         ports:
60             - "10003:2379"
61             - "10013:2380"
62         #volumes:
63         #- "/root/workspace/docker/k8s/etcd/data33:/data"
64         command:
65             - /bin/etcd
66             - --data-dir
67             - /data
68             - -name
69             - etcd03
70             - -advertise-client-urls
71             - http://etcd03:2379
72             - -listen-client-urls
73             - http://0.0.0.0:2379
74             - -initial-advertise-peer-urls
75             - http://etcd03:2380
76             - -listen-peer-urls
77             - http://0.0.0.0:2380
78             - -initial-cluster-state
79             - new
80             - -initial-cluster-token
81             - docker-etcd
82             - -initial-cluster
83             - etcd01=http://etcd01:2380,etcd02=http://etcd02:2380,etcd03=http://etcd03:2380

  测试,实际效果是,对3个节点的增删改查操作都是等效的

curl http://127.0.0.1:10001/v2/keys/hello -XPUT -d value="hello world"

4. 小结

  这几天的练习与了解,算是对Docker及Docker Compose有了一定的了解,接下来,就以实际项目中需要用到的服务构建成一个个Docker Image并推送到阿里云容器私有仓库上。初期会构建的有STUN服务、Nginx-RTMP服务、EMQ-MQTT服务、Redis与MongoDB服务,暂时会先构建这几个服务。服务间还涉及到认证与鉴权的,还会写代码,业务代码应该还是用Spring Cloud全家桶,以练促学,未来之路,任重而道远呀!加油!

本文地址: https://www.cnblogs.com/wunaozai/p/9936306.html

原文地址:https://www.cnblogs.com/wunaozai/p/9936306.html

时间: 2024-10-10 16:41:23

物联网架构成长之路(24)-Docker练习之Compose容器编排的相关文章

物联网架构成长之路(27)-Docker练习之Zookeeper安装

0. 前言 准备了解一下消息队列MQ,对比了一些开源的中间件,最后选择Kafka作为以后用到的消息队列,消息队列的应用场景及Kafka与其他消息队列的优缺点这里就不细说了,具体的可以参考其他博客说明.不过Kafka依赖Zookeeper,因此先练习一些用Docker构建Zookeeper. 1. 安装ZooKeeper 使用Kafka前,要安装ZooKeeper.这里利用最近刚学的Docker,我构建成一个ZooKeeper Image,供以后使用. 1 FROM openjdk:8-jdk-a

物联网架构成长之路(56)-SpringCloudGateway+JWT实现网关鉴权

0. 前言 结合前面两篇博客,前面博客实现了Gateway网关的路由功能.此时,如果每个微服务都需要一套帐号认证体系就没有必要了.可以在网关处进行权限认证.然后转发请求到后端服务.这样后面的微服务就可以直接调用,而不需要每个都单独一套鉴权体系.参考了Oauth2和JWT,发现基于微服务,使用JWT会更方便一些,所以准备集成JWT作为微服务架构的认证方式. [https://www.cnblogs.com/wunaozai/p/12512753.html] 物联网架构成长之路(54)-基于Naco

物联网架构成长之路(0)-目录

一.基础 [http://www.cnblogs.com/wunaozai/p/8067621.html] 物联网架构成长之路(1)-前言 [http://www.cnblogs.com/wunaozai/p/8075640.html] 物联网架构成长之路(2)-脚手架工具准备 [http://www.cnblogs.com/wunaozai/p/8082332.html] 物联网架构成长之路(3)-EMQ消息服务器了解

物联网架构成长之路(33)-EMQ数据存储到influxDB

一.前言 时隔一年半,技术变化特别快,学习也要跟上才行.以前写过EMQ数据转存问题,当时用了比较笨的方法,通过写插件的方式,把MQTT里面的数据发送到数据库进行存储.当时也是为了学习erlang和emq.现在随着对物联网的深入,也结合实际需求,不停的学习.下面将介绍我实验测试可行的物联网数据分析解决方案.采用的还是开源方案.通过订阅MQTT的根Topic,把所有物联网数据转存到InfluxDB时序数据库,然后通过Grafana进行图表显示.这应该是目前比较流行的方案.二.安装InfluxDB I

物联网架构成长之路(35)-利用Netty解析物联网自定义协议

一.前言 前面博客大部分介绍了基于EMQ中间件,通信协议使用的是MQTT,而传输的数据为纯文本数据,采用JSON格式.这种方式,大部分一看就知道是熟悉Web开发.软件开发的人喜欢用的方式.由于我也是做web软件开发的,也是比较喜欢这种方式.阿里的物联网平台,也是推荐这种方式.但是,但是做惯硬件开发,嵌入式开发就比较喜欢用裸TCP-Socket连接.采用的是二进制协议.基于此大部分应用场合为了兼容旧设备,就需要单独开发一个TCP服务器的网关.这里使用以前学过的,也是比较流行的Netty框架. 话不

物联网架构成长之路(2)-脚手架工具准备

0. 说明 开始搞服务器了,总要准备几个专业一点的Linux工具,不然给人看起来不是很专业的样子.这一小节,只是简单的举例几个小工具,主要是保存一些配置文件,方便以后查看.后期心情好的话,就在以后遇到好的工具,在这里进行更新. 1. Oh-my-zsh 一般搞服务器都是在Linux上的,默认的shell不是很好用,自己一点一点的配置又有点麻烦,那就直接用这个现成的,安装后就可以使用了,这段时间用起来还算比较方便的. https://github.com/robbyrussell/oh-my-zs

物联网架构成长之路(11)-Redis缓存主从复制

1. 说明 在我的物联网平台框架框架中,会用到Redis这个中间件.作为EMQ权限认证的缓存.https://www.cnblogs.com/think-in-java/p/5123884.html 2. 编译&运行 1 wget http://download.redis.io/releases/redis-4.0.6.tar.gz 2 make && make test && make PREFIX=/home/user/workspace/redis inst

物联网架构成长之路(12)-物联网架构小结1

1. 说明 这一小节,也不具体讲些什么了.最近一个半月都在摸鱼,没什么事做,慢慢学习着SpringBoot和SpringCloud.下面两张图是进行的一次小结.以后随着深入,整个架构肯定是会变的.现在记录一下,每个项目成长都是有一个过程的. 原文地址:https://www.cnblogs.com/wunaozai/p/8312891.html

物联网架构成长之路(13)-SpringBoot入门

1. 前言 下载最新版的JavaEE eclipse-jee-oxygen-2-win32-x86_64.zip 安装STS插件 Window->Eclipse Marketplace -> popular 下那个 Spring Tools(aka Spring IDE and Spring Tool Suite) 然后通过STS工具创建一个新的Spring boot工程,这里就不细说了.网上资料很多,也比较简单就可以搭建起来.后面对SpringBoot也只是简单的提一下,还有说一下注意点.没