40 (1)加餐 练习题详解(八)

今天我会带你把《模块八:虚拟化和其他》中涉及的课后练习题,逐一讲解,并给出每一讲练习题的解题思路和答案。

练习题详解

37 | 虚拟化技术介绍:VMware 和 Docker 的区别?

【问题】自己尝试用 Docker 执行一个自己方向的 Web 程序:比如 Spring/Django/Express 等?

解析】关于如何安装 Docker,你可以参考这篇文档。然后这里还有一个不错的 SpringBoot+MySQL+Redis 例子,你可以参考这篇内容

其他方向可以参考上面例子中的 Compose.yml 去定义自己的环境。 一般开发环境喜欢把所有工具链用 Compose 放到一起,上线的环境数据库一般不会用 Docker 容器。 Docker-Compose 是一个专门用来定义多容器任务的工具,你可以在这里得到。

国内镜像可以用 Aliyun 的,具体你可以参考这篇文档

(注:需要一个账号并且登录)

38 | 容器编排技术:如何利用 K8s 和 Docker Swarm 管理微服务?

【问题为什么会有多个容器共用一个 Pod 的需求

解析】Pod 内部的容器共用一个网络空间,可以通过 localhost 进行通信。另外多个容器,还可以共享一个存储空间。

比如一个 Web 服务容器,可以将日志、监控数据不断写入共享的磁盘空间,然后由日志服务、监控服务处理将日志上传。

再比如说一些跨语言的场景,比如一个 Java 服务接收到了视频文件传给一 个 OpenCV 容器进行处理。

以上这种设计模式,我们称为边车模式(Sidecar),边车模式将数个容器放入一个分组内(例如 K8s 的 Pod),让它们可以分配到相同的节点上。这样它们彼此间可以共用磁盘、网络等。

在边车模式中,有一类容器,被称为Ambassador Container,翻译过来是使节容器。对于一个主容器(Main Container)上的服务,可以通过 Ambassador Container 来连接外部服务。如下图所示:

图片1.png

我们在开发的时候经常会配置不同的环境。如果每个 Web 应用都要实现一套环境探测程序,比如判断是开发、测试还是线上环境,从而连接不同的 MySQL、Redis 等服务,那么每个项目都需要引入一个公用的库,或者实现一套逻辑。这样我们可以使用一个边车容器,专门提供数据库连接的服务。让连接服务可以自动探测环境,并且从远程读取全局配置,这样每个项目的开发者不需要再关心数据库有多少套环境、如何配置了。

总结

“[39 | Linux 架构优秀在哪里?]”和 “40 | 商业操作系统:电商操作系统是不是一个噱头?”因为这两讲内容人文色彩较重,我没有给你设置课后习题。但是如果你对这两讲的内容感兴趣,可以在留言区和我交流。

到这里,《重学操作系统》专栏的全部知识都已经讲解结束了。在这 40 讲中,我试图用通俗易懂的语言帮助你建立整个《操作系统》的知识体系,并且最大程度地帮助你将这些基础知识发散到实战场景中去。

在我看来,基础知识是相通的,学习是为了思考和解决问题。《操作系统》和《计算机组成原理》可以作为入门编程领域的前两门课,后续我会继续努力写出更多帮助你提升基础技能、开阔视野、加深认知的专栏课程。