IDEA使用Docker插件搭建Eureka集群
实现的功能:
1、利用Linux服务器上的Docker将本地Eureka项目打包成镜像,并自动上传到Linux服务器上,同时创建Docker容器(本机上不需要安装Docker环境)
2、搭建Eureka集群(在三台Linux服务器上部署Eureka,并相互注册)
3、在Eureka中使用Spring Security,访问Eureka页面需要输入账号和密码,增加Eureka的安全性
一、准备工作
1、编写Eureka项目
正常搭建Eureka项目即可,在三台服务器上部署项目,其中之一的application.yml配置如下
server: port: 8761 spring: application: name: aservice-eureka security: # spring security hpptbasic 的账号和密码 user: name: admin password: admin eureka: instance: hostname: peer1 # 该服务部署的主机名称 health-check-url: http://${eureka.instance.hostname}:${server.port}/actuator/health client: fetch-registry: true # 否从其他实例获取服务注册信息,如果是单节点部署就是false,集群部署就是true register-with-eureka: true # 是否向eureka注册服务,如果是单节点部署就是false,集群部署就是true service-url: defaultZone: http://admin:admin@peer1:${server.port}/eureka/,http://admin:admin@peer2:${server.port}/eureka/ # 注册到其他eureka服务器 healthcheck: enabled: true # 开启健康检查,默认开启
注意:
1、由于搭建的是Eureka集群,我采用的三台服务器,需要将
fetch-registry
和register-with-eureka
都设置成true,开启服务间的互相注册功能;2、peer1、peer2、peer3是三台服务器的名字,需要在/etc/hosts中加上对应的ip映射,例如:
192.168.79.128 peer1 192.168.79.129 peer2 192.168.79.130 peer3
这步不需要操作,因为我们是采用Docker部署项目,需要修改Docker容器中的/etc/hosts内容,后面会在启动命令中进行添加
3、另外两台服务器上部署的项目,只需要把配置文件中的
service-url.defaultZone
中修改peer1和peer2即可,以及修改eureka.instance.hostname
,其他的不需要更改4、在项目中使用了Spring Security,增加了Eureka的安全性,避免所有人都可以直接访问Eureka页面,简单起见,使用的是httpbasic认证,方法如下:
①加入Security依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
②在编写如下配置类
@Configuration public class MySecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .httpBasic() .and() .authorizeRequests() .anyRequest() .authenticated(); } }
③在配置文件中配置访问Eureka的账号和密码
spring: security: user: name: admin password: admin
④在
service-url.defaultZone
中加上访问Eureka的账号和密码,http://admin:admin@peer1:${server.port}/eureka/
中的admin:admin
分别是Eureka的账号和密码5、开启Eureka的健康检查,
healthcheck.enabled
设置为true,并设置健康检查的urlhealth-check-url
,Eureka集群中必须开启,Eureka就是通过健康检查判断Eureka节点是否正常工作,需要引入以下依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
2、开启Linux服务器Docker远程连接
1、在Linux服务器上安装上Docker,网上教程很多,请自行参考
2、开启Docker远程API
①编辑Docker配置文件,执行
vi /usr/lib/systemd/system/docker.service
命令,找到以ExecStart开头的行,注释掉,然后在下面加上ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
②重新加载配置文件,执行
systemctl daemon-reload
命令③重启docker,执行命令
systemctl restart docker
命令④验证Docker远程连接是否成功,执行
netstat -anp|grep 2375
命令,如果能看到端口信息,并且执行curl 127.0.0.1:2375/info
能显示信息,说明Docker远程连接配置成功
3、IDEA安装Docker插件,并配置Docker远程连接
1、安装Docker插件,File->Settings->Plugins打开插件面板,搜索Docker(新版IDEA好像默认会安装Docker插件)
如果能在installed中看到Docker,表明Docker插件安装成功,否则需要切换到Marketplace找到Docker插件进行安装
2、配置Docker连接
①在Idea底下面板中显示services tab
②创建Docker连接
由于需要在三台服务器上部署Eureka,所以需要创建三个服务器的Docker连接
4、在Pom.xml中加入docker-maven-plugin
插件
完整的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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.shuguangtj</groupId> <artifactId>spring-cloud-study</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>com.shuguangtj</groupId> <artifactId>aservice-eureka</artifactId> <version>0.0.1-SNAPSHOT</version> <name>aservice-eureka</name> <description>eureka注册中心服务</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <configuration> <imageName>${project.name}:v1</imageName> <dockerDirectory>${project.basedir}</dockerDirectory> <skipDockerBuild>false</skipDockerBuild> <resources> <resource> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins> </build> </project>
5、编写Dockefile
FROM java:8 # 指定工作路径,到docker exec -it 进入到容器内部,会进入到该路径下,如果路径不存在会自动创建 WORKDIR /opt/aservice/eureka # 将jar包加入到镜像,./ 是上面指定的WORKDIR路径 ADD target/aservice-eureka-0.0.1-SNAPSHOT.jar ./ # 暴露端口 EXPOSE 8761 ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=peer2", "aservice-eureka-0.0.1-> SNAPSHOT.jar"]
注意:Dockerfile文件跟targer目录在同一路径下,项目结构如下:
二、使用Docker插件生成镜像并自动上传到Linux服务器
1、配置Docker
1、进入Docker配置页
2、Docker配置
Run options配置详情
Before launch配置详情
2、使用Docker创建镜像和容器
1、构建镜像,以及生成容器
2、查看docker镜像的构建过程及构建结果
3、查看docker容器的其他信息
4、操作Linux服务器上的镜像和容器,可以进行删除镜像、启动容器、停止容器、删除容器等操作
搭建过程中遇到的问题:
1、Failed to deploy ‘vhr-front Dockerfile: Dockerfile’: Not connected to docker,参考:https://www.cnblogs.com/modestlin/p/14993176.html