从iso到docker

一直想找一个从iso镜像到docker镜像的方法。

然而,

找不到。

原来谷歌也有搜不到的东西啊,所以,我就写了这一篇文章。啊,也有可能是我没搜到,不代表别人搜不到。也有可能这种方法早就存在了,只是我不知道(也没人告诉我啊~)。

啰嗦完毕。

文件系统

Linux的文件系统比较有趣,感兴趣的话可以man hier一下,会有整个文件系统的介绍,比如/etc是配置文件目录,/dev是设备文件目录,这里需要注意的是这几个目录:

  • /proc
  • /sys
  • /run
  • /dev

这几个目录都是系统启动时自动生成的,他们虽然也属于文件系统的一部分,但是他们是不确定的。也就是说,我们每次开机这些都会变。

所以下一步打包文件系统的时候就可以无视他们。

从虚拟机迁移所有文件

http://www.aboutdebian.com/tar-backup.htm

先贴一个网址,这上面那介绍了怎样用tra打包文件系统。

具体的命令上面也说的很清楚,我改了一下:

tar -zcpf /tmp/fullbackup.tar.gz --directory=/ \
--exclude=proc --exclude=sys --exclude=dev \
--exclude=run --exclude=boot --exclude=tmp .

这样就不会包括那些没用的文件了。

去掉boot的原因是,docker不需要boot。

打包后的结果如下:

tar

其中镜像是pentesterlab的shellshock,iso文件也是二十多兆。

list

docker import

把打包好的文件搞出来之后,就可以导入到docker了。

导出的方法有很多啊,挂载一个数据卷(再从别的虚拟机导出来),如果不安装增强功能的话,如果不嫌麻烦安装了增强功能,还可以直接复制到文件夹;或者最简单的,从80端口下载下来,再或者sshfs,再或者用nc什么的,实在不行写个脚本也能传出来的。

然后,我们得到了这个压缩包,直接导入就好了:

import

然后就可以运行啦:

run command

或者从这个基础镜像修修改改(dockerfile),也可以直接在压缩的文件系统中修改,然后再导入一遍:

file system

这种方法适用于所有镜像,不过,有一个很严重的问题,就是如果镜像很大的话,push到docker hub上的时候会很慢,除了用第三方的docker registry或者自己搭建,还没想到别的方法(挂代理也是很慢……)。

Later

以后想做一批关于web安全的docker基础镜像,或者从exploit-db上面找一些有漏洞的app,然后做成docker。

不知道去了Daocloud有没有实习生福利,比如,账户升级为专业版?hhhh

很有趣。

comments powered by Disqus