当我们把每个模块的功能微服务化后,会发现项目部署工作是非常头疼的一件事情。使用docker来管理我们项目的发布将会简单很多。 (学习前提:已经安装了docker,并对docker有基本了解)
docker来部署spring-cloud项目
这篇文章就来简单介绍下使用docker来部署spring-cloud项目
本文示例代码在 spring-cloud(三)声明性REST客户端[Feign] 上进行改造。
1.在 的pom文件中增加docker的插件支持
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.3</version>
<configuration>
<imageName>tm/${project.artifactId}</imageName>
<dockerDirectory>src/main/resources/build</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
2.修改application.yml文件中的配置
server:
port: 8761
eureka:
instance:
# hostname: localhost
prefer-ip-address: true
client:
registerWithEureka: false
fetchRegistry: false
# serviceUrl:
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
3.在src/main/resources目录下创建目录build及Dockerfile文件
Dockerfile内容如下
FROM java:8
VOLUME /tmp
ADD tm-eureka-server-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8761
4.执行命令mvn clean package docker:build
5.执行命令
docker run --name tm-eureka-server -p 8761:8761 -t --rm tm/tm-eureka-server
到此可以看到docker已经成功的将tm-eureka-server项目部署好了。
接下来再讲讲tm-service利用docker发布,并注册到tm-eureka-server中的示例。
6.在tm-service的pom文件中引入docker插件
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.3</version>
<configuration>
<imageName>tm/${project.artifactId}</imageName>
<dockerDirectory>src/main/resources/build</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
7.修改application.yml的配置
server:
port: 8762
spring:
application:
name: tm-service
eureka:
client:
serviceUrl:
defaultZone: http://tm-eureka-server:8761/eureka/
8.在src/main/resources目录下创建目录build及Dockerfile文件
Dockerfile内容如下
FROM java:8
VOLUME /tmp
ADD tm-service-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8762
9.执行命令mvn clean package docker:build
10.执行启动命令
docker run --name tm-service --link tm-eureka-server -p 8762:8762 -t --rm tm/tm-service
使用docker-compose编排,管理镜像
使用编排启动镜像
1.创建 docker-compose.yml 文件
version: '2'
services:
tm-eureka-server:
image: tm/tm-eureka-server
restart: always
ports:
- 8761:8761
tm-service:
image: tm/tm-service
restart: always
ports:
- 8762:8762
links:
- tm-eureka-server
2.执行命令
docker-compose up
使用编排构建镜像并启动
1.将 tm-eureka-server 项目里的Dockerfile拷贝到更目录,并修改jar包的位置
FROM java:8
VOLUME /tmp
ADD ./target/tm-eureka-server-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8761
2.将 tm-service 项目里的Dockerfile拷贝到更目录,并修改jar包的位置
FROM java:8
VOLUME /tmp
ADD ./target/tm-service-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8762
3.新建 docker-compose-build.yml 文件
version: '2'
services:
tm-eureka-server:
build: tm-eureka-server
tm-service:
build: tm-service
4.执行命令
docker-compose -f docker-compose-build.yml -f docker-compose.yml up
这种全命令行的方式来部署项目非常方便,当我们的微服务很多的时候,手动一个一个的启动很困难的一件事,一不便于运维。使用docker-compose来管理就很容易了,只需要一个命令就可以进行构建,启动,停止。