カッティングボード

カルマをカットしてます

docker imageを外部で保持したい

昨日の記事(↓)の最後で機械学習系のイメージバカでかすぎるので,なんか外部で保持したいって書いたやつを調査してみます.

cut-ter.hatenablog.com

実際,機械学習系のイメージ馬鹿でかいし画像とかを,尋常じゃない量置いていくので容量がすぐ足りなくなります.それを解決するために,とりあえずイメージの実態がどこで保持されてるのか調べてみます.

調査

cut-ter@ubuntu:~$ sudo docker version
Client:
 Version:      17.09.0-ce
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:42:18 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.09.0-ce
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:40:56 2017
 OS/Arch:      linux/amd64
 Experimental: false

今回のdocker のバージョンは↑みたいな感じです.

とりあえず同じようなこと考えてないかなーって感じで検索かけた所↓

Dockerのイメージはどこにある? | SOTA

とりあえずバージョンが古いので同じようなディレクトリがあるか調べてみるために/var/lib/dockerを確認

root@ubuntu:/var/lib/docker# ls
builder  containers  image  network  overlay2  plugins  swarm  tmp  trust  volumes

はい全然違いますね.こっからは自分で調査していきます.

ぱっと見怪しそうなのがimageですね.

root@ubuntu:/var/lib/docker/image/overlay2# ls distribution/
root@ubuntu:/var/lib/docker/image/overlay2# ls imagedb/
content  metadata
root@ubuntu:/var/lib/docker/image/overlay2# ls layerdb/
root@ubuntu:/var/lib/docker/image/overlay2# ls imagedb/content/
sha256
root@ubuntu:/var/lib/docker/image/overlay2# ls imagedb/metadata/
sha256
root@ubuntu:/var/lib/docker/image/overlay2#

↑みたいな感じで一通り調べてみた感じそれっぽいのが見当たらず.

そこで検討つけるためにubuntuのイメージをpullしてきて,ファイル容量等を確認した所overlay2が怪しいってことで調査した所

root@ubuntu:/var/lib/docker/overlay2/222a6d0ce3984fa6f9b294e5a2faa02e374cf89e3cf20fc6bd17d3d9b675c989# ls
diff  link  lower  merged  work

フォルダもそれっぽいし容量もでかいので多分これが中身

実験

overlay2ディレクトリをnfsとかでマウントするとどのくらい使用容量減らせるのか調査

普通のやつ

root@ubuntu:~# df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              489692       0    489692   0% /dev
tmpfs             101612    4540     97072   5% /run
/dev/sda1       15349744 3873228  10673752  27% /
tmpfs             508056       0    508056   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs             508056       0    508056   0% /sys/fs/cgroup
tmpfs             101612       0    101612   0% /run/user/1000
root@ubuntu:~# docker pull fedora
Using default tag: latest
latest: Pulling from library/fedora
a8ee583972c2: Pull complete
Digest: sha256:25f7dac76b2c88d8b7e0b1d6213d3406e77c7f230bfa1e66bd1cbb81a944eaaf
Status: Downloaded newer image for fedora:latest
root@ubuntu:~# df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              489692       0    489692   0% /dev
tmpfs             101612    4540     97072   5% /run
/dev/sda1       15349744 4154420  10392560  29% /
tmpfs             508056       0    508056   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs             508056       0    508056   0% /sys/fs/cgroup
tmpfs             101612       0    101612   0% /run/user/1000
root@ubuntu:~#

overlay2を外部からマウントしたディレクトリにした場合

root@ubuntu:/var/lib/docker# df
Filesystem             1K-blocks     Used  Available Use% Mounted on
udev                      489696        0     489696   0% /dev
tmpfs                     101612     4568      97044   5% /run
/dev/sda1               24638844  1568628   21795592   7% /
tmpfs                     508056        0     508056   0% /dev/shm
tmpfs                       5120        0       5120   0% /run/lock
tmpfs                     508056        0     508056   0% /sys/fs/cgroup
tmpfs                     101612        0     101612   0% /run/user/1000
kube-master:/data/cut 3845330944 56159232 3593833472   2% /var/lib/docker/overlay2
root@ubuntu:/var/lib/docker# docker pull fedora
Using default tag: latest
latest: Pulling from library/fedora
a8ee583972c2: Pull complete
Digest: sha256:25f7dac76b2c88d8b7e0b1d6213d3406e77c7f230bfa1e66bd1cbb81a944eaaf
Status: Downloaded newer image for fedora:latest
root@ubuntu:/var/lib/docker# df
Filesystem             1K-blocks     Used  Available Use% Mounted on
udev                      489696        0     489696   0% /dev
tmpfs                     101612     4568      97044   5% /run
/dev/sda1               24638844  1569548   21794672   7% /
tmpfs                     508056        0     508056   0% /dev/shm
tmpfs                       5120        0       5120   0% /run/lock
tmpfs                     508056        0     508056   0% /sys/fs/cgroup
tmpfs                     101612        0     101612   0% /run/user/1000
kube-master:/data/cut 3845330944 56441856 3593550848   2% /var/lib/docker/overlay2
root@ubuntu:/var/lib/docker#

通常だと281,192kb使用しているのが,マウントした場合は920kbしか使用しないのでめっちゃ削減できてる.

これはかなり削減できてるのでどんなに重いイメージでもへっちゃらなのでは..

まぁ実はnfsしてるせいでプルがクソ重かったりするのは内緒

問題点

通信速度がネックになる

あとたまにpullに失敗する.原因はよくわからん.

root@ubuntu:/var/lib/docker# docker pull nvidia/cuda
Using default tag: latest
latest: Pulling from nvidia/cuda
660c48dd555d: Already exists
4c7380416e78: Already exists
421e436b5f80: Already exists
e4ce6c3651b3: Already exists
be588e74bd34: Already exists
f597507b3c37: Pull complete
9c5d4127a23d: Extracting [==================================================>]  366.4kB/366.4kB
398bf259fcdc: Download complete
4f4092762618: Download complete
94130a21e154: Download complete
failed to register layer: Error processing tar file(exit status 1): operation not supported

今回は軽く調査しただけで終わってるので↑の解決方法だったり,実際に利用するとどうなのか深く調べたいと思います.