/mydocker

参考《自己动手写 docker》从零开始实现一个简易的 docker 以及相关教程。Build a simple Docker from scratch along with related tutorials.

Primary LanguageGoMIT LicenseMIT

mydocker

1. 概述

参考《自己动手写 docker》,自己动手从零开始实现一个简易的 docker 以及配套教程。

再次感谢几位作者大佬

具体差异如下:

  • UnionFS替换:从AUFS 替换为 Overlayfs
  • 依赖管理更新:从 go vendor 替换为 Go Module
  • 一些写法上的优化调整

微信公众号:探索云原生

鸽了很久之后,终于开通了,欢迎关注。

一个云原生打工人的探索之路,专注云原生,Go,坚持分享最佳实践、经验干货。

从零开始写 Docker 系列持续更新中,扫描下面二维码,关注我即时获取更新~

个人博客:指月小筑(探索云原生)

在线阅读:指月小筑(探索云原生)

2. 基础知识

推荐阅读以下文章对 Docker 核心原理有一个大致认识:

通过上述文章,大家对 Docker 的实现原理已经有了初步的认知,接下来我们就用 Golang 手动实现一下自己的 docker(mydocker)。

3. 具体实现

构造容器

本章构造了一个简单的容器,具有基本的 Namespace 隔离,确定了基本的开发架构,后续在此基础上继续完善即可。

第一篇:

第二篇:

第三篇:

构造镜像

本章首先使用 busybox 作为基础镜像创建了一个容器,理解了什么是 rootfs,以及如何使用 rootfs 来打造容器的基本运行环境。

然后,使用 OverlayFS 来构建了一个拥有二层模式的镜像,对于最上层可写层的修改不会影响到基础层。这里就基本解释了镜像分层存储的原理。

之后使用 -v 参数做了一个 volume 挂载的例子,介绍了如何将容器外部的文件系统挂载到容器中,并且让它可以访问。

最后实现了一个简单版本的容器镜像打包。

这一章主要针对镜像的存储及文件系统做了基本的原理性介绍,通过这几个例子,可以很好地理解镜像是如何构建的,第 5 章会基于这些基础做更多的扩展。

第四篇:

第五篇:

第六篇:

第七篇:

构建容器进阶

本章实现了容器操作的基本功能。

  • 首先实现了容器的后台运行,然后将容器的状态在文件系统上做了存储。
  • 通过这些存储信息,又可以实现列出当前容器信息的功能。
  • 并且, 基于后台运行的容器,我们可以去手动停止容器,并清除掉容器的存储信息。
  • 最后修改了上一章镜像的存储结构,使得多个容器可以并存,且存储的内容互不干扰。

第八篇:

第九篇:

第十篇:

第十一篇:

第十二篇:

第十三篇:

第十四篇:

refactor: 文件系统重构,为不同容器提供独立的rootfs. feat: 更新rm命令,删除容器时移除对应文件系统. feat: 更新commit命令,实现对不同容器打包.

第十五篇:

容器网络

在这一章中,首先手动给一个容器配置了网路,并通过这个过程了解了 Linux 虚拟网络设备和操作。然后构建了容器网络的概念模型和模块调用关系、IP 地址分配方案,以及网络模块的接口设计和实现,并且通过实现 Bridge 驱动给容器连上了“网线”。

前置:揭秘 Docker 网络:手动实现 Docker 桥接网络

第十七篇:

第十八篇:

第十九篇:


最后打个广告,扫描下面二维码,关注我即时获取更多文章~