# ziya-docker-open **Repository Path**: luban-ziya/ziya-docker-open ## Basic Information - **Project Name**: ziya-docker-open - **Description**: 用C语言写的docker,全网唯一。为什么不用go?因为go的底层做了太多封装,就算写了也无法get docker的本质。求知,容不得半点投机取巧! - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 3 - **Created**: 2024-06-07 - **Last Updated**: 2025-07-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 带你用C语言手写docker > 意思就是我带你用c语言从0写一个docker > > 帮助你深刻理解docker底层实现,从而让你深刻理解云计算 > > 课程咨询威信:jvm-anan > > 子牙老师微信:ziyaos > > 公众号:硬核子牙 ## 需要的基础 1. 会使用linux、docker(你不会不会吧?我不信) 2. 对c语言、linux编程有一定经验(没有也没事,边学边补,爽歪歪) 3. 对docker底层实现有一定研究(没有也没事,边学边研究,赚大了) 4. 对namespace、cgroup、AUFS不了解?这个没事,我教你 ## 已实现 1、docker实现的所有namespace,实现资源隔离 2、联合文件系统overlayfs,实现文件系统隔离 3、docker实现的所有cgroups,实现硬件隔离 4、运行docker ubuntu镜像 ## 未实现 > 该项目是开源版本,教学版本实现了完整的docker功能:容器网络、端口映射、镜像分层、volumn、containerd、runc、docker exec…… > 可以无差别运行docker images(牛不牛?) > > 对课程感兴趣的,咨询:jvm-anan(C语言写docker,全网唯一) ## 如何使用 1、项目目录下执行:make,编译项目,生成yadocker 2、执行命令:sudo ./yadocker,运行我手写的docker 3、验证隔离1:执行ls,看到的是ubuntu镜像生成的容器,而不是主机 4、验证隔离2:执行ps aux,看到的是容器中的进程,看不到主机中的进程 5、验证隔离3:执行ifconfig,看不到主机中的网卡。容器没挂网卡,所以显示空 6、验证隔离4:执行id,看到的root是容器中的,不是主机中的 7、验证硬件隔离1:进入容器,执行我写的测试程序test_cpu,打印的就是当前程序在哪个cpu核上运行。 我绑定的是1号核,所以一直输出1. 你可以在函数setup_cgroup将绑定的核改为其他核,再运行看看 8、验证硬件隔离2:进入容器,执行我写的测试程序test_memory,会被killed,严重利用cgroup限制容器内存使用