本节主要是在服务器搭建eureka服务集群,涉及知识点有:
springcloud-eureka的搭建
maven项目模块化
docker构建自己的镜像
docker推送和拉取自己的镜像
docker构建镜像命令说明
docker运行容器
- 新增项目
删掉src文件夹,此项目作为公共依赖定义处,定义了springcloud的依赖版本
pom文件如下
<?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">
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.springcloudPrice</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
<docker.image.prefix>spring-cloud-demo</docker.image.prefix>
</properties>
<modules>
<module>eureka</module>
</modules>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>central</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<layout>default</layout>
<!-- 是否开启发布版构件下载 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否开启快照版构件下载 -->
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--docker 插件-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.3</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>
- 新增eureka模块
右键父项目->new->module
选中eureka依赖,security依赖
pom文件里,父节点改为步骤1中新增的项目
<?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">
<modelVersion>4.0.0</modelVersion>
<!--父节点依赖修改-->
<parent>
<groupId>com.springcloudPrice</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.springcloudPrice</groupId>
<artifactId>eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
</project>
进入父节点pom文件,modules里增加一个子项目eureka
<modules>
<module>eureka</module>
</modules>
修改启动类EurekaApplication
@SpringBootApplication
@EnableEurekaServer
@EnableDiscoveryClient
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
新增权限控制配置WebSecurityConfig
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// 关闭csrf
http.csrf().ignoringAntMatchers("/eureka/**");
super.configure(http);
}
}
配置application.yml
server:
port: 8761
eureka:
instance:
hostname: eureka
client:
# 表示是否将自己注册到Eureka Servcer。
register-with-eureka: false
# 表示是否从Eureka Server获取注册信息
fetchRegistry: false
serviceUrl:
# 设置Eureka Server交互的地址@前面配置的是security里的账户和密码
defaultZone: httpp://admin:pass@localhost:8761
spring:
application:
name: eureka-server
#设置安全
security:
user:
name: admin
password: pass
启动项目,没有问题可进入下一步
- 构造自己的eureka镜像
在java的同一级目录下,新增docker目录,新增一个Dockerfile文件,文件内容如下
#需拉取java依赖
FROM java:8
#拉取eureka-0.0.1-SNAPSHOT.jar到容器里的/tmp目录下,重命名为app.jar
VOLUME /tmp
ADD eureka-0.0.1-SNAPSHOT.jar app.jar
#运行app.jar文件
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
#容器对外暴露8761端口
EXPOSE 8761
使用idea的插件工具打包项目
生成Dockerfile里的jar文件
使用idea里的docker插件,
到docker里查看新增的镜像,如有
spring-cloud-demo/eureka 说明构建镜像成功
docker images
- 推送镜像到阿里云容器云上
根据阿里云容器服务里操作指南即可,注意仓库必须是公开的,否则好像访问不了。
操作命令如下
#登录
sudo docker login --username= registry.cn-shenzhen.aliyuncs.com
#打一版本
sudo docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/#####/eureka:[镜像版本号]
#推送
sudo docker push registry.cn-shenzhen.aliyuncs.com/#####/eureka:[镜像版本号]
- 在服务器上拉取镜像运行
sudo docker login --username= registry.cn-shenzhen.aliyuncs.com
sudo docker pull registry.cn-shenzhen.aliyuncs.com/#####/eureka:[镜像版本号]
查看拉取的镜像
docker images
运行容器服务
docker run -d -p 8761:8761 --name eureka 镜像名:镜像版本 --eureka.client.serviceUrl.defaultZone=其他eureka实例的服务器ip和地址
命令说明
-d 后台运行
-p 8761:8761 容器8761端口对应宿主机8761端口
–name 容器名称
–eureka.client.serviceUrl.defaultZone=其他eureka实例的服务器ip和地址,多个逗号隔开。
这个是配置集群的配置,配置内容为向配置的eureka注册自己的信息,jar xxx.jar --参数=配置
这个参数传入的方法是springboot方式,后面启动业务服务的时候也会用到这种方式。
譬如由a地址和b地址组成eureka集群
启动a的eureka服务时则配置为http://admin:pass@b/eureka/
启动b的eureka服务配置为:
http://admin:pass@a/eureka/`
在启动时决定当前服务的参数,这样就可以减少构建多个容器镜像,在大型集群的时候时十分重要的,因为不可能一个ip就配置一个容器镜像。
启动成功后即可看到eureka的界面
6.一些docker其他命令