カッティングボード

カルマをカットしてます

docker imageを外部で保持する

cut-ter.hatenablog.com ↑のサイトでnfsを用いて外部に保持するところまでやったので,今回は実際に動かすところまでやります.

挫折

とりあえずdocker runするかってことで,ubuntuを立ち上げようとしたところ下記のようなエラーが.

docker: Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/d9f6368b43e592400902de3ca7f07a6f2abc69655ba9e6b0c3770df22f9661c9-init/merged: invalid argument.

調べてみたところ,↓のような記事が.これによると,ext4にすると治ったとのことでファイルシステム系がダメなんやなって感じですね. github.com

まぁnfsでマウントしてきたのをさらにマウントするのは,ちょっと無理がありましたね.ということで別の方策を考えていきます.

iSCSI

iSCSIだったら,自由にマウントするファイルシステム選べるし,ディスクレベルのマウントなのでいけるやろってことで試していきます.

ホストの設定

sudo apt-get install -y iscsitarget
sudo vim /etc/default/iscsitarget

false をtrueに書き換える

ISCSITARGET_ENABLE=true
ISCSITARGET_MAX_SLEEP=3


# ietd options
# See ietd(8) for details
ISCSITARGET_OPTIONS=""
sudo mkdir /var/lib/iscsi
sudo dd if=/dev/zero of=/var/lib/iscsi/iscsi.img count=0 bs=1 seek=100G

sudo vim /etc/iet/ietd.conf

末尾に追加

Target iqn.2016-05.net.my:iscsi.img
  Lun 0 Path=/var/lib/iscsi/iscsi.img,Type=fileio
sudo service iscsitarget restart

クライアントの設定

sudo apt-get install open-iscsi
sudo iscsiadm -m node --targetname iqn.2016-05.net.my:iscsi.img --login
sudo apt-get install lsscsi

lsscsiでどこにマウントされてるのかわかるようになります.

cut-ter@ubuntu:~$ lsscsi
[1:0:0:0]    cd/dvd  NECVMWar VMware IDE CDR10 1.00  /dev/sr0
[2:0:0:0]    disk    VMware   Virtual disk     1.0   /dev/sda
[3:0:0:0]    disk    IET      VIRTUAL-DISK     0     /dev/sdb

ってことで今回は/dev/sdbにマウントされます.

sudo parted --script /dev/sdb "mklabel msdos" 
sudo parted --script /dev/sdb "mkpart primary 0% 100%" 
sudo mkfs.ext4 /dev/sdb1

↑のようにパーティション作成してiSCSIの設定は完了です.

調査

とりあえずoverlay2のなかにlディレクトリがあるので動かして,マウントしたりします.

mv overlay2/l/ ~
 mount /dev/sdb1 /var/lib/docker/overlay2/
mv ~/l/ /var/lib/docker/overlay2/

docker pull ubuntu して容量がどんな感じになるか試します.

root@ubuntu:/var/lib/docker# df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              489692       0    489692   0% /dev
tmpfs             101612    4560     97052   5% /run
/dev/sda1       15349744 1861256  12685724  13% /
tmpfs             508060       0    508060   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs             508060       0    508060   0% /sys/fs/cgroup
tmpfs             101612       0    101612   0% /run/user/1000
/dev/sdb1      103080224   61044  97759968   1% /var/lib/docker/overlay2

root@ubuntu:/var/lib/docker# df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              489692       0    489692   0% /dev
tmpfs             101612    4560     97052   5% /run
/dev/sda1       15349744 1861748  12685232  13% /
tmpfs             508060       0    508060   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs             508060       0    508060   0% /sys/fs/cgroup
tmpfs             101612       0    101612   0% /run/user/1000
/dev/sdb1      103080224  194452  97626560   1% /var/lib/docker/overlay2

ってことで大部分が/dev/sdb1 に保存されてることが確認できました.ここまでは前回と変わらないので今回はdockerでubuntuを動かして,比較的重そうなlinuxカーネルgithubからプルしてこようと思います.

linuxカーネルをプルした結果,↓ような感じになりました.結果としてはしっかりと動作中のイメージもマウント領域に保持されているようなので,これでどんなにファイルを追加したりとかしてもdockerホストの容量が足りなくなったりすることはなくなったかな.

root@ubuntu:/var/lib/docker/overlay2# df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              489692       0    489692   0% /dev
tmpfs             101612    4636     96976   5% /run
/dev/sda1       15349744 1862192  12684788  13% /
tmpfs             508060       0    508060   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs             508060       0    508060   0% /sys/fs/cgroup
tmpfs             101612       0    101612   0% /run/user/1000
/dev/sdb1      103080224 3456468  94364544   4% /var/lib/docker/overlay2
overlay        103080224 3456468  94364544   4% /var/lib/docker/overlay2/3b2c4f03fe9743da169bde51725e0893942cb500bd725723ac08a3748ee1cffa/merged
shm                65536       0     65536   0% /var/lib/docker/containers/d13f92d8cec61e79c5982435b73c591aa5a58dfbb2e6c586e253fb3591743eec/shm

とりあえずiSCSIでやれば,容量の対策はできそうなので研究室にNASが来た時に一度ちゃんと速度計測しようとおもいます.