1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Dockerにボリュームについて調べた

1
Posted at

Dockerでファイルを管理する方法

  • 以下の3種類

ボリューム

  • Dockerが管理する領域にファイルを永続化する方法

  • バインドマウントよりも優れている点が多く、ファイルを永続化する際の第1案

    バインドマウントの利用より

    今から新たに Docker アプリケーションを開発しようとする場合は、これにかわって 名前つきボリューム の利用を考えてみてください。

  • Docker CLI で操作できる

  • リモートホストにファイルを保存したり、暗号化して保存することもできる

バインドマウント

  • Dockerが稼働するホスト上の任意のディレクトリにファイルを永続化する方法

  • Docker CLI で操作できない

  • Dockerが動作するホスト上にしかファイルを保存できない

tmpfs

  • 一時的な情報を保存する方法

  • コンテナを削除するとファイルは消える

-v ( --volume ) と --mount の違い

  • コンテナのファイル管理方法を指定するオプション。書式が異なる

  • --mountの方が設定内容がよりわかりやすく、推奨

    バインドマウントの利用より

    はじめて利用する方は--mountを利用してください。

-v, --volumne で指定する場合

  • オプションを:で区切って、1行で記載する。
<マウント対象>:<コンテナのディレクトリパス>:<オプション>

マウント対象

  • ボリュームとバインドマウントで意味合いが違う。

  • ボリュームの場合、名前付ボリュームの場合の名前。
    省略可能で、その場合、匿名ボリュームを指定したものとして扱われる。

  • バインドマウントの場合の場合、ファイルをマウントする__ホストサーバー__のディレクトリのパス。
    ホスト上にディレクトリが存在しない場合、自動で作成される ( --mountで指定する場合と挙動が異なる )

コンテナのディレクトリ

  • ファイルをマウントする__コンテナ__のディレクトリパス

オプション

  • privateまたはroを指定した場合、読み取り専用扱いとなる

--mount で指定する場合

  • <key> = <value>形式で記載する。keyの一覧は以下

type

  • マウントの種類
  • 指定可能な値はbind(バインドマウントの場合), volume(ボリュームの場合), tmpfs(一時的な保存)のいずれか

source

  • ボリュームの場合、名前付きボリュームの名前。省略した場合は匿名ボリュームとして扱われる
  • バインドマウントの場合、ホスト上のファイルまたはディレクトリのパス
  • キー名は、srcでもOK
  • ディレクトリが存在しない場合、エラーとなり起動できない ( -v、または --volumeとの違い )

destination

  • コンテナ上でマウントするファイルまたはディレクトリのパス
  • キー名は、dest, targetでもOK

readonly

  • 読み取り専用

動作確認

  • serviceとしてappを作る
  • appは2つのボリュームを利用
  • storage1はボリューム。storage2はバインドマウント
services:
  app:
    volumes:
      - storage1:/storage1
      - /storage2:/storage2:ro

volumes:
  storage1:

この状態でdocker-compose を実行し、

docker-compose up -d

以下のコマンドにより、ボリュームを確認する

docker volume ls

以下の結果が返ってきて、ボリュームが作成されている事が確認できる

$ docker volume ls
DRIVER              VOLUME NAME
local               <プロジェクト名>_storage1

VOLUME_NAMEは自動で生成した名前が設定される。DRIVERはデフォルトのlocalが設定されている。

細かな内容を見たい場合は、docker inspect で確認できる。

docker inspect <プロジェクト名>_storage1

以下の結果が得られ、作成したボリュームのファイルが格納されているディレクトリ等が確認できる

$ docker inspect <プロジェクト名>_storage1
[
    {
        "CreatedAt": "20XX-XX-XXTXX:XX:XXZ",
        "Driver": "local",
        "Labels": {
            "com.docker.compose.project": "<プロジェクト名>",
            "com.docker.compose.version": "<バージョン番号>",
            "com.docker.compose.volume": "storage1"
        },
        "Mountpoint": "/mnt/sda1/var/lib/docker/volumes/<プロジェクト名>_storage1/_data",
        "Name": "<プロジェクト名>_storage1",
        "Options": null,
        "Scope": "local"
    }
]

次に、起動されたコンテナに対して以下のコマンドを実行する

docker inspect <コンテナのID>

以下の結果が得られ、コンテナにボリューム(storage1)とバインドマウント(storage2)の設定がされている

$ docker inspect <コンテナのID>
:
略
:
"Mounts": [
            {
                "Type": "bind",
                "Source": "/storage2",
                "Destination": "/storage2",
                "Mode": "ro",
                "RW": false,
                "Propagation": "rprivate"
            },
            {
                "Type": "volume",
                "Name": "<プロジェクト名>_storage1",
                "Source": "/mnt/sda1/var/lib/docker/volumes/<プロジェクト名>_storage1/_data",
                "Destination": "/storage1",
                "Driver": "local",
                "Mode": "rw",
                "RW": true,
                "Propagation": ""
            }
        ],

以上です! 誤りなどあれば指摘をいただけるとありがたいです!

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?