LoginSignup
4
4

Dockerユーザー必見!データ消失を防ぐマウント方法ガイド

Last updated at Posted at 2024-05-17

Docker におけるマウントについて学んだので、自分なりにまとめてみました。

そもそもなぜマウントが必要なのか?

A. コンテナはホスト環境から独立したシステムを持ち、一度破棄すると内部のデータやファイルなどが失われるからです。

コンテナの外部にマウントすることで、コンテナの一時的な破棄が問題ではなくなります。

そのため、コンテナ自体のアップデートが容易になったり、コンテナ間のデータ共有が可能になったりと様々なメリットがあります。

コンテナでは、「実行するシステム」と「扱うデータ」は別に管理することが推奨されます。

要するに、コンテナの外(Dockerホスト もしくは Docker Engine ※後述)でデータを保存しましょう、ということです。

バインドマウントとボリュームマウント

マウントには大きく2つ種類があります。

1. バインドマウント

Docker ホストにあらかじめディレクトリを作っておき、それをマウントする方法です。

メリット

  • Docker ホスト上にあるファイルをコンテナから扱える
  • 作業ディレクトリでの変更を即座に Docker コンテナから参照できるため、開発に便利

2. ボリュームマウント

Docker ホストのディレクトリではなく、Docker Engine上で確保された領域をマウントする方法です。

メリット

  • Docker Engine上で管理されるため、ボリュームの保存場所の物理的な位置を気にしなくていい

    • チームメンバーごとにDocker ホストのディレクトリ構成に差異があっても問題ない
  • Docker コンテナが扱うデータをブラックボックスとして扱える

    • データベースのデータなど、Dcoker ホストから不用意にデータを書き換えたくない場面などに有効

他に、tmpfs マウントも存在しますが、今回は割愛します。
気になる人はDocker 公式ドキュメントを参照してください。

ボリュームの作成とマウントの実行

まずボリュームを作成します。

docker volume create --name ボリューム名

作成したボリュームをマウントします。2種類のオプションがあります。

  • -v オプション
-v マウント元:マウント先
  • --mount オプション
--mount type=マウントの種類(bind or volume),src=マウント元,dst=マウント先

mount オプションが推奨される理由

--mount オプションは Docker バージョン17.06からサポートされました。

どちらを使っても結果は同じですが、以下の理由から --mount の方が推奨されています。

1. マウントの種類(バインド or マウント)が明示されている

  • -v オプションでは、マウント元が 「/」 から始まるとバインドマウント、そうでないときはボリュームマウントとしてマウントされます。これは非常に分かりにくく、間違える可能性が高いです

2. ボリュームが存在しないときに新規作成されない

  • -v オプションではその場でボリュームを作成することもできるが、タイプミスしたとき致命的な問題になりうる
  • --mount オプションではボリュームが存在しないときは新規作成せず、エラーが発生する

参考

  • さわって学ぶクラウドインフラ docker基礎からのコンテナ構築

  • Docker&仮想サーバー完全入門 Webクリエイター&エンジニアの作業がはかどる開発環境構築ガイド

  • Docker 公式ドキュメント

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