微服务架构项目实例(微服务架构之「 容器技术 」)

:暂无数据 2026-10-10 12:40:01 :0

微服务架构项目实例(微服务架构之「 容器技术 」)

大家好,微服务架构项目实例相信很多的网友都不是很明白,包括微服务架构之「 容器技术 」也是一样,不过没有关系,接下来就来为大家分享关于微服务架构项目实例和微服务架构之「 容器技术 」的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

微服务架构之「 容器技术 」

现在一聊到容器技术,大家就默认是指 Docker 了。但事实上,在 Docker 出现之前,PaaS社区早就有容器技术了,以 Cloud Foundry、OpenShift 为代表的就是当时的主流。

那为啥最终还是 Docker 火起来了呢?

因为传统的PaaS技术虽然也可以一键将本地应用部署到云上,并且也是采用隔离环境(容器)的形式去部署,但是其兼容性非常的不好。因为其主要原理就是将本地应用程序和启停脚本一同打包,然后上传到云服务器上,然后再在云服务器里通过脚本启动这个应用程序。

这样的做法,看起来很理想。但是在实际情况下,由于本地与云端的环境差异,导致上传到云端的应用经常各种报错、运行不起来,需要各种修改配置和参数来做兼容。甚至在项目迭代过程中不同的版本代码都需要重新去做适配,非常耗费精力。

然而 Docker 却通过一个小创新完美的解决了这个问题。在 Docker 的方案中,它不仅打包了本地应用程序,而且还将本地环境(操作系统的一部分)也打包了,组成一个叫做「 Docker镜像 」的文件包。所以这个「 Docker镜像 」就包含了应用运行所需的全部依赖,我们可以直接基于这个「 Docker镜像 」在本地进行开发与测试,完成之后,再直接将这个「 Docker镜像 」一键上传到云端运行即可。

Docker 实现了本地与云端的环境完全一致,做到了真正的一次开发随处运行。

一、容器到底是什么?

容器到底是什么呢?也许对于容器不太了解,但我们对虚拟机熟悉啊,那么我们就先来看一下容器与虚拟机的对比区别:
上图的左侧是虚拟机的原理,右侧是Docker容器的原理。

虚拟机是在宿主机上基于 Hypervisor 软件虚拟出一套操作系统所需的硬件设备,再在这些虚拟硬件上安装操作系统 Guest OS,然后不同的应用程序就可以运行在不同的 Guest OS 上,应用之间也就相互独立、资源隔离了,但是由于需要 Hypervisor 来创建虚拟机,且每个虚拟机里需要完整的运行一套操作系统 Guest OS,因此这个方式会带来很多额外资源的开销。

而 Docker容器 中却没有 Hypervisor 这一层,虽然它需要在宿主机中运行 Docker Engine,但它的原理却完全不同于 Hypervisor,它并没有虚拟出硬件设备,更没有独立部署全套的操作系统 Guest OS。

Docker容器没有那么复杂的实现原理,它其实就是一个普通进程而已,只不过它是一种经过特殊处理过的普通进程。

我们启动容器的时候(docker run …),Docker Engine 只不过是启动了一个进程,这个进程就运行着我们容器里的应用。但 Docker Engine 对这个进程做了一些特殊处理,通过这些特殊处理之后,这个进程所看到的外部环境就不再是宿主机的那个环境了(它看不到宿主机中的其它进程了,以为自己是当前操作系统唯一一个进程),并且 Docker Engine 还对这个进程所使用得资源进行了限制,防止它对宿主机资源的无限使用。

那 Docker Engine 具体是做了哪些特殊处理才有这么神奇的效果呢?

二、容器是如何做到资源隔离和限制的?

Docker容器对这个进程的隔离主要采用2个技术点:

弄清楚了这两个技术点对理解容器的原理非常重要,它们是容器技术的核心。
下面来详细解释一下:

三、容器的镜像是什么?

一个基础的容器镜像其实就是一个 rootfs,它包含操作系统的文件系统(文件和目录),但并不包含操作系统的内核。

rootfs 是在容器里根目录上挂载的一个全新的文件系统,此文件系统与宿主机的文件系统无关,是一个完全独立的,用于给容器进行提供环境的文件系统。

对于一个Docker容器而言,需要基于 pivot_root 指令,将容器内的系统根目录切换到rootfs上,这样,有了这个 rootfs,容器就能够为进程构建出一个完整的文件系统,且实现了与宿主机的环境隔离,也正是有了rootfs,才能实现基于容器的本地应用与云端应用运行环境的一致。

另外,为了方便镜像的复用,Docker 在镜像中引入了层(Layer)的概念,可以将不同的镜像一层一层的迭在一起。这样,如果我们要做一个新的镜像,就可以基于之前已经做好的某个镜像的基础上继续做。
如上图,这个例子中最底层是操作系统引导,往上一层就是基础镜像层(Linux的文件系统),再往上就是我们需要的各种应用镜像,Docker 会把这些镜像联合挂载在一个挂载点上,这些镜像层都是只读的。只有最上面的容器层是可读可写的。

这种分层的方案其实是基于 联合文件系统UnionFS(Union File System)的技术实现的。它可以将不同的目录全部挂载在同一个目录下。举个例子,假如有文件夹 test1 和 test2 ,这两个文件夹里面的文件 有相同的,也有不同的。然后我们可以采用联合挂载的方式,将这两个文件夹挂载到 test3 上,那么 test3 目录里就有了 test1 和 test2 的所有文件(相同的文件有去重,不同的文件都保留)。

这个原理应用在Docker镜像中,比如有2个同学,同学A已经做好了一个基于Linux的Java环境的镜像,同学S想搭建一个Java Web环境,那么他就不必再去做Java环境的镜像了,可以直接基于同学A的镜像在上面增加Tomcat后生成新镜像即可。

以上,就是对微服务架构之「 容器技术 」的一些思考。

码字不易啊,喜欢的话不妨转发朋友,或点击文章右下角的“在看”吧。

基于docker部署的微服务架构(二): 服务提供者和调用者

前一篇 基于docker部署的微服务架构(一):服务注册中心 已经成功创建了一个服务注册中心,现在我们创建一个简单的微服务,让这个服务在服务注册中心注册。然后再创建一个调用者,调用此前创建的微服务。

新建一个maven工程,修改pom.xml引入 spring cloud 依赖:

在 resources 目录中创建 application.yml 配置文件,在配置文件内容:

这里eureka的注册地址为上一篇中设置的defaultZone。
在 java 目录中创建一个包 demo ,在包中创建启动入口 AddServiceApplication.java

在demo包下新建一个子包controller,在controller子包下创建一个controller对外提供接口。

在服务注册中心已经运行的情况下,运行 AddServiceApplication.java 中的 main 方法,启动微服务。
***隐藏网址*** ADD-SERVICE-DEMO 服务。

启动第二个实例,修改端口为 8101 ,修改 AddController.java 中的输出信息为

再次运行 AddServiceApplication.java 中的 main 方法。
***隐藏网址*** ADD-SERVICE-DEMO 服务,端口分别为 8100 和 8101 。

新建一个maven工程,修改pom.xml引入 spring cloud 依赖:

在 resources 目录中创建 application.yml 配置文件,在配置文件内容:

在 java 目录中创建一个包 demo ,在包中创建启动入口 RibbonClientApplication.java

这里配置了一个可以从服务注册中心读取服务列表,并且实现了负载均衡的 restTemplate 。

在demo包下新建一个子包controller,在controller子包下创建一个controller对外提供接口。

可以看到这里的请求url用了服务注册中心对应的 Application 。

运行 RibbonClientApplication.java 中的 main 方法,启动项目。
***隐藏网址***

多次访问,查看 AddServiceApplication 的控制台,可以看到两个 ADD-SERVICE-DEMO 被负载均衡的调用。
demo源码 spring-cloud-1.0/ribbon-client-demo

新建一个maven工程,修改pom.xml引入 spring cloud 依赖:

在 resources 目录中创建 application.yml 配置文件,在配置文件内容:

在 java 目录中创建一个包 demo ,在包中创建启动入口 FeignClientApplication.java

在demo包下新建一个子包service,在service子包下创建一个接口 AddService.java 调用之前创建的微服务 ADD-SERVICE-DEMO 。

这里 @FeignClient 注解中的参数为服务注册中心对应的 Application 。

在demo包下再新建一个子包controller,在controller子包下创建一个 FeignController.java 对外提供接口。

FeignController 里注入了刚才创建的 AddService 接口。

运行 FeignClientApplication.java 中的 main 方法,启动项目。
***隐藏网址***

多次访问,查看 AddServiceApplication 的控制台,可以看到两个 ADD-SERVICE-DEMO 被负载均衡的调用。
demo源码 spring-cloud-1.0/feign-client-demo

以 add-service-demo 为例,
复制 application.yml ,重命名为 application-docker.yml ,修改 defaultZone 为:

这里修改了 defaultZone 的访问url,如何修改取决于部署docker容器时的 --link 参数, --link 可以让两个容器之间互相通信。

修改 application.yml 中的 spring 节点为:

这里增加了 profiles 的配置,在maven打包时选择不同的profile,加载不同的配置文件。

在pom.xml文件中增加:

选择 docker profile,运行 mvn install -P docker ,打包项目并生成docker镜像, 注意docker-maven-plugin中的 《entryPoint》 标签里的内容不能换行,否则在生成docker镜像的时候会报错 。
运行成功后,登录docker节点,运行 docker images 应该可以看到刚才打包生成的镜像了。

在前一篇中,已经创建了一个 service-registry-demo 的docker镜像,这里先把这个镜像运行起来。

对这条命令做个简单说明, -d 指定当前容器运行在后台, --name 指定容器名称, --publish 指定端口映射到宿主机, --volume 这个挂载是为了解决容器内的时区和宿主机不一致的问题,让容器使用宿主机设置的时区,最后指定使用的docker镜像,镜像名称和标签需要根据自己的情况做修改。
***隐藏网址***
下边启动 add-service-demo 容器,

这条命令和上一条差不多,只是增加了一个 --link 参数, --link 指定容器间的连接,命令格式 --link 容器名:别名 ,这里连接了之前创建的名为 service-registry-demo 的容器,这里的别名和 application-docker.yml 文件中配置的 defaultZone 一致。其实就是通过别名找到了对应的容器IP,进到容器里查看 hosts 文件就明白了,其实就是加了条hosts映射。
add-service-demo 容器启动成功之后,刷新配置中心的页面,发现已经注册到配置中心了。

关于微服务架构项目实例,微服务架构之「 容器技术 」的介绍到此结束,希望对大家有所帮助。

微服务架构项目实例(微服务架构之「 容器技术 」)

本文编辑:admin

更多文章:


微服务架构项目实例(微服务架构之「 容器技术 」)

微服务架构项目实例(微服务架构之「 容器技术 」)

大家好,微服务架构项目实例相信很多的网友都不是很明白,包括微服务架构之「 容器技术 」也是一样,不过没有关系,接下来就来为大家分享关于微服务架构项目实例和微服务架构之「 容器技术 」的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我

2026年10月10日 12:40

component什么意思(Component是什么意思)

component什么意思(Component是什么意思)

大家好,关于component什么意思很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于Component是什么意思的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助

2026年10月10日 09:40

svga转动图(svga后缀名的动图用什么软件观看我在https://svga.io/svga-preview.html网站上看没声音啊,求指点)

svga转动图(svga后缀名的动图用什么软件观看我在https://svga.io/svga-preview.html网站上看没声音啊,求指点)

大家好,关于svga转动图很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于svga后缀名的动图用什么软件观看我在https://svga.io/svga-preview.html网站上看没声音啊,求指点的知识点,相信应该可以

2026年10月10日 09:30

oracle11g安装和配置(oracle数据库安装在什么地方)

oracle11g安装和配置(oracle数据库安装在什么地方)

本篇文章给大家谈谈oracle11g安装和配置,以及oracle数据库安装在什么地方对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月10日 09:10

php安装图文(php页面加入图文编辑框,这是什么技术,请大师指点)

php安装图文(php页面加入图文编辑框,这是什么技术,请大师指点)

大家好,如果您还对php安装图文不太了解,没有关系,今天就由本站为大家分享php安装图文的知识,包括php页面加入图文编辑框,这是什么技术,请大师指点的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月10日 08:50

class是什么(class是什么意思啊)

class是什么(class是什么意思啊)

大家好,如果您还对class是什么不太了解,没有关系,今天就由本站为大家分享class是什么的知识,包括class是什么意思啊的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月10日 06:20

sqlyog执行sql脚本(如何执行一个mysql的sql脚本文件)

sqlyog执行sql脚本(如何执行一个mysql的sql脚本文件)

大家好,sqlyog执行sql脚本相信很多的网友都不是很明白,包括如何执行一个mysql的sql脚本文件也是一样,不过没有关系,接下来就来为大家分享关于sqlyog执行sql脚本和如何执行一个mysql的sql脚本文件的一些知识点,大家可以

2026年10月10日 06:10

excel表格设计版面(怎样在excel中设计一个精美的界面)

excel表格设计版面(怎样在excel中设计一个精美的界面)

各位老铁们好,相信很多人对excel表格设计版面都不是特别的了解,因此呢,今天就来为大家分享下关于excel表格设计版面以及怎样在excel中设计一个精美的界面的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年10月10日 05:40

购物网页设计代码(网页设计 用DREAMWEAVER CS.3 做一个商城购物网页 大神们帮帮忙啊 )

购物网页设计代码(网页设计 用DREAMWEAVER CS.3 做一个商城购物网页 大神们帮帮忙啊 )

大家好,购物网页设计代码相信很多的网友都不是很明白,包括网页设计 用DREAMWEAVER CS.3 做一个商城购物网页 大神们帮帮忙啊 也是一样,不过没有关系,接下来就来为大家分享关于购物网页设计代码和网页设计 用DREAMWEAVER

2026年10月10日 04:40

matlab电机仿真实例100题(matlab在工程领域都能干啥有没有电气工程中应用的例子)

matlab电机仿真实例100题(matlab在工程领域都能干啥有没有电气工程中应用的例子)

其实matlab电机仿真实例100题的问题并不复杂,但是又很多的朋友都不太了解matlab在工程领域都能干啥有没有电气工程中应用的例子,因此呢,今天小编就来为大家分享matlab电机仿真实例100题的一些知识,希望可以帮助到大家,下面我们一

2026年10月10日 03:00

最近更新

eix系统安装(优启通u盘装系统教程)
2026-10-10 12:20:02 浏览:0
热门文章

标签列表