Dockerでダウンロードしたファイルはどこに置かれるのか
昨日に続いてDockerをさわってみた話です。
docker run ... で自動的にルートファイルシステムがダウンロードされますが、それらのファイルはいったいどこに置かれたのでしょうか?
カレントディレクトリには何も新しいファイルはできていません。ダウンロードしたのはubuntuとbusyboxのルートファイルシステムなので、それらしい名前で新しくファイルができていないか探したのですが見つかりません。
それでもうまく動いているのですから気にしなくてもいいとも言えるのですが、私としてはわからないのは気持ちが悪い。少なくともギガバイトのサイズをダウンロードしたはずなのに、いったいどこに消えてしまったのか?
ようやく見つけたヒントがこれ。
コンテナの中のプロセスの/proc/self/mountinfo を見るとそれらしいディレクトリが見つかりました。
$ docker run -it busybox cat /proc/self/mountinfo 81 48 0:37 / / rw,relatime - aufs none rw,si=dd4c1e0e1d1a2e1c 82 81 0:39 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw 83 81 0:40 / /sys ro,relatime - sysfs sysfs ro 84 81 0:41 / /dev rw,nosuid - tmpfs tmpfs rw,mode=755 85 84 0:42 / /dev/shm rw,nosuid,nodev,noexec,relatime - tmpfs shm rw,size=65536k 86 84 0:43 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666 87 81 8:1 /var/lib/docker/init/dockerinit-1.0.1-dev /.dockerinit ro,relatime - ext4 /dev/disk/by-uuid/29ad72a0-27da-42e3-9f5f-3a13990ab837 rw,errors=remount-ro,data=ordered 88 81 0:16 /resolvconf/resolv.conf /etc/resolv.conf ro,relatime - tmpfs tmpfs rw,size=404108k,mode=755 89 81 8:1 /var/lib/docker/containers/d37d6c8e7de990094775c91dc1832f9ed30d10a0a554557ccb487263282a59cd/hostname /etc/hostname ro,relatime - ext4 /dev/disk/by-uuid/29ad72a0-27da-42e3-9f5f-3a13990ab837 rw,errors=remount-ro,data=ordered 90 81 8:1 /var/lib/docker/containers/d37d6c8e7de990094775c91dc1832f9ed30d10a0a554557ccb487263282a59cd/hosts /etc/hosts ro,relatime - ext4 /dev/disk/by-uuid/29ad72a0-27da-42e3-9f5f-3a13990ab837 rw,errors=remount-ro,data=ordered 91 84 0:12 /5 /dev/console rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=000 50 82 0:39 /sys /proc/sys ro,nosuid,nodev,noexec,relatime - proc proc rw 52 82 0:39 /sysrq-trigger /proc/sysrq-trigger ro,nosuid,nodev,noexec,relatime - proc proc rw 53 82 0:39 /irq /proc/irq ro,nosuid,nodev,noexec,relatime - proc proc rw 54 82 0:39 /bus /proc/bus ro,nosuid,nodev,noexec,relatime - proc proc rw 55 82 0:41 /null /proc/kcore rw,nosuid - tmpfs tmpfs rw,mode=755
/var/lib/dockerを調べてみます。
$ ls -l /var/lib/docker ls: cannot open directory /var/lib/docker: Permission denied $ ls -ld /var/lib/docker drwx------ 9 root root 4096 Jun 25 22:59 /var/lib/docker
このディレクトリはrootにしかアクセス権限がありません。
$ sudo bash [sudo] password for koba: # cd /var/lib/docker # ls aufs containers execdriver graph init linkgraph.db repositories-aufs vfs volumes # du -s -h * 3.6G aufs 4.0M containers 8.0K execdriver 808K graph 25M init 16K linkgraph.db 4.0K repositories-aufs 8.0K vfs 8.0K volumes #
見つけました。ギガバイトサイズのルートファイルシステムはaufsのフォーマットで格納されていました。
補足
先ほどの/proc/self/mountinfoを見ると、/.dockerinit, /etc/resolv.conf, /etc/hostname, /etc/hostsなどは単一のファイルがmountされています。
てっきりmountはディレクトリに対して行うものだとばかり思っていましたが、ファイル単位でmountもできるんですね。
追記(2014.0626): /var/lib/docker を移動する
/var/lib のディスクの容量にそんなに余裕がないと思ったので、別のディスクにある/proj の下に引っ越しました。
以下のようにしたらできました。
root権限のshellで
# mkdir -p /proj/var/lib # service docker stop # mv /var/lib/docker /proj/var/lib/ # cd /var/lib/ # mv docker docker.org # ln -s /proj/var/lib/dorcker . # service docker start
(Ubuntu 14.04の場合はサービス名をdocker.ioに変更。)