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が来た時に一度ちゃんと速度計測しようとおもいます.