Dockerボリュームは、Dockerコンテナによって作成および使用される永続データを処理するための推奨方法です。Windows上でDockerボリュームを作成する方法を説明し、それらを管理する方法について説明します!
このブログ投稿には、TechSnipsの投稿者であるMatt McElreathが作成した補足ビデオがあります。ご覧いただくか、テキストをご希望の場合は続けてお読みください!
永続データの保存
コンテナ用に永続データを保存する方法はいくつかあります。まず、バインドマウントを使用する方法を紹介します。現在、C:\のdataというフォルダにいます。このフォルダの内容を表示すると、5つのテキストファイルがあることがわかります。

このフォルダをコンテナで利用できるようにするには、コンテナを起動する際にマウントすることができます。
では、docker run
を使用してコンテナを実行してみましょう。インタラクティブモードでこのコンテナを実行し、-V
を指定します。ここでは、データフォルダのパスを指定し、コロンを続けて、このフォルダをマウントしたいコンテナ内のパスを指定します。
これについて、C:\shareddataフォルダを指定します。次に、Windows Server Coreのイメージを指定し、最後に、コンテナ内でPowerShellを実行するように指定します。
新しいコンテナ内に入ったら、C:\の内容をリストアップすると、shareddataフォルダがあることがわかります。

そのフォルダに入って、内容をリストアップします。これは、コンテナホストにある5つのテストファイルです。

I can also create files in this folder, which will be available to other containers or my container host. Let’s go ahead and run a new item to create a file called containertest.

上記のように、新しいファイルがコンテナ内から作成されました。今度は、exit
を実行してこのコンテナを終了します。
docker ps
を実行すると、現在実行中のコンテナはありません。

Dockerボリュームのデータの列挙
では、コンテナホストから再びデータフォルダの内容をリストアップしてみましょう。

コンテナ内で作成されたcontainertestという名前の新しいファイルが見えます。ただし、バインドマウントには限定的な機能がありますので、ボリュームを使用することが推奨されます。ボリュームを使用するためには、同じコマンドを実行しますが、いくつかの小さな違いがあります。ボリュームを指定する部分では、コンテナホストのファイルシステムのパスの代わりに、作成して使用したいボリュームの名前としてhostdataを使用します。
新しいコンテナ内から、C:\の内容をリストアップすると、再びshareddataというフォルダがあることがわかります。

そのフォルダの内容をリスト表示すると、現在は空です。なぜなら、空のボリュームを作成したからです。では、Ctrl-P-Qを実行して、実行中のコンテナから抜けますが、バックグラウンドで実行し続けます。
コンテナホストから、docker volume ls
を実行します。これにより、このコンテナホスト上の現在のボリュームが表示されます。私はhostdataという名前のボリュームを持っていますが、これはdocker run
コマンドで指定したときに作成されました。

docker ps
を実行すると、実行中のコンテナが表示されます。

docker stop
を使用して、そのコンテナを停止します。これで実行中のコンテナはありません。

docker rm
を実行して、停止したコンテナを削除します。もう一度ボリュームをリスト表示すると、hostdataボリュームがまだ利用可能で、新しいコンテナにマウントできることがわかります。

Dockerボリュームの作成
ボリュームを作成する別の方法は、docker volume create
コマンドを使用することです。名前を指定しない場合、Dockerは長いランダムな文字列の名前を与えます。それ以外の場合は、ここで名前を指定できます。私はこのボリュームをlogdataと呼ぶことにします。これにより、ボリュームがリストに表示されます。

それを新しいコンテナにマウントします。もう一度docker run
を使用し、ボリュームに先ほど作成したボリュームを指定し、c:\logdataにマウントします。
コンテナ内から、logdataフォルダに移動して、いくつかのファイルを作成してください。現在、このディレクトリにはファイルがありませんので、いくつか作成してください。
現在、このディレクトリには2つのログファイルがあります。

コンテナが実行中のままである間に、再度Ctrl-P-Qを実行してこのコンテナを終了してください。実行中のコンテナがある状態で、同じボリュームをマウントして新しいコンテナを起動してください。
新しいコンテナでlogdataフォルダのリストを実行すると、2つのログファイルが共有されていることがわかります。

今度は、このコンテナを終了してください。実行中のコンテナが1つあり、終了したコンテナが2つ残っているはずです。

今度は、すべての実行中のコンテナを停止し、docker rm
を実行して終了したコンテナをすべて削除してください。

再度、ボリュームのリストを表示します。ボリュームlogdataは、将来のコンテナにマウントするためにまだ利用可能です。

docker volume
を実行すると、このコマンドの使用方法が表示されます。

Dockerボリュームの検査
すでにcreate
を見てきたので、次はinspect
に移りましょう。 docker volume inspect
をlogdataボリュームに対して実行すると、そのボリュームのプロパティが返されます。マウントポイントは、コンテナホスト上のボリュームの物理パスです。

そのフォルダをInvoke-Item
を使用して開いてみましょう。 logdataフォルダの下には、dataというフォルダがあります。 それを開くと、先ほどコンテナから作成されたファイルが表示されます。

Dockerボリュームの削除
ボリュームを削除するには、docker volume rm
を実行し、削除するボリュームの名前を続けて入力します。
今、ボリュームをリストアップすると、logdataはもうありません。

最後に、prune
を使用して使用されていないローカルボリュームを削除できます。これにより、実行中または停止したコンテナにマウントされていないすべてのボリュームが削除されます。

このコマンドには注意が必要ですので、警告と確認のプロンプトが表示されます。もしY
と入力してエンターキーを押すと、削除されたボリュームが表示されます。
そして、もう一度ボリュームをリストアップすると、すべて削除されていることがわかります。

まとめ
このブログ投稿では、WindowsでのDockerボリュームの管理について概要を理解することができました。Dockerは優れたコンテナプラットフォームです。WindowsのサポートとDockerボリュームの管理スキルを身につければ、あなたは止められない存在になるでしょう!