docker 运行 springCloud项目

一. 准备工作

      关于Docker的内容与入门命令实现已经在其他文章里详细介绍了,这里就不再多说。本篇文章主要详细讲解如何使用Docker部署Spring Cloud项目。

      本文采用的工程来自前面文章的工程eureka-server和eureka-client,我们将采用maven的方式去构建项目,并采用docker-maven-plugin去构建docker镜像。

 

二. 具体实现

      首先改造eureka-server工程,在pom.xml上加上插件:

 

 
  1. <build>

  2. <plugins>

  3. <plugin>

  4. <groupId>org.springframework.boot</groupId>

  5. <artifactId>spring-boot-maven-plugin</artifactId>

  6. </plugin>

  7. <!-- tag::plugin[] -->

  8. <plugin>

  9. <groupId>com.spotify</groupId>

  10. <artifactId>docker-maven-plugin</artifactId>

  11. <version>1.0.0</version>

  12. <configuration>

  13. <imageName>${docker.image.prefix}/${project.artifactId}</imageName>

  14. <baseImage>java</baseImage>

  15. <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>

  16. <resources>

  17. <resource>

  18. <targetPath>/</targetPath>

  19. <directory>${project.build.directory}</directory>

  20. <include>${project.build.finalName}.jar</include>

  21. </resource>

  22. </resources>

  23. </configuration>

  24. </plugin>

  25. <!-- end::plugin[] -->

  26. </plugins>

  27. </build>


 

 

 

 

      简单说明一下插件的配置:

      · imageName指定了镜像的名称,“/”前面是仓库名称,后面是镜像名称,也可以再加上标签名称;

      · resources是指那些需要和Dockerfile放在一起,在构建镜像时使用的文件,一般应用 jar 包需要纳入。resources.resource.directory用于指定需要复制的根目录,${project.build.directory}表示target目录,resources.resource.include用于指定需要复制的文件,${project.build.finalName}.jar指的是打包后的jar包文件。

      然后修改application.properties配置文件:

 
  1. server.port=8761

  2.  
  3. eureka.instance.prefer-ip-address=true

  4. # 代表不向注册中心注册自己

  5. eureka.client.register-with-eureka=false

  6. # 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以设置为false

  7. eureka.client.fetch-registry=false


      最后使用maven命令构建镜像:

 

mvn clean package docker:build

      这样运行后eureka-server镜像就构建完成。

      eureka-client镜像的构建也类似。pom.xml的一样加上插件配置,Dockerfile文件的编写也类似,然后修改application.properties配置文件:

 

 
  1. spring.application.name=hello-service

  2. # host改为镜像名

  3. eureka.client.serviceUrl.defaultZone=http://eureka-server:8761/eureka

  4. server.port=8763

  5. eureka.instance.prefer-ip-address=true

  6. eureka.instance.instance-id=${spring.application.name}:${random.int}

 

      注意上面的host要改为eureka-server镜像名。

      最后同样使用maven构建镜像:

mvn clean package docker:build


      到这里eureka-server和eureka-client镜像已经都构建好了,接着使用命令行启动镜像:

 
  1. # 启动服务器

  2. docker run --name eureka-server -p 8761:8761 -t dan/eureka-server

  3. # 注册服务

  4. docker run --link eureka-server:8761 -p 8763:8763 -t dan/eureka-client

 

      运行起来后就能看到之前一样的内容了。

 

三. 使用docker-compose启动镜像

      我们从上面实现知道,可以使用Dockerfile(或Maven)构建镜像,然后使用docker命令操作容器,例如docker run、docker stop等。然而,使用微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例。如果每个微服务都要手动启停,那么效率之低、维护量之大可想而知。这时就需要使用Docker Compose了。

      Docker Compose 是一个用于定义和运行多容器的Docker应用的工具。使用Compose,你可以在一个配置文件(yaml格式)中配置你应用的服务,然后使用一个命令,即可创建并启动配置中引用的所有服务。

 

      接下来我们来使用docker-compose编排启动我们之前第九篇文章中的微服务工程。

      微服务列表如下:

      · eureka-server

      · eureka-client

      · service-ribbon

      · service-feign

      · service-zuul

 

3.1 构建镜像

      首先按照上面的方法为每个工程构建镜像,分别修改pom.xml、application.properties和Dockerfile。

 

3.2 使用docker-compose编排并启动镜像

      创建docker-compose.yml,编写内容:

 
  1. version: '3'

  2. services:

  3.   eureka-server:

  4.     image: dan/eureka-server

  5.     ports:

  6.       - "8761:8761"

  7.  
  8.   hello-service:

  9.     image: dan/eureka-client

  10.     ports:

  11.       - 8763

  12.     links:

  13.       - eureka-server

  14.  
  15.   service-ribbon:

  16.     image: dan/service-ribbon

  17.     ports:

  18.       - "8764:8764"

  19.     links:

  20.       - eureka-server 

  21.  
  22.   service-feign:

  23.     image: dan/service-feign

  24.     ports:

  25.       - "8765:8765"

  26.     links:

  27.       - eureka-server

  28.  
  29.   service-zuul:

  30.     image: dan/service-zuul

  31.     ports:

  32.       - "8769:8769"

  33.     links:

  34.       - eureka-server 


      最后执行命令启动镜像:

 

docker-compose up


      使用浏览器访问http://localhost:8761/看到,所有服务都注册了:

      如果要增加或减少docker实例,直接使用docker-compose scale hello-service=3修改实例数;停止运行则使用docker-compose stop即可。

 

     源码下载:https://github.com/lingd3/SpringCloudLearning/tree/master/chapter12

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值