🐳

Dockerイメージの格納場所を変更する方法

2022/01/16に公開
2

Dockerイメージによるディスク容量の逼迫

ある日Dockerイメージをpullしたら突然の警告。

デバイスに空き領域がありません

容量にまだ余裕あるはずなのになんで?と思ったら、Dockerは /var/lib/docker以下にイメージなどを格納しているようです。なので/(スラルート)の容量を少なめに確保していると、大きいDockerイメージをいくつもダウンロードすると容量がパンパンになってしまうようです。

私は/に100GBしか確保していなかったため、容量が枯渇指定しまいました。

保存場所を変えるのが常套手段みたいです。ネット調べても出てきますが、一応自分のメモとして残しておきます。

Dockerイメージの格納場所を変える方法

私の場合は~/docker(/home/<username>/docker)以下に移動しました。

別ディスクなどにする場合は、各自読み替えてください。

Dockerを停止してファイルコピー

以下コマンド実行します。ちなみにこれだと ~/docker/dockerとちょっと間抜けな感じになります(後で気づきました)。

$ sudo systemctl stop docker
$ cd && mkdir docker
$ sudo cp -ar /var/lib/docker docker/

Dockerサービスのオプションを編集

以下Vimで編集する場合のコマンドです。

$ sudo vim /lib/systemd/system/docker.service

ExecStartに以下のように-gオプションを追記してください。

<username>は自分のユーザー名(ホームディレクトリ名)をいれてください。

変更前

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

変更後

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -g /home/<username>/docker/docker

注:新しいDockerバージョンだと、以下のように-gオプションを--data-rootオプションにする必要があるようです。コメントで教えていただきました。ありがとうございます。

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --data-root /home/<username>/docker/docker

注:サービスのオプションを変更する以外に、/etc/docker/daemon.jsonを変更する方法もあるようです(後で教えていただきました)。以下ページ参照ください(私は試せていません)。

参考:docker image保存先を外部ストレージに変更する

Dockerサービスのリロードと再起動

以下コマンド実行します。可能なら再起動しておくのがベターです。

$ sudo systemctl daemon-reload
$ sudo systemctl start docker

イメージの確認

とりあえずDockerイメージを確認します。

$ docker images

以下は表示例です。

REPOSITORY                  TAG                   IMAGE ID       CREATED         SIZE
nvcr.io/nvidia/tensorflow   20.03-tf1-py3         8b2abbd886f0   22 months ago   9.51GB
nvcr.io/nvidia/tensorflow   20.03-tf2-py3         9af3e368023b   22 months ago   7.44GB

動作確認

適当なDockerイメージをpullして移行先のdockerディレクトリの容量が増えているか確認します。

$ cd
$ sudo du -s docker
53376496        docker
$ docker pull centos
$ sudo du -s docker
53627380        docker

ちょっと容量が増えているので、ちゃんとディレクトリが移行できているのがわかります。

もとのディレクトリ削除

もとのディレクトリは、不要なら以下のコマンドで削除しておくと容量節約できます。

$ sudo rm -rf /var/lib/docker

まとめ

Dockerイメージの格納場所の変更方法に関して記載しました。

参考リンク

http://kazuhito-m.github.io/tech/2016/12/01/move-docker

https://github.com/atinfinity/lab/wiki/change_docker_image_directory

Discussion

shmpwkshmpwk

保存先を

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -g /home/<username>/docker/docker

とすると、

Flag --graph has been deprecated, Use --data-root instead
the "graph" config file option is deprecated; use "data-root" instead

というwarningで sudo systemctl start dockerが失敗するので、エラーで言われている通り、

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --data-root /home/<username>/docker/docker

と直すと動きました。

karaage0703karaage0703

@shmpwk さん
ありがとうございます!試してから返信しようかと思いましたが、なかなか時間がとれず。
記事中に、注記として追記させていただきました!