【Docker】ボリューム・バインド・一時メモリ(tmpfs)マウントの概要・違いを徹底解説

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • ボリュームマウント」「バインドマウント」「tmpfsマウント」の概要・違いを知りたい
  • 上記マウントを実行できるコマンド操作方法が知りたい
目次

【Docker】マウントとは?

マウントとは、PCに接続している周辺機器・外部記憶装置等をOSに認識させ、利用可能な状態にすることです。

例えば、USBメモリをPCに接続すると、USBメモリ内のフォルダが開けるようになりますね。これはUSBメモリをPCにマウントしたことを指します。

Dockerコンテナ内に格納されたデータは、コンテナを停止しても消えることはありませんが、コンテナを削除した場合にはデータも併せて消えてしまいます。

コンテナは、ソフトウェアのバージョンアップに伴い削除するのが一般的です。頻繁に作成と削除を繰り返し行うため、コンテナ内にあるデータは、コンテナ外部で管理するのが好ましいと言えます。

Dockerのマウント機能を利用すると、コンテナ内のデータをPC(ホスト)のファイルシステムに紐付けることができるようになるため、コンテナの作成・削除を繰り返すライフサイクルとは切り離して、データを永続的に管理できるようになります。

【Docker】ボリューム・バインド・tmpfsマウントの仕組み・違い

Dockerに記憶領域をマウントするには、3種類の方法があります。以下、1つずつ確認していきましょう。

  • ボリュームマウント
  • バインドマウント
  • 一時メモリ(tmpfs)マウント

ボリュームマウント(Volume Mount)

Docker Engine管理下にボリュームを作成し、ディスクとしてコンテナにマウントすることをボリュームマウントと呼びます。

ボリュームマウントの場合、Docker Engine管理下にあるため、ユーザーがファイルの場所を意識する必要がありません。そのため、PCでの操作のように、ファイルを誤って消すようなミスが起こりづらいと言えます。

また、Windows、Mac、LinuxにおけるOSによる異なるコマンド操作の影響を受けないというメリットがあります。例えば、MacとWindowsのコマンド操作方法を見ると、ディレクトリの指定方法が異なる等があります。後述するバインドマウントの場合、Windowsユーザーが作成したコンテナをMacユーザーに配る場合、ディレクトリ指定コマンドを修正する必要がありますが、ボリュームマウントの場合はそれが不要になります。

このようにボリュームマウントは手軽な一方で、注意が必要な点が1点あります。それは、マウントしたデータの編集方法に制約がある点です。ボリュームマウントは、コンテナを経由せずに直接ボリュームにアクセスすることができません。そのため、マウントしたファイルを編集する場合、コンテナを経由して編集する前提となります。

上記のような制約のもと、更新頻度の少ないデータをマウントする場合において、ボリュームマウントは有効であると言えます。

バインドマウント(Bind Mount)

DockerをインストールしたPC内のように、Docker Engineの管理下にない既存ディレクトリ(デスクトップやドキュメント等)をコンテナにマウントすることをバインドマウントと呼びます。

バインドマウントは、ホスト側の領域にマウントするため、マウント先のファイルを直接開いたり編集することが可能です。そのため、頻繁に更新するデータの場合、バインドマウントを適用することが推奨されます。

一時メモリマウント(Tmpfs Mount)

メモリをマウント先に指定する方法を一時メモリ(tmpfs)マウントと呼びます。

ディスクではなく、メモリをマウント先に指定するため、ファイルの読み書きが高速に実行できるというメリットがあります。

一方で、一時的なメモリ領域を活用してデータを保存することになるため、ここに保存したデータは、コンテナ停止やホストを再起動した際に消滅してしまうことに注意が必要です。

【コマンド操作実践】ボリュームマウント

ボリュームマウントに関連するコマンド操作について言及します。

ボリューム作成

Docker Engine管理下にボリュームを作成する場合、以下のコマンドを実行します。

docker volume create <ボリューム名>

ボリューム一覧を表示

ボリュームを一覧表示する場合、以下のコマンドを実行します。

docker volume ls

ボリュームの詳細情報を確認

指定のボリュームの詳細情報を表示する場合、以下のコマンドを実行します。

コマンド

docker volume inspect <ボリューム名>

出力イメージ

[
    {
        "CreatedAt": "2024-12-31T22:43:03Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/test/_data",
        "Name": "test",
        "Options": {},
        "Scope": "local"
    }
]

ボリュームを削除

指定したボリュームを削除する場合、以下のコマンドを実行します。

docker volume rm <ボリューム名>

マウントされていないボリュームを全て削除

マウントしていないボリュームを一括削除する場合、以下のコマンドを実行します。

docker volume prune

【コマンド操作実践】バインドマウント

以下の設定情報のもとバインドマウントを実践する方法について示します。マウント先のディレクトリは事前に作成した上で実行するようにしましょう。

マウント設定

設定項目
コンテナ内のパス/usr/local/abc/folder
ホスト側のパス/User/Desktop/TestFolder
コンテナ名container_name
イメージ名image_name
ポート番号8090

コマンド(ひな型)

docker run --name <コンテナ名> -d -p <ポート番号> -v <ホスト側のパス>:<コンテナ内のパス> <イメージ名>

コマンド(実例)

docker run --name container_name -d -p 8090:80 -v /User/Desktop/TestFolder:/usr/local/abc/folder image_name

【参考】Docker関連記事・おすすめ学習法

【厳選】Dockerの学習におすすめの教材

Dockerについて詳しく学習したいという方向けにおすすめの教材をご紹介します。厳選した教材をこちらにまとめていますため併せてご覧下さい。

Docker関連記事一覧

当サイトではDockerに関する記事を多数投稿しています。是非ご覧ください。

【Docker】記事タイトル
Dockerとは|仮想化技術との違い・基本的仕組み・できること
Dockerイメージ・コンテナの仕組みと違い
イメージの取得・一覧表示・削除
コンテナの実行・一覧表示・停止・削除
Dockerfileとは|書き方・コマンド一覧・イメージ作成手順
イメージ作成・DockerHubへの公開手順
マウント方法|ボリューム・バインド・tmpfsマウント
Docker Compose|概要・使い方・YAMLファイルの記述方法
【実践】Docker Composeを用いてWordpress構築

最後に

この記事が気に入ったら
フォローしてね!

目次