2) 检查kernel版本,确认overlay的内核模块是否加载。
$ uname -r 4.4.0-64-generic $ lsmod | grep overlay overlay # 如果上面命令没有输出,说明驱动没有加载,可以如下操作 $ modprobe overlay3) 使用overlay/overlay2存储驱动来启动Docker daemon。
$ dockerd --storage-driver=overlay2 & [1] 29403 root@ip-10-0-0-174:/home/ubuntu# INFO[0000] Listening for HTTP on unix (/var/run/docker.sock) INFO[0000] Option DefaultDriver: bridge INFO[0000] Option DefaultNetwork: bridge <output truncated>此外,你还可以在Docker的配置文件中添加--storage-driver=overlay的标志到DOCKER_OPTS中,这样就可以持久化配置,不再需要启动daemon时手动指定--storage-driver标志了。比如,可以将配置持久化到配置文件/etc/default/docker中,将下面内容加入该文件中。
DOCKER_OPTS="--storage-driver=overlay2"4) 检查daemon是否已经使用了overlay/overlay2存储驱动。
$ docker info Containers: 0 Images: 0 Storage Driver: overlay2 Backing Filesystem: extfs <output truncated>注意输出结果显示后端文件系统使用的是extfs。虽然支持多种文件系统,但是生产环境中还是建议使用extfs(尤其ext4)。
OverlayFS和Docker性能一般来说,overlay/overlay2驱动更快一些,几乎肯定比aufs和devicemapper更快,在某些情况下,可能比btrfs也更快。即便如此,在使用overlay/overlay2存储驱动时,还是需要注意以下一些方面:
Page Caching,页缓存。OverlayFS支持页缓存共享,也就是说如果多个容器访问同一个文件,可以共享一个或多个页缓存选项。这使得overlay/overlay2驱动高效地利用了内存,是PaaS平台或者其他高密度场景的一个很好地选项。
copy_up。和AuFS一样,在容器第一次修改文件时,OverlayFS都需要执行copy-up操作,这会给写操作带来一些延迟——尤其这个要拷贝的文件很大时。不过,一旦文件已经执行了这个向上拷贝的操作后,所有后续对这个文件的操作都只针对这份容器层的新拷贝而已。
OverlayFS的copy_up操作比AuFS的copy_up操作要快。因为AUFS支持比OverlayFS支持更多的层数,如果需要在多层查找文件时,就可能导致比较大的延迟。
Inode limits。使用overlay存储驱动可能导致过多的inode消耗,尤其是Docker host上镜像和容器的数目增长时。大量的镜像,或者很多容器启停,,会迅速消耗掉该Docker host上的inode。overlay2存储驱动不存在这个问题。
不幸的是,只能在文件系统创建时指定inode的个数。因此,可以考虑将/var/lib/docker放在一个单独的设备文件系统中,或者在创建文件系统时指定inode个数。
以下一些方法可以提供OverlayFS的性能。
使用Solid State Devices(SSD)。
使用数据卷。数据卷能提高更好的性能,因为其绕过存储驱动,不会引起超配、copy-on-write可能会导致的隐患。
OverlayFS兼容性 有以下两点OverlayFS和其他文件系统不太兼容:open(2)。OverlayFS支持吃POSIX标准的一个子集。以copy-up操作为例,加入你的应用调用了fd1=open("foo", O_RDONLY) 和 fd2=open("foo", O_RDWR),你的应用期望fd1和fd2指向同一个文件,然而,因为copy-up操作,会导致指向不同的文件。
rename(2),这个和前面提到AuFS一致。
小结overlay/overlay2存储驱动已经成为了Docker存储驱动的首选,并且性能优于AuFS和devicemapper。不过,他们也带来了一些与其他文件系统的不兼容性,如对open和rename操作的支持。另外,overlay与overlay2相比,overlay2支持了多层镜像,优化了inode使用。然而,使用这两种驱动时,需要注意你的Docker host的kernel版本。
更多Docker相关教程见以下内容:
Docker安装应用(CentOS 6.5_x64)
在Ubuntu Trusty 14.04 (LTS) (64-bit)安装Docker