ウィンドウズマックソフトウェア設定セキュリティ生産性リナックスAndroidパフォーマンス設定Apple すべて

ホストとDockerコンテナ間でフォルダを共有する方法

編集済み 2 数か月前 によって ExtremeHow 編集チーム

ドッカーデスクトップフォルダーファイル共有ホストコンテナ設定デブオプスソフトウェア開発クラウドコンピューティング仮想化

翻訳が更新されました 2 数か月前

Dockerは、コンテナ内でアプリケーションを開発およびデプロイするための強力なツールです。コンテナは隔離された環境であり、同じマシン上の他のプロセスからの干渉なしにアプリケーションを実行できます。Dockerを使用する際には、ホストマシンとDockerコンテナ間でファイルまたはフォルダを共有する必要がある状況に直面することがあります。このガイドでは、ホストマシンとDockerコンテナ間でフォルダを共有するプロセスを詳細かつ包括的に説明します。基本的な概念をカバーし、例を示し、潜在的な課題についても考察します。

Dockerボリュームの理解

フォルダを共有する手順に入る前に、Dockerがデータ永続性をどのように処理するかを理解することが重要です。Dockerコンテナは短命であり、シャットダウンすると保存されているデータが失われる可能性があります。Dockerはデータを管理および永続化するためのさまざまなメカニズムを提供しており、その主要な方法の1つがボリュームです。Dockerボリュームはコンテナがアクセスできる永続的なデータストレージであり、コンテナのライフサイクルの外に存在します。

Dockerはボリュームを独立して管理するため、それらは特定のコンテナから分離されています。これにより、コンテナを削除してもボリューム内のデータは無傷のままであり、別のコンテナにアタッチできるため、データの耐久性に大きく貢献します。ボリュームは、ホストとDockerコンテナ間でフォルダを共有するのに理想的です。コンテナからの独立性と明示的な制御が可能だからです。

Dockerボリュームの種類

Dockerは異なる用途に対してさまざまなタイプのボリュームをサポートしています:

フォルダを共有するためのバインドマウントの使用

ホストとDockerコンテナ間でフォルダを共有する最も簡単な方法は、バインドマウントを使用することです。以下の手順に従って、例を見てみましょう:

バインドマウントの使用方法のステップバイステップガイド

  1. ホスト上にディレクトリを作成する:

    Dockerと共有したいディレクトリをホストシステム上に作成します。たとえば、/Users/username/sharedというディレクトリを作成できます。

  2. Docker runコマンドを修正する:

    次に、バインドマウントを含めるようにDocker runコマンドを更新します。パスのマッピング後に-vまたは--volumeフラグを使用します。たとえば、/Users/username/sharedをコンテナ内の/sharedにマウントするには、コマンドは次のようになります:

    docker run -v /Users/username/shared:/shared my-image

    この例では、my-imageは実行するDockerイメージを指します。マウントにより、コンテナ内の/sharedで行われたすべての変更がホストの/Users/username/sharedフォルダに反映されます。

  3. コンテナ内の共有フォルダにアクセスする:

    バインドマウントを使用してコンテナが実行されている場合、コンテナ内の/sharedで変更されたファイルはホストの/Users/username/sharedディレクトリに直接影響を与えます。そしてその逆も可能です。

バインドマウント使用例

Nginxウェブサーバを使用して、ホストとDockerコンテナ間でファイルを共有する実用的な例を示します。ホストマシン上のディレクトリにあるHTMLファイルを提供したい場合は次のようにします:

  1. 共有ディレクトリを設定する:
    • ホスト上にwebsiteという名前のディレクトリを作成します。
    • websiteディレクトリ内にコンテンツを含むindex.htmlファイルを追加します。
  2. Nginxコンテナをバインドマウントで実行する:

    次のコマンドを使用して、websiteディレクトリを/usr/share/nginx/htmlディレクトリにバインドマウントします:

    docker run --name my-nginx -v "$PWD"/website:/usr/share/nginx/html:ro -d nginx

    :roオプションは、コンテナ内でバインドマウントを読み取り専用にします。

  3. Nginxサーバにアクセスする:

    ウェブブラウザでhttp://localhostを訪れて、ホストの共有ディレクトリからNginxが提供するindex.htmlファイルを表示します。

Dockerボリュームを使用してフォルダを共有する

バインドマウントはホストファイルシステム上のパスに直接関連していますが、Dockerボリュームはより抽象的でDockerによって管理されます。Dockerボリュームの作成と使用方法を学びましょう:

Dockerボリュームの作成

以下のようにdocker volume createコマンドを使用して新しいボリュームを作成します:

docker volume create my-volume

このコマンドはmy-volumeという名前のボリュームを作成し、Dockerが管理します。

コンテナにボリュームをアタッチする

作成したボリュームをコンテナにアタッチするには、次のコマンドを使用します:

docker run -v my-volume:/app/data my-image

この例では、my-volumeをコンテナの/app/dataにマウントします。/app/dataに書き込まれたデータは、コンテナが停止または削除されてもmy-volumeに残ります。

ボリューム使用例

コンテナの再起動に渡ってデータベースを保存したい状況を考えてみましょう。データベースコンテナのデータディレクトリをマウントするためにボリュームを使用できます:

  1. Dockerボリュームを作成する:
    docker volume create db-data
  2. ボリュームを使用してデータベースコンテナを実行する:
    docker run -d --name my-database -v db-data:/var/lib/mysql mysql:5.7

    この場合、/var/lib/mysqlディレクトリ内のデータ変更はdb-dataボリュームに保存されます。

  3. データの耐久性:

    my-databaseコンテナを停止して削除しても、db-dataボリュームはデータを保持し、別のインスタンスにアタッチする準備ができています。

バインドマウントの問題のデバッグとトラブルシューティング

バイン드マウントの設定は簡単にできますが、問題を引き起こす可能性もあります。一般的な問題とその解決策をいくつか挙げます:

結論とベストプラクティス

ホストとDockerコンテナ間のフォルダ共有は、開発、データ永続性、およびコラボレーションを促進する基本的な機能です。使用ケースに応じて、どのタイプのマウント(バインドマウントまたはボリューム)が適切かを判断することが重要です。バインドマウントは直接的なパス制御を提供し、Dockerボリュームはポータブルで長期的なデータ永続性のために管理しやすいです。

検討すべきベストプラクティスをいくつか示します:

これらの洞察、方法、および例を通じて、ホストとDockerコンテナ間のフォルダ共有を効果的に処理するための準備ができているはずです。プロジェクトのニーズに合わせて方法をさらに探求し、修正することを自由に行ってください。

記事の内容に誤りがある場合, あなたは


コメント