关于如何用100行实现docker

2020-05-25 00:00:00 镜像 环境 容器 地址 网络

关于如何用100行如何实现docker

近逛github无意发现了一个很好地项目bocker, 用上百行的代码就实现了一个简易的docker,然后我看了一下,觉得挺有趣的,简单的玩了一下,也做一些更改(项目很久不更新了,有不支持的地方),简单分析了一下分享出来。

前言

我当时一看100行写docker, 肯定是不可能,以前看像简化的python加上依赖也得几百行代码如moker,还有go实现的完善一点的也有上千行mydocker,可是这个项目看了一下,还真是只有100多行,不过看使用的是shell, 不过想起来100多行应该也只能用shell完成了吧,不熟悉shell的可以去看一些shell的基本知识就可以了。

目前这个项目主要实现里镜像拉取,镜像查看,容器启动,容器删除,容器查看,容器资源限制,镜像删除,功能都是一些基本的,也有很多不完善的,我这里大致分析一下他们是的实现原理,分析各个流程,按照操作的顺序正常分析,首先这里讨论的情况是linux环境,推荐使用centos7和ubuntu14以上的系统,流程其实比较简单,底层实现依赖于linux的一些基础组件iptables,cgroup和linux namespace完成网络,资源限制,资源隔离,利用shell去管理这些资源。

开始操作!!

配置环境

好是vagrant (如果是mac和windows建议使用该环境,如果linux,系统内核较高则可直接操作), vagrant可以帮我们实现轻量级的开发环境,个人非常喜欢,它操作和管理vm,处理更重环境会比较方便,这里需要提前配置好环境,我在链接中附上了官方地址,按照教程配置即可。

官方Vagrantfile的epel数据源有问题,而且网络依赖,整个过程是自动化的,不过不方便调试,这里为了方便个人调试,我将流程写为一步一步的了,操作起来也会比较方便。

加载虚拟环境(vagrant配置文件)

生成Vagrant配置文件

Vagrant配置启动

$script = <<SCRIPT
(
echo "echo start---config"
) 2>&1
SCRIPT
Vagrant.configure(2) do |config|
config.vm.box = 'puppetlabs/centos-7.0-64-nocm'
config.ssh.username = 'root'
config.ssh.password = 'puppet'
config.ssh.insert_key = 'true'
config.vm.provision 'shell', inline: $script
end

拷贝上边的文件Vim为保存到一个文件中Vagrantfile中
vagrant up (直接启动,这里会去源拉去centos的镜像,时长主要根据个人网络)

vagrant ssh (直接进入)

相关文章