btrfs是下一代写时复制文件系统,它支持许多高级存储技术,使其非常适合docker。btrfs包含在主线linux内核中。
docker的btrfs存储驱动程序利用许多btrfs功能进行图像和容器管理。这些功能包括块级操作,自动精简配置,写时复制快照和易于管理。您可以轻松地将多个物理块设备组合到一个btrfs文件系统中。
本文将docker的btrfs存储驱动程序叫做btrfsbtrfs,将整个btrfs文件系统叫做btrfs。
前提条件
btrfs 如果满足以下先决条件,则支持此功能
docker engine-communitybtrfs仅在ubuntu或debian上建议使用docker engine-community 。
更改存储驱动程序将使您已经创建的所有容器在本地系统上均不可访问。使用docker save保存的容器,并推动现有图像多克尔集线器或私人仓库,让你不必再后来创建它们。
btrfs需要专用的块存储设备,例如物理磁盘。必须将此块设备格式化为btrfs并安装到中/var/lib/docker/。下面的配置说明将指导您完成此过程。默认情况下,sles/文件系统是使用btrfs格式化的,因此对于sles,您不需要使用单独的块设备,但是出于性能方面的考虑,您可以选择这样做。
btrfs支持必须存在于您的内核中。要检查这一点,请运行以下命令
$ grep btrfs /proc/filesystems
btrfs
要在操作系统级别管理btrfs文件系统,您需要 btrfs命令。如果没有此命令,请安装btrfsprogs 软件包(sles)或btrfs-tools软件包(ubuntu)。
配置docker以使用btrfs存储驱动器
在sles和ubuntu上,此过程本质上是相同的。
1.停止docker。
2.将的内容复制/var/lib/docker/到备份位置,然后清空的内容/var/lib/docker/
$ sudo cp -au /var/lib/docker /var/lib/docker.bk
$ sudo rm -rf /var/lib/docker/*
3.将一个或多个专用块设备格式化为btrfs文件系统。本示例假设您正在使用两个名为/dev/xvdf和的 块设备/dev/xvdg。仔细检查块设备名称,因为这是破坏性操作。
$ sudo mkfs.btrfs -f /dev/xvdf /dev/xvdg
btrfs还有更多选项,包括条带化和raid。请参阅 btrfs文档。
4.在/var/lib/docker/挂载点上挂载新的btrfs文件系统。您可以指定用于创建btrfs文件系统的任何块设备。
$ sudo mount -t btrfs /dev/xvdf /var/lib/docker
别忘了通过向添加条目来使更改在重新启动后永久生效/etc/fstab。
5.将的内容复制/var/lib/docker.bk到/var/lib/docker/。
$ sudo cp -au /var/lib/docker.bk/* /var/lib/docker/
6.配置docker以使用btrfs存储驱动程序。即使/var/lib/docker/现在正在使用btrfs文件系统,这也是必需的。编辑或创建文件/etc/docker/daemon.json。如果是新文件,请添加以下内容。如果它是现有文件,则仅添加键和值,如果它不是结束大括号(})之前的最后一行,请小心以逗号结束。
{
storage-driver: btrfs
}
在守护程序参考文档中查看每个存储驱动程序的所有存储选项
7.启动docker。运行后,确认btrfs已经被用作存储驱动程序。
$ docker info
containers: 0
running: 0
paused: 0
stopped: 0
images: 0
server version: 17.03.1-ce
storage driver: btrfs
build version: btrfs v4.4
library version: 101
<...>
8.准备好后,删除/var/lib/docker.bk目录。