機械学習エンジニアの備忘録

主に自分が勉強したことのメモ

docker imageの保存先を変更する

最近自分はdeep learningやデータサイエンスの環境構築も基本的にdockerで行うようにしています。
dockerfileさえあれば他のVMでも簡単に同じような環境が作れるので重宝しています。

しかし、docker imageって何気にサイズがでかいのでストレージの容量がすくない端末やVMだとimageをたくさん作ったときにすぐ容量がなくって辛いです…

そこで今回はdocker imageの保存先を変えてみたいと思います。

docker imageの情報はデフォルトの設定を変えていなければ基本的に /var/lib/docker/配下に保存されます。
この保存先のパスをマウントされたディスクなどに変更してあげればいいわけです。

docker の環境ファイルの場所を確認

docker info で環境ファイルの場所を確認できます。

$ docker info
Containers: 16
 Running: 4
 Paused: 0
 Stopped: 12
Images: 53
Server Version: 17.12.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: nvidia runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 89623f28b87a6004d4b785663257362d1658a729
runc version: b2567b37d7b75eb4cf325b77297b140ea686ce8f
init version: 949e6fa
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.13.0-1008-gcp
Operating System: Ubuntu 16.04.3 LTS
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 196.8GiB
Name: kirikei-gpu-2p100
ID: Y2TO:YVPN:Q5CC:CE2U:D36N:LAPL:ETKB:2CWC:6FHM:43TH:IWK2:UVTW
Docker Root Dir: /var/lib/docker   #環境ファイルの保存先
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false


それでは/var/lib/docker/を覗いてみましょう。

$sudo ls /var/lib/docker
builder  containerd  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes

$sudo ls /var/lib/docker/containers
05bdbbd0ba717e5fa9c1278a36d4cadfd21c086e04cd2bf2f04cb1c80b7cb601  6a5be04d34dfe04c4d20c7085a2a7c79e6293917b1a34e746fb48beb16cab05a
29182f0a853741eae26c35a00acaff15e0ada8654b2c28b07ce5b799b6114a91  74d5762a9ab6a889f3a0742d226ee0dae4bc5bbc3b8a0b44ee89f3f9fd2e4d7c
3da8d78d42aa0be6331a462f3c1b19ad12e98ce84a35c90ef2363e91fa6f8753  84296104a53777287ac81126ea54353d216ac945e3767747fc0100f196cf3d6a
3f826eecd54f3f5c4f4669ca32da74cf6242d98f81b0290a11017db6bb5217e6  8a190f44c0c0b5e58cb842ea34a38bb1b0dae40e0d0c47e7b747fbc2b5414255
422966b08448176ae8b97530a95aaf6d38c0bf17ddfd82f4952c76f6ac1f73cb  b26f8795699f8341b37a3baaab099aba3fc0dfbfe4c4603d77a9097b78093cc4
42b231e2bb3069913c23c88cc0184593be3aed21292f4ba5462a69518fe65eb4  c6e9faebbcf89bbeabf0da0e7c2feaaed6beb212df4516abdde15cc1f3e80c4c
54f4ec7e7f2fbb744e47c1d39e89a82a873e0abdff64d6003895e319be02e9a9  f27eadcbbf130ee30dd1fb544a2644b06ca7d2608889543fe0fcaed59ad1587f
59f251808b4b6da9ee26f768cd0e5f1f22071a4e6514edbedf17e337f7829096  f834f94f5b6de0dbc2f1ad0d09ccc28b5d2ba9f387b4b89917e5d9caaadb8b05

このようにcontainerやimageが保存されていることがわかります。

環境ファイル保存先を変更する。

簡単に調べたところ、docker環境の保存先を変更する方法はdockerの設定ファイルをいじったり、docker daemonの起動オプションをつけたりと複数の方法があるようです。

forums.docker.com
stackoverflow.com

今回調べたなかでもっとも簡単にできそうなシンボリックリンクは貼る方法でやりたいと思います。
やりかたの基本は下記リンクの通りです。

www.crybit.com


1.docker daemonを停止させる

$ /etc/init.d/docker stop

2.docker関連のプロセスが動いていないことを確認

$ ps aux|grep docker

3./var/lib/docker/の中身を新しい場所に移動させる

$ mv /var/lib/docker /path/to/new/

4.デフォルトの場所にシンボリックリンクを貼る

$ ln -s /path/to/new/docker/ /var/lib/docker

5.docker daemonをスタートさせる

$ /etc/init.d/docker start

6.新しい場所でimageやcontainerが動いていることを確認する

以上です。
それではよいdockerライフを!