【实战】500行代码手写Docker
文章平均质量分 88
【实战】500行代码手写Docker
蓝胖子的编程梦
多年互联网大厂开发经验,深耕后端领域,擅长golang、云原生技术栈。对性能优化和服务监控方向颇有心得,对分布式链路追踪,故障诊断,实时数据分析,监控告警平台建设,性能优化及架构设计有深入研究
展开
-
【容器系列】500行代码手写docker开篇-goland远程编译环境配置
本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一个类似docker的容器化功能,最终能够容器化的运行一个进程。原创 2023-05-18 13:27:34 · 368 阅读 · 0 评论 -
【容器系列】500行代码手写docker-以新命名空间运行程序
本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一个类似docker的容器化功能,最终能够容器化的运行一个进程。本章要完成的任务则是golang启动一个sh的进程,并且sh的进程将在新的命名空间中运行。届时运行效果如下:在正式开始编写代码前,先来看看linux namespace涉及的一些原理。原创 2023-05-18 13:28:26 · 217 阅读 · 0 评论 -
【容器系列】500行代码代码手写docker-将rootfs设置为只读镜像
本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一个类似docker的容器化功能,最终能够容器化的运行一个进程。前文提到,如果仅仅将ubuntu-base-16.04.6-base-amd64 目录作为容器的根目录, 那么当运行多个容器,就会同时修改到ubuntu-base-16.04.6-base-amd64目录,这样将达不到不同容器使用不同的根文件系统的目的。原创 2023-05-18 17:36:58 · 211 阅读 · 0 评论 -
【容器系列】500代码行代码手写docker-设置网络命名空间
至此,算是完成了对容器网络命名空间的配置算是介绍完毕,这也是我对于手写容器系列的终章,算是对容器原理的一个入门级讲解,其实后续还可以针对它做很多优化,比如实现不同主机上的容器互联,实现容器日志的功能,实现端口映射,实现卷映射功能,这些功能其实都是建立在我们讲的容器原理之上的,懂了原理便能一通百通,希望能给你带来启发。原创 2023-05-18 17:36:58 · 214 阅读 · 0 评论 -
【容器系列】500行代码手写docker-实现硬件资源限制cgroups
cgroups技术是内核提供的功能,可以通过虚拟文件系统接口对其进行访问和更改。mount 命令可以查看cgroups在虚拟文件系统下的挂载目录。一般默认的挂载目录是在/sys/fs/cgroup 目录下,系统内核在开机时,会默认挂载cgroup目录。这样便能通过访问文件的方式对cgroup功能进行使用。在/sys/fs/cgroup/ 目录下,我们看到的每个目录例如cpu,blkio被称作subsystem子系统,每个子系统下可以设置各自要管理的进程id。拿cpu这个目录下的文件举例。原创 2023-05-23 18:20:43 · 121 阅读 · 0 评论