Java微服务之Spring Boot on Docker

 本文学习前提:Java, 

  这一部分请参考我的另一篇文章《

  PS:java镜像有点大啊,643MB

二、部署Spring Boot微服务到Docker

2.1 Spring Boot示例准备

  这里以一个spring boot应用程序:eureka-service来介绍,它是基于spring cloud eureka的一个服务注册与发现的微服务应用程序,你可以从这里获取其源码。

  

2.2 快速借助Dockerfile部署到Docker

  (1)使用Maven打包项目:执行下面的命令,将其构建成jar包

MVN> mvn clean package  

  (2)在jar包所在目录,创建Dockerfile文件,并添加以下内容

复制代码
# 基于Java8镜像 FROM java:8  # 将本地文件夹挂在到当前容器 VOLUME /tmp  # 复制文件到容器 ADD eureka-service-sn-0.0.1-SNAPSHOT.jar app.jar RUN bash -c 'touch /app.jar'  # 声明需要暴露的端口 EXPOSE 9000  # 配置容器启动后执行的命令 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
复制代码

  (3)通过FTP工具将jar包和Dockerfile文件一起传送到服务器端,然后通过Shell工具登录并跳转到这个目录下,执行以下命令打包镜像:

  # docker build -t edc/discovery-service-eureka:0.0.1 . => 不要忘记这里有个 .

  

  # docker images => 可以看到在Java8的镜像基础之上,针对eureka-service的镜像已准备好

  

  (4)启动镜像:

  # docker run --name eureka-service -d -p 8761:8761 edc/service-discovery-eureka:0.0.1

  

  (5)验证是否已成功启动:访问http://docker宿主机IP:8761/,可以正常显示Eureka Server首页。

三、使用Docker Compose编排微服务

3.1 Docker Compose简介

  在实际的微服务架构中,一般包含很多个微服务,而且每个微服务都会部署多个实例,如果每个微服务都需要手动启停,那么效率会很低下,维护量也会很大。

  Compose是一个用于定义和运行多容器的Docker应用程序的工具,非常适合在开发、测试、构建CI工作流等场景。

  Compose的安装请参考:

  安装后验证如下:# docker-compose --version

  

  PS:我这里使用的Compose版本是1.22.0

3.2 Docker Compose快速入门示例

  首先,我们来了解下使用Compose的3个基本步骤:

  其次,我们仍然以上面的eureka-service为例,来快速实践一下Compose的基本步骤:

  (1)打包eureka-service,同上,不再赘述

  (2)创建Dockerfile文件,同上,不再赘述

  (3)在Dockerfile同一路径下创建docker-compose.yml,并添加以下内容:

复制代码
version: '3' services:   eureka:                      # 指定服务的名称     build: .                     # 指定Dockerfile所在路径,注意这里是个 .     ports:       - "8761:8761"         # 指定端口映射,类似docker run的-p选项,注意使用字符串形式
复制代码

  (4)通过FTP工具将jar包、dockerfile以及docker-compose.yml一同拷贝到docker宿主机指定文件夹中

  (5)在这个目录下执行以下命令,启动容器。

  # docker-compose up

  

  PS:也可以使用docker-compose up -d 来通过后台运行的方式启动并运行这些容器

  (6)验证容器是否成功启动:访问http://docker宿主机IP:8761/,可以正常显示Eureka Server首页。

 

  最后,说说Docker Compose将所管理的容器分为三层,分别是工程(Project)、服务(Service)以及容器(Container)。Docker Compose运行目录下的所有文件(docker-compose.yml、extends文件或环境变量文件等)组成一个工程(默认为docker-compose.yml所在目录的目录名称)。一个工程可以包含多个服务,每个服务定义了容器运行的镜像、参数和依赖,一个服务可以包括多个容器实例。

  

  对应上图中的名称,工程名称是eureka-service(对应docker宿主机上的目录名称),该工程包含了1个服务,服务名称是eureka。当执行docker-compose up命令时,启动了eureka服务的1个容器实例eureka_1。

关键字:

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信