当我们把每个模块的功能微服务化后,会发现项目部署工作是非常头疼的一件事情。使用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来管理就很容易了,只需要一个命令就可以进行构建,启动,停止。
|