内容简介:一、准备工作1.1 安装Docker环境
编辑推荐: |
本文来自于个人博客,本文简单的介绍了如何通过借助dockerfile的方式部署一个spring boot应用程序到docker。 |
一、准备工作
1.1 安装 Docker 环境
这一部分请参考我的另一篇文章《ASP.NET Core on Docker》,本文不再赘述。需要注意的是,如果你是Windows想要安装Docker,Docker for Windows需要64bit Windows 10 Pro,且需要开启Hyper-V。如果你不想开启Hyper-V,而又事先安装了VMware Workstation,可以参考晓晨的《Docker for Windows 使用VMware Station》。
1.2 准备 Java 镜像
(1)拉取java镜像
# docker pull java => 默认为最新版本的镜像
# docker pull java:8 => 标签为8的java镜像版本
(2)查看java镜像
# docker images 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的安装请参考:https://docs.docker.com/compose/install/#install-compose
安装后验证如下:# docker-compose --version
PS:我这里使用的Compose版本是1.22.0
3.2 Docker Compose快速入门示例
首先,我们来了解下使用Compose的3个基本步骤:
1.使用Dockerfile(或其他方式)定义应用程序环境,以便于在任何地方重现该环境
2.在docker-compose.yml文件中定义组成应用程序的服务,以便各个服务在一个隔离的环境中一起运行
3.运行docker-compose up命令,启动并运行整个应用程序
其次,我们仍然以上面的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。
3.3 Docker Compose编排Spring Cloud微服务
这里仍然会采用在2.1节提到的部分示例来(详情请参见github的part5部分)演示,将要编排的微服务列表如下表所示:
(1)分别通过maven打成jar包,不再赘述。
PS:可以通过使用maven插件来构建docker镜像,需要在pom.xml添加一些内容,这里不阐述,有兴趣的可以百度一下。此外,由于Docker默认网络模式是bridge,各个容器的IP都不相同,因此如果在服务提供者的配置文件中设置了http://localhost:8761/eureka/会无法满足要求。这时,我们可以为Eureka Server所在容器配置一个主机名(例如discover),并让各个微服务使用主机名来访问Eureka Server。所以,这里讲所有微服务关于Eureka地址的配置改为如下内容:
eureka:
client:
serviceUrl:
defaultZone: http://discovery:8761/eureka/
(2)编写docker-compose.yml文件
version: '3'
services:
# 指定服务名称
eureka-service:
build:
context: eureka-service/
# 指定服务所使用的的镜像,后续不再赘述
image: edc/eureka-service:0.0.1
# 暴露端口信息
ports:
- "8761:8761"
zuul-service:
build:
context: zuul-service/
image: edc/zuul-service:0.0.1
# 连接到 eureka-service,这里使用的是SERVICE:ALIAS的形式
links:
- eureka-service:discovery
user-service:
build:
context: user-service/
image: edc/user-service:0.0.1
links:
- eureka-service:discovery
movie-service:
build:
context: movie-service/
image: edc/movie-service:0.0.1
links:
- eureka-service:discovery
PS:这里我将各个服务都放在了分别的目录下,可以参考下图这个目录结构:
(3)通过以下命令在docker-comopose.yml所在的目录下进行build,统一打包镜像
# docker-compose build
打包后查看已经build好的镜像列表
(4)执行以下命令启动项目
# docker-compose up -d
PS:这里加上了-d,表示后台运行,否则你的整个屏幕都是日志输出...
最终效果如下图所示:
3.4 Docker Compose编排高可用的Eureka Server
针对Eureka Server,实现高可用的话,也可以通过Compose来编排Eureka Server集群(比如一个2个节点的高可用最小规模集群)。
首先,需要针对Eureka Service的配置文件进行改造,以便通过同样的配置属性就可以实现两个节点的配置,这里仍然使用2.1节中的github中的示例(参见part1部分)。下面是eureka-service-ha-1的配置项,eureka-service-ha-2同理,不再赘述。
从上面的配置文件中,两个节点是通过
spring:
application:
name: eureka-service-ha-1
---
spring:
# profile=peer1
profiles: peer1
server:
port: 8761
eureka:
instance:
# when profile=peer1, hostname=peer1
hostname: peer1
client:
service-url:
# register self to peer2
defaultZone: http://peer2:8762/eureka
---
spring:
# profile=peer2
profiles: peer2
server:
port: 8762
eureka:
instance:
# when profile=peer2, hostname=peer2
hostname: peer2
client:
service-url:
# register self to peer1
defaultZone: http://peer1:8761/eureka
spring.profiles.active来区分配置属性的。
然后,再来编写一个针对高可用eureka server的docker-compose.yml文件:
version: '3'
services:
# 指定服务名称
eureka-service-ha-1:
hostname: peer1 # 指定hostname
image: edc/eureka-service-ha:0.0.1-SNAPSHOT
links:
- eureka-service-ha-2 # 注册到另一个eureka-service中
ports:
- "8761:8761"
environment:
- spring.profiles.active=peer1
# 指定服务名称
eureka-service-ha-2:
hostname: peer2 # 指定hostname
image: edc/eureka-service-ha:0.0.1-SNAPSHOT
links:
- eureka-service-ha-1 # 注册到另一个eureka-service中
ports:
- "8762:8762"
environment:
- spring.profiles.active=peer2
其他步骤如3.3所述,这里不再进行演示。
3.5 Docker Compose编排可伸缩的微服务
这里仍然以3.3中的movie-service为例,执行以下命令来达到微服务节点的扩展(这里从1个节点变为2个节点):
# docker-compose scale movie-service=2
从上图可以看出,movie-service实例已从1个变为了2个。
同理,要伸缩为1个节点,只需要将2改为1即可,不再赘述。
四、小结
本文极简地介绍了docker compose的快速入门示例以及如何通过docker compose编排spring cloud微服务应用程序,还介绍了实现编排高可用eureka server以及可伸缩的微服务的实现思路。
以上所述就是小编给大家介绍的《Spring Boot on Docker》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
An Introduction to Genetic Algorithms
Melanie Mitchell / MIT Press / 1998-2-6 / USD 45.00
Genetic algorithms have been used in science and engineering as adaptive algorithms for solving practical problems and as computational models of natural evolutionary systems. This brief, accessible i......一起来看看 《An Introduction to Genetic Algorithms》 这本书的介绍吧!