将SpringCloud Eureka 服务注册与发现部署到docker

一、前言

         最近在学习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 工程一样,如下图所示:

     将SpringCloud Eureka 服务注册与发现部署到docker

 

 



                                                                                                  目录结构图

    
    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

 



启动项目测试是否成功。
将SpringCloud Eureka 服务注册与发现部署到docker

 

 



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

四、实战 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:[email protected]:8761/eureka/

 



因为eureka-server 加入了安全验证,所以客户端注册地址:

http://admin:[email protected]:8761/eureka/

 



将SpringCloud Eureka 服务注册与发现部署到docker

 

 


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

五、实战 docker

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

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

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

将SpringCloud Eureka 服务注册与发现部署到docker

 

将SpringCloud Eureka 服务注册与发现部署到docker

 

 

 



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

 

将SpringCloud Eureka 服务注册与发现部署到docker

 

 将SpringCloud Eureka 服务注册与发现部署到docker

 

 





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

  需要将localhost 修改为eureka-server


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


将SpringCloud Eureka 服务注册与发现部署到docker

 

 将SpringCloud Eureka 服务注册与发现部署到docker

 

 



编写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

       .  表示本目录,不可以少。
将SpringCloud Eureka 服务注册与发现部署到docker

 

 



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

将SpringCloud Eureka 服务注册与发现部署到docker

 

 



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

 



将SpringCloud Eureka 服务注册与发现部署到docker

 

 



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