spring-cloud(九)项目部署[Docker]

阅读:422
作者:majingjing
发布:2018-01-05 12:24:51

当我们把每个模块的功能微服务化后,会发现项目部署工作是非常头疼的一件事情。使用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

1.png

2.png

5.执行命令

docker run --name tm-eureka-server -p 8761:8761 -t --rm tm/tm-eureka-server

3.png

4.png

到此可以看到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

5.png

6.png

10.执行启动命令

docker run --name tm-service --link tm-eureka-server -p 8762:8762 -t --rm tm/tm-service

7.png

8.png

9.png

使用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

10.png

使用编排构建镜像并启动

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 

11.png

这种全命令行的方式来部署项目非常方便,当我们的微服务很多的时候,手动一个一个的启动很困难的一件事,一不便于运维。使用docker-compose来管理就很容易了,只需要一个命令就可以进行构建,启动,停止。