Spring Cloud学习:08Docker部署Spring Cloud项目

1 修改工程

使用练习1的工程进行修改

1.1修改eureka-server模块,在pom.xml文件中添加docker-maven-plugin

<?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.laravelshao.springcloud</groupId>
   <artifactId>one-service</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>one-service</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.6.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>
      <!--docker 镜像前缀-->
      <docker.image.prefix>laravelshao</docker.image.prefix>
      <java.version>1.8</java.version>
      <spring-cloud.version>Dalston.SR3</spring-cloud.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-eureka</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>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
         <!--docker maven插件-->
         <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
               <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
               <dockerDirectory>docker</dockerDirectory>
               <!--注意 修改成远程服务器地址-->
               <dockerHost>http://X:X:X:X:2375</dockerHost>
               <resources>
                  <resource>
                     <targetPath>/</targetPath>
                     <directory>${project.build.directory}</directory>
                     <include>${project.build.finalName}.jar</include>
                  </resource>
               </resources>
            </configuration>
            <dependencies>
               <dependency>
                  <groupId>org.apache.httpcomponents</groupId>
                  <artifactId>httpclient</artifactId>
                  <version>4.4</version>
               </dependency>
            </dependencies>
         </plugin>
      </plugins>
   </build>

</project>

1.2 修改yml配置文件

server:
    port: 8761 # eureka默认端口:8761

eureka:
    instance:
      prefer-ip-address: true
    client:
      register-with-eureka: false # 是否注册到eureka
      fetch-registry: false # 是否从eureka获取注册信息

1.3 在eureka-server模块下面新建docker文件夹,新建Dockerfile文件

FROM frolvlad/alpine-oraclejdk8:slim

VOLUME /opt/common

ADD eureka-server-0.0.1-SNAPSHOT.jar app.jar

#RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

EXPOSE 8761

1.4 执行构建命令

mvn clean package docker:build

1.5 同样修改one-service模块,添加docker-maven-plugin插件,修改配置文件,添加Dockerfile文件,并构建镜像

yml配置文件

server:
    port: 8762

eureka:
    client:
      serviceUrl:
        defaultZone: http://eureka-server:8761/eureka/ #host需要修改为镜像名称

spring:
    application:
      name: one-service #指明应用名称(服务与服务相互调用根据name属性)

Dockerfile文件

FROM frolvlad/alpine-oraclejdk8:slim

VOLUME /opt/common

ADD one-service-0.0.1-SNAPSHOT.jar app.jar

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

EXPOSE 8762

1.6 在远程服务器的docker仓库可以看见构建的两个镜像

1.7 启动镜像

docker run -p 8761:8761 -t laravelshao/eureka-server
docker run -p 8762:8762 -t laravelshao/one-service

发现one-service服务无法注册

解决方法:在启动服务注册中心镜像时添加name参数,启动one-service时添加link参数指向服务注册中心

docker run --name eureka-server -p 8761:8761 -t laravelshao/eureka-server
docker run --link eureka-server:eureka-server -p 8762:8762 -t laravelshao/one-service

服务注册中心存在one-service服务,说明注册成功

请求测试地址,返回测试信息

本文源码下载地址:

https://github.com/laravelshao/spring-cloud-learning/tree/master/setion08-deploy-docker

2 参考资料

史上最简单的SpringCloud教程

https://segmentfault.com/a/1190000010313412

http://www.cnblogs.com/cocoat/p/7473785.html

文章来源:

Author:LaravelShao
link:https://my.oschina.net/LaravelShao/blog/1602774