Docker の使い方(その4:ボリューム)
前回、「Docker の使い方(その3:コンテナイメージ)」の続きです。今回はボリュームについてです。
ボリューム
コンテナは作り直すと中身が初期状態に戻ってしまいます。 ですが、コンテナの中のアプリケーションが作成したファイルなど、残しておいてほしいファイルもあると思います。 例えばデータベースに保存されているデータなどです。 コンテナを作り直してもファイルが消えないようにするためには、コンテナの中ではなく、コンテナの外にファイルを作成する必要があります。 そこで登場するのがボリュームです。
ボリュームは、コンテナと接続(マウント)して使用します。 1つのコンテナが複数のボリュームを使用することもできますし、 複数のコンテナが1つのボリュームを共有するということもできます。
ボリュームには主に2つのタイプがあります。名前付きボリュームとバインドマウントです。
名前付きボリューム
Docker 内にコンテナとは別の保存用の領域を作ることができます。 イメージ的には外付けのストレージのような感じでしょうか。 コンテナとは別れてるので、コンテナを作り直しても影響はありません。
名前付きボリュームという名の通り名前が付けられるので、わかりやすい名前を付けましょう。 名前を指定しない場合は、名前がハッシュ値になります。
ちなみにですが、名前付きボリュームを作成した後に、名前を変更するコマンドはいまのところありません。 名前を変更するには、新しい名前でボリュームを作り、古いボリュームの中身を新しいボリュームに丸ごとコピーして、古いボリュームを削除するという作業が必要になるので注意してください。
名前付きボリュームを作成するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。
Docker Desktop で名前付きボリュームを作成する
Docker Desktop で名前付きボリュームを作成するには、Docker Desktop の「Volumes」から「New volume」ボタンをクリックします。
コマンドで名前付きボリュームを作成する
コマンドで名前付きボリュームを作成するには、docker volume create
コマンドを使用します。
docker volume create <ボリュームの名前>
docker volume create test-data
コンテナとの接続
コンテナと接続するには、コンテナ作成時(docker container create
/ docker container run
コマンド)に、-v
オプションを使用します。
名前付きボリュームがまだ作成されていない場合は、自動的に作成されます。
docker container create
/ docker container run
コマンドで
-v <名前付きボリューム名>:<コンテナ内のパス>
名前付きボリューム「test-data」を、コンテナ内のパス「/usr/local/data」と接続する
docker container run -d -v test-data:/usr/local/data docker/getting-started
バインドマウント
アプリケーションのソースコード(スクリプト言語の場合)や実行ファイル等は、通常は動作するサーバー(つまりコンテナ)の中に無ければ動きません。 しかしながら、ソースコードに修正を加える度にコンテナを作り直していては作業も大変ですし時間もかかってしまいます。 そこで、ソースコードはホストに置いておき、そのソースコードをコンテナ側から参照させるということが可能です。 こうすることで開発はホストで行うことができ、コンテナを毎回作り直す必要が無くなります。
バインドマウントを使用すると、ホストにあるファイルを、コンテナから参照することができるようになります。
コンテナとの接続
コンテナと接続するには、コンテナ作成時(docker container create
/ docker container run
コマンド)に、-v
オプションを使用します。
名前付きボリュームと同じ書式ですが、指定するのはボリュームの名前ではなく、ホスト内のパスになります。
docker container create
/ docker container run
コマンドで
-v <ホスト内のパス>:<コンテナ内のパス>
ホスト内のパス「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」をクリックします。
コマンドでボリュームの一覧を表示する
コマンドでボリュームの一覧を表示するには、docker volume ls
コマンドを使用します。
docker volume ls
DRIVER VOLUME NAME local test-data
ボリュームの詳しい情報を表示する
ボリュームの詳しい情報を表示したい場合は、docker volume inspect
コマンドを使用します。
docker volume inspect <ボリューム名>
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」をクリックします。
コマンドでボリュームを削除する
コマンドでボリュームを削除するには、docker volume rm
コマンドを使用します。
docker volume rm <ボリューム名>
docker volume rm test-data
コマンドで未使用のボリュームを全て削除する
未使用のボリュームがたくさんあって、1つ1つ削除するのがメンドウな場合には、 docker volume prune
コマンドが便利です。
このコマンドを使用すると、未使用のボリュームが全て削除されます。
docker volume prune