一、前言

         最近在学习docker,顺便把之前学习的spring cloud 部署到Docker 中。至于什么是SpringCloud的服务注册与发现,什么是docker,我这里就不作赘述了。可以先去学习这两部分内容,再来看这篇文章,废话不多说了。直接开始!


二、环境准备

        JDK 8
        MAVEN 3.3.9
SpringCloud Dalston.SR4
SpringBoot 1.5.8.RELEASE
       

三、实战eureka-server

    3.1 创建工程

      跟普通创建eurkea-server 工程一样,如下图所示:

     

                                                                                                  目录结构图

    

    3.2 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">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.eureka-server</groupId>
	<artifactId>101spring-cloud-eureka-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>101spring-cloud-eureka-server</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.8.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<spring-cloud.version>Dalston.SR4</spring-cloud.version>
	</properties>

	<dependencies>
	    <dependency>    
		    <groupId>org.springframework.boot</groupId>    
		    <artifactId>spring-boot-starter-security</artifactId>    
		</dependency>

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</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>

	<build>
		<finalName>eureka-server</finalName>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<!-- tag::plugin[] -->
            <!-- <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.3</version>
                <configuration>
                    <imageName>${docker.image.prefix}/test/${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> -->
            <!-- end::plugin[] -->
		</plugins>
	</build>


</project>

      这里暂时不用Docker 插件演示,加入了eureka安全验证,所以引入了security依赖。

  3.3 application.yml

spring: 
  application: 
    name: eureka-server
server: 
  port: 8761
#安全认证配置
security:    
  basic:    
    enabled: true    
  user:    
    name: admin  # 用户名    
    password: admin123   # 用户密码  
eureka: 
  client: 
    register-with-eureka: false
    fetch-registry: false

启动项目测试是否成功。


启动成功!说明我们的项目正常运行没有问题!

四、实战 eureka-client

创建eureka-client步骤跟创建eureka-server 一样,只是注意一些细节。

4.1 application.yml

spring: 
  application: 
    name: eureka-client
server: 
  port: 8750
eureka:  
  instance:  
    prefer-ip-address: true
  client: 
    serviceUrl: 
      defaultZone: http://admin:admin123@localhost:8761/eureka/
因为eureka-server 加入了安全验证,所以客户端注册地址:
http://admin:admin123@localhost:8761/eureka/

如上图所示,说明客户端注册成功。整体流程没问题!接下来部署到docker 中。

五、实战 docker

这里我的docker 搭建在VM虚拟机CentOS7系统中。我安装的docker 版本是目前最新的17ce社区版网上有许多搭建教程,这里我就不啰嗦了。

5.1 打成Jar包

将 eureka-server 和 eureka-client 通过 maven 命令打成 jar 包

右键=> Run As => Maven build => package 然后运行。


这里我们看到已经打包成功了。刷新一下target 目录,可以看到已经打包好的eureka-server



eureka-client 也跟eureka-server 一样。不过需要对application.yml 进行修改

  需要将localhost 修改为eureka-server


5.2 制作docker 镜像

这里我通过远程连接工具把jar上传至linux 操作系统中。




编写dockerfile

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD ./eureka-server.jar app.jar
#RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8761

通过dockerfile 创建镜像文件 

命令  docker build -t 10.0.233.4/eureka-server .   

注:因为搭建了Harbor镜像私服,所以取名为10.0.233.4/eureka-server

       .  表示本目录,不可以少。


镜像打包成功,我们修改一下dockerfile 继续上传eureka-client



5.3 运行 docker 镜像

  到了最关键的一步了

  分别运行:

docker run --name eureka-server -p 8761:8761 -t 10.0.233.4/eureka-server

docker run --link eureka-server:8761 -p 8750:8750 -t 10.0.233.4/eureka-client



这时候我们可以看到已经实现了在docker 容器中的部署。完!

之后我会上传至github中。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐