前言
本文記錄怎么搭建服務注冊中心eureka,然后打包成docker鏡像,用docker swarm部署eureka集群
1、環境
環境 | 版本及說明 | 參考地址 |
---|---|---|
docker | v1.13.1,Docker是一個能夠把開發的應用程序自動部署到容器的開源引擎 | http://www.cnblogs.com/520playboy/p/7910357.html |
doker-compose | v1.11,Docker 官方編排(Orchestration)項目之一,負責快速在集群中部署分布式應 | |
docker swarm | v1.13.1,Docker Engine 1.12或更高版本中內置了swarm(不用額外安裝) | http://www.cnblogs.com/520playboy/p/7873903.html |
docker registry | registry:latest,用於存儲docker鏡像的私有倉庫 | http://www.cnblogs.com/520playboy/p/7889647.html |
spring boot | 1.5.1.RELEASE,是開箱即用,提供一系列大型項目常用的非功能性特征的快速度開發工具 | spring boot官網 |
spring cloud | Camden SR5,Spring Cloud 為開發者提供了在分布式系統(如配置管理、服務發現、斷路器、智能路由、微代理、控制總線、一次性 Token、全局鎖、決策競選、分布式會話和集群狀態)操作的開發工具集 | spring cloud官網 |
開發工具 | jdk1.8/IntelliJ idea2016/maven3.3 |
2、創建父空項目 microservice-spring-cloud
3、父項目的pom.xml文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.2.RELEASE</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.jacky</groupId> <artifactId>microservice-spring-cloud</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>microservice-discovery-eureka-ha</module> </modules> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <docker.image.prefix>jacky</docker.image.prefix><!--配置鏡像倉庫的屬性--> <docker.repostory>192.168.6.132:5000</docker.repostory><!--配置鏡像倉庫的對應的地址與端口--> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Camden.SR3</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <!--添加利用maven插件構建docker鏡像的插件依賴--> <pluginManagement> <plugins> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> </plugin> </plugins> </pluginManagement> </build> </project>
4、創建子項目microservice-discovery-eureka-ha
5、microservice-discovery-eureka-ha工程的pom.xml文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>microservice-spring-cloud</artifactId> <groupId>com.jacky</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>microservice-discovery-eureka-ha</artifactId> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <executions> <!--設置在執行maven 的install時構建鏡像--> <execution> <id>build-image</id> <phase>install</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <!--安裝了docker的主機,並且打開了api remote接口設置--> <dockerHost>http://192.168.6.130:5678</dockerHost> <pushImage>true</pushImage><!--設置上傳鏡像到私有倉庫,需要docker設置指定私有倉庫地址--> <!--鏡像名稱--> <imageName>${docker.repostory}/${docker.image.prefix}/${project.artifactId}:${project.version}</imageName> <!--鏡像的基礎版本--> <baseImage>java:openjdk-8-jdk-alpine</baseImage> <!--鏡像啟動參數--> <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins> </build> </project>
5、microservice-discovery-eureka-ha工程的application.yml文件
spring: application: name: EUREKA-HA security: basic: enabled: true user: name: jacky password: admin --- server: port: 8761 spring: profiles: peer1 eureka: instance: hostname: peer1 #Eureka實例的主機名 prefer-ip-address: true instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}} client: serviceUrl: defaultZone: http://jacky:admin@peer2:8762/eureka/,http://jacky:admin@peer3:8763/eureka/ #Eureka節點相互注冊 register-with-eureka: true --- server: port: 8762 spring: profiles: peer2 eureka: instance: hostname: peer2 #Eureka實例的主機名 prefer-ip-address: true instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}} client: serviceUrl: defaultZone: http://jacky:admin@peer1:8761/eureka/,http://jacky:admin@peer3:8763/eureka/ register-with-eureka: true --- server: port: 8763 spring: profiles: peer3 eureka: instance: hostname: peer3 #Eureka實例的主機名 prefer-ip-address: true instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}} client: serviceUrl: defaultZone: http://jacky:admin@peer1:8761/eureka/,http://jacky:admin@peer2:8762/eureka/ register-with-eureka: true
6、創建EurekaHaApplication.java文件
package com.jacky.cloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaHaApplication { public static void main(String[] args) { SpringApplication.run(EurekaHaApplication.class, args); } }
7、在父目錄下創建docker-compose.yml文件
version: "3" services: peer1: # 默認情況下,其他服務可以使用服務名稱連接到該服務。因此,對於eurekaService1的節點,它需要連接http://eurekaService2/3:951X/eureka/,因此需要配置該服務的名稱是eurekaService1。 image: 192.168.6.132:5000/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT deploy: replicas: 1 #定義 replicated 模式的服務的復本數量 update_config: parallelism: 1 #每次更新復本數量 delay: 2s #每次更新間隔 restart_policy: condition: on-failure #定義服務的重啟條件 networks: - eureka-net ports: - "8761:8761" environment: - spring.profiles.active=peer1 peer2: # 高可用eureka注冊節點2 image: 192.168.6.132:5000/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT deploy: replicas: 1 #定義 replicated 模式的服務的復本數量 update_config: parallelism: 1 #每次更新復本數量 delay: 2s #每次更新間隔 restart_policy: condition: on-failure #定義服務的重啟條件 networks: - eureka-net ports: - "8762:8762" environment: - spring.profiles.active=peer2 peer3: # 高可用eureka注冊節點3 image: 192.168.6.132:5000/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT deploy: replicas: 1 #定義 replicated 模式的服務的復本數量 update_config: parallelism: 1 #每次更新復本數量 delay: 2s #每次更新間隔 restart_policy: condition: on-failure #定義服務的重啟條件 networks: - eureka-net ports: - "8763:8763" environment: - spring.profiles.active=peer3 networks: eureka-net: #網絡名稱 driver: overlay
8、打包
雙擊install
9、在192.168.6.130機器上查看鏡像
表示上傳成功
10、把的docker-compose.yml文件上傳到擁有swarm環境下,執行命令如下
[root@node1 docker-compose]# docker stack deploy -c docker-compose.yml eureka Creating service eureka_peer2 Creating service eureka_peer3 Creating service eureka_peer1 [root@node1 docker-compose]# docker stack ps eureka ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS njhk2gkh7b6r eureka_peer1.1 192.168.6.132:5000/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT node3.jacky.com Running Running 55 seconds ago y5xwabq42zx4 eureka_peer3.1 192.168.6.132:5000/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT node3.jacky.com Running Running 55 seconds ago 468xoiu6lv6l eureka_peer2.1 192.168.6.132:5000/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT node2.jacky.com Running Running 57 seconds ago
說明eureka集群部署成功
說明:swarm集群192.168.6.130;192.168.6.131;192.168.6.132;8761,8762,8763端口都可以訪問
喜歡本文的朋友,歡迎關注,本人的微信公眾號,“咖啡牧羊人”