Dokcer 优化之修改默认 Storage Driver

Storage Driver

Docker 和 Host 进行磁盘数据交互的时候是存在一个“储存后端”的,而这个存储后端就是 Docker 中的 Storeage Driver。
它是容器向 Docker Host 读写数据的“媒介”,控制 Image 和 Container 如何在 Host 上进行数据储存和管理。通常,在 Linux 上安装好 Docker 以后默认的 Storage Driver 可能会是 aufs ,而实际上 aufs 并不被推荐,所以我们需要在内核环境支持的情况下尽可能选择最优秀的 Storage Driver 。
小插曲:aufs 项目因为代码工程问题(被评价为:稠密,不可读,无注释)而被拒绝合并到 Linux 主线上。

查看 Storage Driver

输入以下命令:

hentioe@CL-BUDGIE:~$ docker info 

输出:

Containers: 1
 Running: 0
 Paused: 0
 Stopped: 1
Images: 2
Server Version: 17.03.1-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
...

注意看 “Storage Driver: overlay2” 那一行,表示当前我的 Storage Driver 是 overlay2(不是 aufs 原因是我修改过)

修改 Storage Driver

编辑文件 /etc/docker/daemon.json,键入以下配置:

{
  "storage-driver": "overlay2"
}

实际上就是修改配置中 storage-driver 这个 json 属性的值,如果没有就加上,如果已存在就直接修改。如果连 daemon.json 文件都没有,那么就手动创建,粘贴以上内容。

注意:到这一步先不要急着重启 Docker 进程,看完下一节。

修改以后会发生什么?

  1. 所有 Docker Image 会被删除
  2. 所有 Docker Container 会被删除
  3. 所有容器的 Volumn 中的数据会被保留

如果你做好了重建容器和重下镜像的打算,那么可以重启 Docker 了。否则请备份好数据,或者放弃修改。

我应该选择哪一个 Storage Driver?

在环境支持的情况下(Kernel 4.x)请使用 overlay2 ,在环境不支持的情况下(Kernel 3.x )请使用 overlay 。

什么情况下必须修改 Storage Driver?

在多数情况下,可能都没有必须修改 Storage Driver 的必要。但是更改为更优的方案以后,在性能、安全性等各方面都会有提升,它属于一种 “优化”手段,但并不是强制的。但是,在某些情况下,必须得修改 Storage Driver,例如:

你已经手动升级到了最新的内核,但是并没有安装 image-extra 。这个现象其实挺常见的,例如 Ubuntu 官方的 Kernel Mainline 就不提供 linux-image-extra 包。它会导致你的 Dokcer 无法正常使用,原因在于:aufs 依赖 image-extra 中的某些驱动,由于 Docker 默认的 Storage Driver 也就是 aufs 无法使用,所以 Docker 就残了。
在这种情况下,你要做的并不是想办法弄到 linux-image-extra 并且安装上,而是放弃 aufs 使用其它的 Storage Driver ,例如 overlay2 它是不需要 image-extra 中的组件的。

最后

需要注意的一点是,并不是我自作主张的强调你们换 Storage Driver 。 Dokcer 的主要开发人员以及文档都是这么强调的。