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