基础镜像
- docker的镜像和chroot的目录 是类似的东西,都是一个rootfs,它们都运行在bootfs,也就是内核层之上。所以只要chroot可以用的目录,打包之后,可以直接import成docker的镜像。
- 如果想更多的定制化,可以通过build来构建我们的基础镜像
busybox
- busybox 就是一个chroot的目录,也就是等价于一个rootfs。用一个很小的文件大小就包含了100多个linux基础命令。
- 可以直接chroot 进 busybox目录,但是进去之后要修改PATH变量,增加/bin路径,才可以使用ls这样的命令
- 可以将busybox的目录整个打包成一个tar,记住要打包的是目录里面的东西,不是目录本身。
- 打包之后就可以直接import或者,写dockerfile ,在里面add,然后build。
load&import
- load 不可以 加载快照,因为load很智能,它会检查镜像层,这就要用导元数据,而快照只是一个rootfs,没有元素据。
- import可以导入 镜像文件,因为import的工作就是以下几步:
- 生成一个sha256ID
- 用ID生成一个目录
- 在目录中创建镜像层标准内容:一个名为json的文件保存元素据,一个VERSION文本文件
- 最后把被import的文件移进来,并改名字为layer.tar
- 所以import一个镜像文件,其实就是白白多了一层。
- 一般我们都尽可能用 commit,save,这样有分层,别人导入会很快,缺点是整个文件比较大
- 如果我们是制作基础镜像,也就是第一层镜像,或者说某个应用的第一个版本,我们用export就比较有意义。因为它是一个整体,不怕别人修改下层影响到自己,同时别人的镜像库中只需要维持一个镜像,避免了各种依赖之后删除不了的麻烦。最重要的是包的大小也小很多,自动或手动了去掉了很多不需要的东西。比如我们在一个镜像上删除一个不需要的软件,想做一个更小的镜像,如果用commit save,发现一点都没小,反而大了,因为底层没变。但是用export就肯定会小。