2016-09-29 3 views
1

Я хотел бы контролировать, работает ли докер в постоянном хранилище или в постоянном хранилище, наложенном на летучее.Docker: можно ли использовать наложенную файловую систему заднего плана?

Это потому, что у меня есть файловая система на SD-карте (Raspberry Pi), и она длится долго. В основном я хочу работать с файловой системой только для чтения (ext4), наложенной на tmpfs (запускать на ней контейнеры), но когда я обнаруживаю, что обновление доступно, я хочу отключить overlayfs, переключить файловую систему как чтение-запись, обновление изображения, затем переключите все обратно на файловую систему, доступную только для чтения tmpfs.

# mv /var/lib/docker /var/lib/docker~ 
# mkdir -p /var/lib/docker /tmp/docker /tmp/work 
# mount -t overlay -o lowerdir=/var/lib/docker~,upperdir=/tmp/docker,workdir=/tmp/work overlay /var/lib/docker 
# docker daemon --storage-driver devicemapper 

Я попробовал два драйвера хранения: overlay2 и devicemapper (цикл). Первый отказался работать над файловой системой overlayfs (в документации также упоминается, что она не поддерживается), последний потребляет всю мою память, а затем Docker убивается ОС. Поведение такое же для малины Pi и моего ПК.

Единственное хранилище, которое должно работать, это vfs, но из того, что я прочитал, он очень неэффективен для хранения (без копирования на запись), поэтому для меня это бесполезно.

Теперь я пытаюсь сделать это с помощью драйвера хранения aufs и файловой системы backayfs (документация Docker не указывает, что она отключена). Я надеюсь, что это сработает, но у него есть некоторые недостатки: aufs не поддерживается ядром mainline Linux.

Есть ли другой способ переключения между двумя файловыми системами? Или можно сохранить сохранение SD-карты по-разному (например, запустить контейнеры в памяти)?

ответ

0

EDIT: Извините, наконец НЕ РАБОТАЕТ !!!. Демон запускается, но не может создавать контейнеры. Это ошибка:

Handler for POST /v1.24/containers/create returned error: error creating aufs mount to /var/lib/docker/aufs/mnt c549130a63857658f8675fd84296afae46293a9f7ae54e9ee04e83c231db600f-init: invalid argument 

AUFS драйвер запоминающего устройства с overlayfs основы файловой системы работает. На данный момент это похоже на единственный вариант, однако я не удовлетворен решением, потому что он выглядит как хак для меня, и потому что aufs не находится в основном ядре, поэтому мне нужно самому скомпилировать ядро.

Это, как я это сделал (это довольно хак, пожалуйста, советы мне сделать это лучше):

  • на моем компьютере:

    $ git clone https://github.com/p4l1ly/rpi-kernel 
    $ cd rpi-kernel 
    $ vagrant up 
    

    ... ждать некоторые довольно долго время ...

    $ vagrant ssh 
        $ cp /var/kernel_build/results/kernel-20161003-100112/rpi2_3/kernel7.img /vagrant/ 
        $ exit 
    $ sudo cp kernel7.img /mnt 
    
  • затем на SD-карте:

    # mv /var/lib/docker /var/lib/docker~ 
    # mkdir -p /var/lib/docker /tmp/docker /tmp/work 
    # mount -t overlay -o lowerdir=/var/lib/docker~,upperdir=/tmp/docker,workdir=/tmp/work overlay /var/lib/docker 
    # docker daemon --storage-driver aufs