docker volume createコマンドの使い方(実例で解説)

Docker公式ロゴ3a
©2023 Docker Inc. All rights reserved

 本記事はDocker ver24.0.7の環境で確認しています。

 このコマンドは、Dockerのデータボリュームを作成する際に使用します。

 作成したDockerのデータボリュームは、コンテナ起動時に指定することで、コンテナ内部から利用することが可能となります。

 また、コンテナが削除されても、Dockerのデータボリューム上の更新データは削除されません。

 Dockerのデータボリュームに関しましては別記事「Dockerのデータボリュームについてもう少し詳しい説明」をご参照下さい。

docker volume createコマンドのフォーマットとオプション

フォーマット

docker volume create [オプション] [データボリューム名]

主なオプション一覧

オプション概説
-d, --driver=""データボリューム用のボリュームドライバを
指定
--name=""このオプションでデータボリューム名を指定
することも可能
-o, -opt=[]データボリューム用のボリュームドライバに
固有のオプションを指定する場合に使用する
--label=[]データボリュームにメタデータとしてラベル
を付与する

※Swarm関連のオプションは省略

コマンド例

$ docker volume create -d local testvol01

docker volume createコマンドの主な使い方

 以下で実例をまじえたコマンドの使い方を解説していきたいと思います。

実例では、Ubuntuの公式イメージにより起動したコンテナ(testvm)を使用します。

コンテナは「docker run -dit --init --name testvm ubuntu」で起動します。

※「--rm」オプションを付けておりませんので、ご利用後はコンテナ削除をお忘れなく。

基本事項の解説

 コンテナで利用可能なDockerのデータボリュームを作成します。

 通常では、コンテナ内でディレクトリやファイルを作成や更新しても、コンテナを削除してしまいますと、全て消えてしまいます。

 でも、Dockerのデータボリュームを明示的に作成して、その領域をコンテナで使用した場合、コンテナを削除してもデータボリューム内のファイルは消えません。

 コンテナ内で更新されるデータや動的コンテンツなどは、Dockerのデータボリューム内に作成した方が良いです。

 このコマンドは、DockerのクライアントとデーモンのAPIバージョンが1.21以上で使用可能です。(Swarm関係のオプションは1.24以上)

DockerのAPIバージョンはdocker verionコマンドで確認できます。dockerの24.0.7では、APIバージョンは1.43です。

新規にデータボリュームを作成する

 まずは、以下のコマンドでデータボリュームtestvol01を作成します。

 データボリュームはDockerホスト上に作成しますので、ボリュームドライバはlocalを使用します。

$ docker volume create -d local testvol01

 ボリュームドライバを指定しなかった場合は「local」が使われますので、「-d local」オプションは省略しても構いません。

 つまり、下のコマンドでも同じ結果になります。

$ docker volume create testvol01

 作成したデータボリュームは、コンテナ作成時に「-v」オプションで指定して使用します。

 試しに、testvol01データボリュームを使用してコンテナtestvmを起動してみます。「-v」でコンテナ内の「/opt/testvol」をマウントポイントとして指定します。

$ docker run -dit -v testvol01:/opt/testvol --init --name testvm ubuntu

 ベースイメージとしてubuntuイメージを使用しました。

 これで、testvmコンテナ内の/opt/testvolマウントポイントにtestvol01がマウントされた状態でtestvmコンテナが起動されます。

 以下のコマンドで、/opt/testvolが存在することが確認できます。

$ docker exec -it testvm ls -l /opt
total 4
drwxr-xr-x 2 root root 4096 Jul 29  2020 testvol

ボリュームドライバ固有のオプションの指定

 「-o」(もしくは--opt)オプションは、ボリュームドライバ固有のオプションを指定する場合に使用します。

 前項の例のdocker volume createコマンドでは、データボリュームの実領域はDockerホスト上に作成されます。

 ですので、通常に使用するぶんには「-o」オプションを指定する必要はありません。

 固有のオプションを指定する場面としましては、外部ホスト上の領域をNFS経由で利用する場合が挙げられます。

 例えば、IPアドレスが192.168.1.1上の/vol01をrwモードでNFSを利用してデータボリュームをtestvol02として作成する場合は、以下のコマンドを実行します。

$ docker volume create --driver local -o type=nfs -o o=addr=192.168.1.1,rw -o device=:/vol01 testvol02

※このオプションはdocker engineのバージョンが1.13以上で利用可能です

データボリュームにラベルを指定する

 以下のコマンドを実行することで、データボリュームtestvol03に「testlabel=aaa」というラベルが付与されます。

$ docker volume create --label testlabel=aaa testvol03

 docker volume inspectコマンドで、付与したラベルを確認してみます。

$ docker volume inspect testvol03
[
    {
        "CreatedAt": "2023-10-14T00:15:07Z",
        "Driver": "local",
        "Labels": {
            "testlabel": "aaa"
        },
        "Mountpoint": "/var/lib/docker/volumes/testvol03/_data",
        "Name": "testvol03",
        "Options": null,
        "Scope": "local"
    }
]

 「Labels」のところに「"testlabel": "aaa"」と出力されています。

 ラベルでグルーピングすることで、データボリュームの一覧を表示する際などに便利になります。

おわりに

  以上でdocker volume createコマンドの紹介を終わります。

 ご指摘、ご要望などが御座いましたらコメントいただけるとうれしいです。

 他のDockerコマンドの実例付紹介記事は、本サイト内の別記事「Dockerのコマンドの一覧(オリジナルな実例付き)」をご参照ください。

 最後までお読みいただきありがとうございました。

コメント