將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 工程一樣,如下圖所示:

     

 

 



                                                                                                  目錄結構圖

    
    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 容器中的部署。完!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM