图片

mall学习教程官网:macrozheng.com

程序员受苦久矣

多年前的一个夜晚,风雨大作,一个名叫Docker的年轻人来到Linux帝国拜见帝国的长老。

图片

“Linux长老,天下程序员苦于应用部署久矣,我要改变这一现状,希望长老你能帮帮我”

长老回答:“哦,小小年纪,口气不小,先请入座,你有何所求,愿闻其详”

Docker坐下后开始侃侃而谈:“当今天下,应用开发、测试、部署,各种库的依赖纷繁复杂,再加上版本之间的差异,经常出现在开发环境运行正常,而到测试环境和线上环境就出问题的现象,程序员们饱受此苦,是时候改变这一状况了。”

图片

Docker回头看了一眼长老接着说到:“我想做一个虚拟的容器,让应用程序们运行其中,将它们需要的依赖环境整体打包,以便在不同机器上移植后,仍然能提供一致的运行环境,彻底将程序员们解放出来!”

Linux长老听闻,微微点头:“年轻人想法不错,不过听你的描述,好像虚拟机就能解决这个问题。将应用和所依赖的环境部署到虚拟机中,然后做个快照,直接部署虚拟机不就可以了吗?”

Docker连连摇头说到:“长老有所不知,虚拟机这家伙笨重如牛,体积又大,动不动就是以G为单位的大小,因为它里面要运行一个完整的操作系统,所以跑起来格外费劲,慢就不说了,还非常占资源,一台机器上跑不了几台虚拟机就把性能拖垮了!而我想要做一个轻量级的虚拟容器只提供一个运行环境,不用运行一个操作系统,所有容器中的系统内核还是和外面的宿主机共用的,这样就可以批量复制很多个容器,轻便又快捷

图片

Linux长老站了起来,来回踱步了几圈,思考片刻之后,忽然拍桌子大声说到:“真是个好想法,这个项目我投了!”

Docker眼里见光,喜上眉梢,“这事还真离不开长老的帮助,要实现我说的目标,对进程的管理隔离都至关重要,还望长老助我一臂之力!”

“你稍等”,Linux长老转身回到内屋。没多久就出来了,手里拿了些什么东西。

“年轻人,回去之后,尽管放手大干,我赐你三个锦囊,若遇难题,可依次拆开,必有大用”

图片

Docker开心的收下了三个锦囊,拜别Linux长老后,冒雨而归。

这或许是一个对你有用的开源项目,mall项目是一套基于 SpringBoot3 + JDK 17 + Vue 实现的电商系统(Github标星60K),采用Docker容器化部署,后端支持多模块和微服务架构。包括前台商城项目和后台管理系统,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员、支付等功能!

项目演示:

图片
Docker项目启动之初,首要任务是限制容器内进程的文件系统访问范围。Docker必须确保这些进程不能随意访问系统目录,而是将活动范围限制在一个特定的区域。这就需要用到Linux系统提供的两个关键函数:chroot和pivot_root。

1. 理解chroot和pivot_root

chroot函数允许改变一个进程的根目录,使得进程只能访问到指定目录下的文件系统。而pivot_root函数则可以修改进程和系统的根目录,这为Docker提供了一种方法来隔离容器内的进程。

2. 应用场景

Docker在启动时,首先需要创建一个隔离的环境。通过使用chroot或pivot_root,Docker可以将容器内的进程的根目录设置为一个特定的目录,从而限制其访问范围。

3. 操作步骤

  • 创建隔离环境:Docker首先创建一个隔离的目录,这个目录将作为容器的根目录。

  • 应用chroot或pivot_root:接下来,Docker使用chroot或pivot_root将容器内进程的根目录更改为这个隔离目录。

  • 伪造文件系统:Docker需要伪造一个文件系统,以欺骗容器内的进程,使其认为它们正在访问的是整个系统,而实际上它们被限制在了隔离目录内。

4. 优势与局限

使用chroot和pivot_root为Docker提供了强大的隔离机制,但同时也存在一些局限性,例如对文件系统的依赖和可能的性能影响。Docker需要权衡这些因素,以确保容器的安全性和效率。

5. 结论

Docker通过chroot和pivot_root函数实现了对容器内进程的文件系统访问限制,为构建安全的容器化环境奠定了基础。
图片

为了不露出破绽,Docker很聪明,用操作系统镜像文件挂载到容器进程的根目录下,变成容器的rootfs,和真实系统目录一模一样,足可以以假乱真:

$ ls /  
bin dev etc home lib lib64 mnt opt proc root run sbin sys tmp usr var  

Docker与Namespace的邂逅

Docker在解决文件系统问题后,又面临了一个新的挑战:如何隐藏真实系统的世界,让容器内的进程无法窥探到进程列表、网络设备、用户列表等敏感信息。Docker深知,虽然名为容器,但容器内的进程实际上是在宿主操作系统上运行的独立进程。要实现这一目标,需要一种巧妙的机制来遮蔽这些进程的视野。

问题所在Docker曾考虑使用HOOK方法来欺骗进程,但这种方法复杂度高,兼容性和稳定性都无法保证。

锦囊妙计在困惑之际,Docker想起了Linux长老赠予的锦囊。他打开第二个锦囊,上面写着:namespace

探索NamespaceDocker开始四处打听,经过一番研究,终于明白了namespace的奥秘。Namespace是Linux提供的一种机制,它能够创建多个隔离的命名空间,将进程分配到这些命名空间中,从而达到隔离的效果。

命名空间的作用

  • 进程隔离:每个命名空间内的进程只能看到同一命名空间内的其他进程。
  • 资源隔离:每个命名空间内的资源分配是独立的,互不影响。

实现方法Docker可以通过创建特定的命名空间,将容器内的进程限制在这些空间内,从而实现对宿主系统的隐藏。

优势

  • 简化管理:容器管理变得更为简单,因为进程和资源都被有效隔离。
  • 提高安全性:隔离减少了容器内进程对宿主系统的潜在风险。

结论通过使用namespace,Docker能够有效地隐藏宿主系统,为容器内的进程提供一个干净、隔离的运行环境。这不仅简化了容器的管理,也提高了系统的安全性。

图片
在Docker的世界中,命名空间和CGroup是其核心技术的两大支柱。首先,让我们来谈谈命名空间。每个命名空间都是一个独立的世界,其中运行的进程只能看到自己空间内的用户、网络等资源,而对外界一无所知。这种隔离机制为Docker提供了一种障眼法,使得容器内的进程仿佛置身于一个封闭的环境中,无法感知外部世界。 接下来是CGroup,即控制组。这是Linux内核提供的一种机制,用于限制、记录和隔离进程组所使用的物理资源。Docker利用CGroup来管理容器的资源使用,确保每个容器都能获得合理的资源分配,避免因资源过度使用而导致系统不稳定。 Docker在Linux帝国中推广自己的技术,受到了广泛的欢迎。许多知名的服务,如nginx、redis等,都选择使用Docker容器化技术。然而,随着Docker的普及,也带来了一些问题。例如,一个名为Redis的进程由于资源使用过度,几乎耗尽了系统的内存,导致Linux帝国内存管理部不得不采取措施,甚至考虑杀掉一些进程来释放资源。Docker虽然取得了成功,但也面临着资源管理的挑战。
图片
Docker在一次意外中发现Redis进程可能存在安全隐患。在管理人员的犹豫下,Docker得以逃脱,并开始思考如何对容器内的进程进行有效管理。 一、问题发现 Docker意识到,如果容器中的进程不受控制,可能会导致资源的过度使用,如CPU、内存、硬盘和网络等。这不仅影响容器本身的性能,还可能对整个系统造成负担。 二、解决方案 Docker回忆起Linux长老曾提到的CGroup机制,这似乎是解决当前问题的关键。 三、CGroup机制 CGroup是一种Linux内核提供的资源管理机制,可以对进程进行分组,并限制每个分组的资源使用。具体包括:

  • 内存上限

  • CPU使用率

  • 硬盘空间 系统内核将自动监控和限制这些分组内的进程,确保它们不会超出分配的资源限制。 四、实施管控 Docker决定利用CGroup对容器内的进程进行管控,以防止它们做出超出资源限制的行为,从而保护整个系统的稳定运行。
    图片
    在Linux世界中,Docker技术因其出色的容器管理能力而备受赞誉。Linux长老们提供了三个关键的锦囊妙计,极大地增强了Docker的功能。这些锦囊不仅让Docker在容器进程管理上更加得心应手,还让Docker成为了Linux帝国中的大名人。

  1. Linux长老的锦囊:Docker通过采纳Linux长老的建议,实现了更高效的容器管理。
  2. CGroup技术的应用:Docker整合了CGroup技术,进一步强化了对容器内进程的控制,保障了系统的稳定性和安全性。
  3. 面对新挑战:尽管Docker已经取得了显著的成就,但它也意识到,随着能力的增长,面临的责任和挑战也在增加。 另一方面,在GitHub上,一个名为mall的电商实战项目受到了广泛关注,该项目标星数高达60K。它提供了一套完整的视频教程,这些教程是2023年最新版,总时长约为40小时,共113期。通过学习这套教程,开发者可以掌握主流的Java技术栈,并提升独立开发项目的能力。 项目的整体架构图如下所示,感兴趣的开发者可以通过以下链接深入了解并加入学习:mall视频教程
    图片

视频教程推荐

1. 视频教程概览整套视频教程内容完善,覆盖了以下关键领域:

  • Mall项目最佳学习路线
  • 整体框架搭建
  • 业务与技术实现全方位解析
  • 线上Docker环境部署
  • 微服务项目学习

2. 教程链接点击这里了解更多视频教程内容。

推荐阅读列表

以下是一些精选的推荐阅读,涵盖了Spring Boot 3、JDK17实战项目,以及开源电商系统等主题: