本节主要是在服务器搭建eureka服务集群,涉及知识点有:
springcloud-eureka的搭建
maven项目模块化
docker构建自己的镜像
docker推送和拉取自己的镜像
docker构建镜像命令说明
docker运行容器

  1. 新增项目

    删掉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>
  1. 新增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

springcloud docker集群部署整合 skywalking springcloud部署到docker_docker

<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

启动项目,没有问题可进入下一步

  1. 构造自己的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的插件工具打包项目

springcloud docker集群部署整合 skywalking springcloud部署到docker_maven_02


生成Dockerfile里的jar文件

springcloud docker集群部署整合 skywalking springcloud部署到docker_springcloud_03


使用idea里的docker插件,

springcloud docker集群部署整合 skywalking springcloud部署到docker_spring_04


到docker里查看新增的镜像,如有

spring-cloud-demo/eureka 说明构建镜像成功

docker images
  1. 推送镜像到阿里云容器云上
    根据阿里云容器服务里操作指南即可,注意仓库必须是公开的,否则好像访问不了。
    操作命令如下
#登录
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:[镜像版本号]
  1. 在服务器上拉取镜像运行
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的界面

springcloud docker集群部署整合 skywalking springcloud部署到docker_spring_05


6.一些docker其他命令