Docker の使い方(その4:ボリューム)

この記事は最終更新日から 2年以上 が経過しています。

前回、「Docker の使い方(その3:コンテナイメージ)」の続きです。今回はボリュームについてです。

ボリューム

コンテナは作り直すと中身が初期状態に戻ってしまいます。 ですが、コンテナの中のアプリケーションが作成したファイルなど、残しておいてほしいファイルもあると思います。 例えばデータベースに保存されているデータなどです。 コンテナを作り直してもファイルが消えないようにするためには、コンテナの中ではなく、コンテナの外にファイルを作成する必要があります。 そこで登場するのがボリュームです。

ボリュームは、コンテナと接続(マウント)して使用します。 1つのコンテナが複数のボリュームを使用することもできますし、 複数のコンテナが1つのボリュームを共有するということもできます。

ボリュームには主に2つのタイプがあります。名前付きボリュームとバインドマウントです。

名前付きボリューム

Docker 内にコンテナとは別の保存用の領域を作ることができます。 イメージ的には外付けのストレージのような感じでしょうか。 コンテナとは別れてるので、コンテナを作り直しても影響はありません。

named_volume.png

名前付きボリュームという名の通り名前が付けられるので、わかりやすい名前を付けましょう。 名前を指定しない場合は、名前がハッシュ値になります。

ちなみにですが、名前付きボリュームを作成した後に、名前を変更するコマンドはいまのところありません。 名前を変更するには、新しい名前でボリュームを作り、古いボリュームの中身を新しいボリュームに丸ごとコピーして、古いボリュームを削除するという作業が必要になるので注意してください。

名前付きボリュームを作成するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。

Docker Desktop で名前付きボリュームを作成する

Docker Desktop で名前付きボリュームを作成するには、Docker Desktop の「Volumes」から「New volume」ボタンをクリックします。

volume_new.png

コマンドで名前付きボリュームを作成する

コマンドで名前付きボリュームを作成するには、docker volume create コマンドを使用します。

書式
docker volume create <ボリュームの名前>
例:名前付きボリューム「test-data」を作成する
docker volume create test-data

コンテナとの接続

コンテナと接続するには、コンテナ作成時(docker container create / docker container run コマンド)に、-v オプションを使用します。 名前付きボリュームがまだ作成されていない場合は、自動的に作成されます。

書式:docker container create / docker container run コマンドで
-v <名前付きボリューム名>:<コンテナ内のパス>
例:コンテナイメージ「docker/getting-started」を起動時に、
名前付きボリューム「test-data」を、コンテナ内のパス「/usr/local/data」と接続する
docker container run -d -v test-data:/usr/local/data docker/getting-started

バインドマウント

アプリケーションのソースコード(スクリプト言語の場合)や実行ファイル等は、通常は動作するサーバー(つまりコンテナ)の中に無ければ動きません。 しかしながら、ソースコードに修正を加える度にコンテナを作り直していては作業も大変ですし時間もかかってしまいます。 そこで、ソースコードはホストに置いておき、そのソースコードをコンテナ側から参照させるということが可能です。 こうすることで開発はホストで行うことができ、コンテナを毎回作り直す必要が無くなります。

バインドマウントを使用すると、ホストにあるファイルを、コンテナから参照することができるようになります。

bindmount.png

コンテナとの接続

コンテナと接続するには、コンテナ作成時(docker container create / docker container run コマンド)に、-v オプションを使用します。 名前付きボリュームと同じ書式ですが、指定するのはボリュームの名前ではなく、ホスト内のパスになります。

書式:docker container create / docker container run コマンドで
-v <ホスト内のパス>:<コンテナ内のパス>
例:コンテナイメージ「docker/getting-started」を起動時に、
ホスト内のパス「C:\Users\Test\data」を、コンテナ内のパス「/usr/local/data」と接続する
docker container run -d -v /C/Users/Test/data:/usr/local/data docker/getting-started

ボリュームの一覧を表示する

ボリュームの一覧を表示するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。

Docker Desktop でボリュームの一覧を表示する

Docker Desktop でボリュームの一覧を表示するには、Docker Desktop の左メニューの「Volumes」をクリックします。

volumes.png

コマンドでボリュームの一覧を表示する

コマンドでボリュームの一覧を表示するには、docker volume ls コマンドを使用します。

書式
docker volume ls
出力内容
DRIVER    VOLUME NAME
local     test-data

ボリュームの詳しい情報を表示する

ボリュームの詳しい情報を表示したい場合は、docker volume inspect コマンドを使用します。

書式
docker volume inspect <ボリューム名>
例:ボリューム「test-data」の詳しい情報を表示する
docker volume inspect test-data
出力内容
[
    {
        "CreatedAt": "2022-01-23T17:52:56Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/test-data/_data",
        "Name": "test-data",
        "Options": null,
        "Scope": "local"
    }
]

ボリュームの削除

ボリュームはコンテナから使用中の場合は削除できませんが、使用されていない場合は削除できます。 ボリュームを削除するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。

Docker Desktop でボリュームを削除する

Docker Desktop でボリュームを削除するには、Docker Desktop の「Volumes」から削除したいボリュームのメニューを表示し、「Remove」をクリックします。

volume_remove.png

コマンドでボリュームを削除する

コマンドでボリュームを削除するには、docker volume rm コマンドを使用します。

書式
docker volume rm <ボリューム名>
例:ボリューム「test-data」を削除する
docker volume rm test-data

コマンドで未使用のボリュームを全て削除する

未使用のボリュームがたくさんあって、1つ1つ削除するのがメンドウな場合には、 docker volume prune コマンドが便利です。 このコマンドを使用すると、未使用のボリュームが全て削除されます。

書式
docker volume prune

参考サイト

関連記事

最近では、アプリケーションの実行環境の構築に Docker を使うことも珍しくなくなりました。Docker は便利ではあるのかもしれませんが、難しく感じて敬遠されている人もいるのではないでしょうか。その感覚はおそらく間違っていません。実際、知れば知るほど奥が深い技術だと感じてしまいます。もはや沼というか深淵を覗いている ...
前回、「Docker の使い方(その1:概要)」の続きです。今回はコンテナについてです。コンテナの一覧を表示するコンテナの一覧を表示するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。Docker Desktop でコンテナの一覧を表示するDocker Desktop でコンテ ...
前回、「Docker の使い方(その2:コンテナ)」の続きです。今回はコンテナイメージについてです。コンテナイメージの一覧コンテナイメージの一覧を表示するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。Docker Desktop でコンテナイメージの一覧を表示するDocker ...
前回、「Docker の使い方(その4:ボリューム)」の続きです。今回はネットワークについてです。複数のコンテナを連携させるこれまでは1つのコンテナについて説明してきましたが、複数のコンテナを連携させたい場合はどうすればよいでしょうか。例えば、Webサーバーコンテナと、DBサーバーコンテナを通信させたいような場合です。 ...
前回、「Docker の使い方(その5:ネットワーク)」の続きです。今回は Docker Compose についてです。Docker Compose とは?ここまで Docker の基本的な操作について説明してきました。コンテナを使ってアプリケーションを起動するためには、コンテナイメージからコンテナを起動し、そのコンテ ...
Docker は、構成を気軽に組み替えたりできるので、とても便利ですよね。Windows で Docker を使って開発している方も多いと思うのですが、個人的にはどうしても気が乗らない理由がありました。それは処理速度です。遅い。遅すぎる。めちゃくちゃ遅い。つらい。耐えられない。。。ということで調査しました。いろいろと調 ...

記事検索

最新記事

人気記事

RSSフィード

お知らせ

フィードバック

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

匿名でフィードバックする
匿名でフィードバックする

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

なお、このフォームから入力された内容について、管理者から返信はできませんので注意してください。 もし、管理者からの返信が必要であれば、X(Twitter) もしくは、お問い合わせより、お願いします。

  • フィードバックの送信が完了しました。