Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ボリュームマウント

Posted at

概要

ここでは、ボリュームを利用したデータの永続化についてを記載する。
コンテナは、ファイルの作成・更新・削除ができるが、コンテナを削除するとそれらの変更が消失する。
ボリュームは、コンテナ内のデータを永続化するために利用する。

ボリュームマウント

ボリュームとは?

ボリュームは、コンテナ内で指定したファイルシステムのパスをホストOS上に接続できる機能を持つ。
ボリュームは、Docker CLIコマンドやDocker APIから管理することができる。

# Dockerボリュームを作成する。
$ docker volume create my-vol

ボリュームマウント

ボリュームマウントとは、コンテナ内のファイルシステムにホストOS上のボリュームをマウントすること。
ボリュームマウントは、以下を可能とする。

  • コンテナ内のデータの永続化
  • コンテナとホストOSもしくは、その他のコンテナとの間でのデータ共有

ボリュームマウントを設定する

まずは、コンテナ内のディレクトリをマウントするボリュームを作成する必要がある。
docker volume createコマンドからボリュームを作成できる。

$ docker volume create todo-db

ボリュームマウントは、以下の二つの指定方法がある。

  • --mountフラグ(推奨)

    $ docker run -dp 127.0.0.1:3000:3000 --mount type=volume,src=todo-db,target=/etc/todos getting-started
    
    • オプション説明
      • type: マウントの形式を指定する。(volume, bind, tmpfs
      • src: マウント元のボリュームを指定する。今回の場合は、sample-volumeにマウントするため、これを指定している。
      • target: コンテナ内のファイルシステム上のマウント先のディレクトリを指定する。
  • --volumeフラグ

    $ docker run -dp 127.0.0.1:3000:3000 -v todo-db:/etc/todos
    
    • オプション説明

      —-volumeもしくは、-vフラグの場合には、:で区切られた3つのフィールドで構成される。

      • field1: ボリューム名を指定する。(無名ボリュームの場合には省略する。)
      • field2: コンテナ内のファイルシステム上のマウント先のディレクトリを指定する。
      • field3: roのようなオプションを指定する。

上に示した方法で、コンテナを起動することで、コンテナのファイルシステムとボリュームとのマウントを設定できる。
コンテナを生成し直しても、アプリケーションで生成されたデータは保持されたままとなる。

ボリュームの位置を確認する

実際にボリュームが保存されている場所は、docker volume inspectコマンドで調べることができる。

$ docker volume inspect todo-db
[
    {
        "CreatedAt": "2023-12-29T06:12:40Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/todo-db/_data",
        "Name": "todo-db",
        "Options": {},
        "Scope": "local"
    }
]

ホストOS上のMountpointに保存されている。

マウント元のボリュームを確認する

コンテナ名からマウント元のボリュームを確認することができる。

$ docker inspect db_container
... # 長すぎるので省略
"Mounts": [
            {
                "Type": "volume",
                "Name": "todo-db",
                "Source": "/var/lib/docker/volumes/todo-db/_data",
                "Destination": "/etc/todos",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ],
...

名前付きボリューム

コンテナの起動時にボリュームを生成することができる。
通常は、ボリュームを作成し、作成したボリュームを指定してコンテナを起動することでボリュームマウントが行われる。
docker runコマンドで名前付きボリュームを指定すると、コンテナ起動時にボリュームが生成され、自動的にマウントされる。

  • -vフラグ

    :で区切られた3つのフィールドを指定する。

    • myvol
      • ボリューム名を指定する。
      • 無名のボリュームにする場合は省略する。
    • /app
      • コンテナ内のマウントするファイルシステムを指定する。
$ docker run -d \
  -v myvol2:/app \
  nginx:latest
  • **--mountフラグ**

    複数のキーとバリューのペアで構成される。

    • source
      • ボリューム名を指定する。
      • 無名のボリュームにする場合は省略する。
    • target
      • コンテナ内のマウントするファイルシステムを指定する。
$ docker run -d \
  --mount source=myvol2,target=/app \
  nginx:latest

参考文献

ボリュームの使用 — Docker-docs-ja 24.0 ドキュメント

0
0
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

Qiita Advent Calendar is held!

Qiita Advent Calendar is an article posting event where you post articles by filling a calendar 🎅

Some calendars come with gifts and some gifts are drawn from all calendars 👀

Please tie the article to your calendar and let's enjoy Christmas together!

0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?