ホームページ >運用・保守 >Docker >dockerのマウント方法にはどのようなものがありますか?

dockerのマウント方法にはどのようなものがありますか?

WBOY
WBOYオリジナル
2022-01-28 10:23:127291ブラウズ

方法: 1. run コマンドを使用します。構文は「docker run --name test1 -it -v」です。 2. dockerfile の VOLUME 命令を使用してマウント ポイントを作成します。構文は「VOLUME」です。 ["/data1" ,"/data2"]"; 3. コンテナ共有ボリュームを使用します。

dockerのマウント方法にはどのようなものがありますか?

このチュートリアルの動作環境: linux7.3 システム、docker-1.13.1 バージョン、Dell G3 コンピューター。

Docker のマウント方法は何ですか?

VOLUME 命令を紹介する前に、次のシナリオ要件を見てみましょう:

1. コンテナーは、以下に基づいて作成されます。最後に、コンテナ ファイル システムには、イメージの読み取り専用レイヤと書き込み可能レイヤが含まれており、コンテナ内のプロセス操作のデータ永続性は、コンテナの書き込み可能レイヤに保存されます。コンテナーが削除されると、手動でバックアップしない限り (またはコンテナーに基づいて新しいイメージを作成しない限り) データは失われます。コンテナプロセスによって永続化されたデータはホスト上に保存できますか?この方法では、コンテナーが削除されても、データはまだ存在します。

2. Web アプリケーションを開発する場合、開発環境はホストに対してローカルですが、実行テスト環境は Docker コンテナ上に配置されます。

この場合、ホスト上のファイル (html、js など) を変更した後、それらをコンテナーに同期する必要があります。こちらの方が明らかに面倒です。

3. 複数のコンテナが一連の関連サービスを実行しますが、データを共有したい場合はどうすればよいでしょうか?

これらの問題に対しては、確かにさまざまな解決策を考えることができます。 Docker 自体は、ホスト上のディレクトリをコンテナ内のディレクトリ (マウント ポイントまたはボリュームと呼ばれます) に関連付けることができるメカニズムを提供します。コンテナ上のマウント ポイントの下のコンテンツはホストです。ディレクトリのコンテンツは次のようになります。 Linux システムでのマウント メカニズム。この場合、ホスト上のディレクトリの内容を変更するときに、コンテナを同期する必要はなく、コンテナに対して即座に反映されます。マウント ポイントは複数のコンテナで共有できます。

具体的な実装メカニズムを紹介しましょう。

最初に docker run コマンドを渡します

1. 次のコマンドを実行します: docker run --name test -it -v /home/xqh/myimage:/data ubuntu /bin/bash

-v フラグは、コンテナー (コンテナー内のディレクトリー) にマウント ポイント /data を設定し、ホスト上の /home/xqh/myimage ディレクトリーの内容を /data に関連付けます。

このようにして、コンテナーの /data ディレクトリに対する操作とホスト上の /home/xqh/myimage に対する操作は、これら 2 つのディレクトリが実際にホスト ディレクトリを指しているため、リアルタイムで完全に同期されます。

2. コマンドを実行します: docker run --name test1 -it -v /data ubuntu /bin/bash

上記の -v マークは、コンテナーのマウント ポイントを設定するだけです。関連するホスト ディレクトリを指定しません。このとき、docker はホスト上のディレクトリを自動的にバインドします。 docker Inspection コマンドを使用して表示できます。

xqh@ubuntu:~/myimage$ docker inspect test1
[
{
    "Id": "1fd6c2c4bc545163d8c5c5b02d60052ea41900a781a82c20a8f02059cb82c30c",
.............................
    "Mounts": [
        {
            "Name": "0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01",
            "Source": "/var/lib/docker/volumes/0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01/_data",
            "Destination": "/data",
            "Driver": "local",
            "Mode": "",
            "RW": true
        }
    ],

上記の [マウント] の各情報は、コンテナー上のマウント ポイントの情報を記録します。「Destination」の値はコンテナーのマウント ポイント、「Source」の値は対応するホスト ディレクトリです。このメソッドに対応するホスト ディレクトリが自動的に作成されることがわかりますが、その目的はホスト上で変更することではなく、複数のコンテナで共有することです。

2 dockerfile を使用してマウント ポイントを作成する

上で紹介した docker run コマンドの -v フラグによって作成されたマウント ポイントは、作成されたコンテナに対してのみ有効です。 dockerfile の VOLUME ディレクティブを通じてイメージ内にマウント ポイントを作成できるため、イメージを通じて作成されたすべてのコンテナーにマウント ポイントが設定されます。もう 1 つの違いは、VOLUME コマンドによって作成されるマウント ポイントは、ホスト上の対応するディレクトリを指定できず、自動的に生成されることです。

#test
FROM ubuntu
MAINTAINER hello1
VOLUME ["/data1","/data2"]

上記の dockfile ファイルは、VOLUME 命令を通じて 2 つのマウント ポイント /data1 および /data2 を指定します。

この dockerfile によって作成されたイメージによって生成されたコンテナーを表示するには、docker Inspection を使用します。を実行すると、次の情報が表示されます。

"Mounts": [
    {
        "Name": "d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21",
        "Source": "/var/lib/docker/volumes/d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21/_data",
        "Destination": "/data1",
        "Driver": "local",
        "Mode": "",
        "RW": true
    },
    {
        "Name": "6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36",
        "Source": "/var/lib/docker/volumes/6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36/_data",
        "Destination": "/data2",
        "Driver": "local",
        "Mode": "",
        "RW": true
    }
],

2 つのマウント ポイントの情報が表示されます。

3 コンテナーの共有ボリューム (マウント ポイント)

次に、/data1 および /data2 ボリュームを test1 (既に作成されたコンテナー) と共有できる別のコンテナーを作成します。これは docker run で行われます。次のような --volumes-from タグを使用します。

は、

docker run --name test2 -it --volumes-from test1 ubuntu /bin/bash

のように、異なるミラーからのものにすることも、

docker run --name test3 -it --volumes-from test1 myimage /bin/bash
のように、同じミラーからのものにすることもできます。

上記の 3 つ test1、test2、test3 の各コンテナには /data1 と /data2 という 2 つのディレクトリがあり、ディレクトリ内の内容は共有されており、いずれかのコンテナが内容を変更すると、他のコンテナもその内容を取得できます。

4 つのベスト プラクティス: データ コンテナ

複数のコンテナでデータ (永続データベース、構成ファイル、データ ファイルなど) を共有する必要がある場合は、特定のデータ コンテナの作成を検討できます。コンテナには 1 つ以上のボリュームがあります。

他のコンテナは、-volumes-from を通じてこのデータ コンテナのボリュームを共有します。

コンテナのボリュームは基本的にホスト上のディレクトリに対応するため、このデータ コンテナを起動する必要はありません。

例: docker run --name dbdata myimage echo "data container"

注: ボリュームがあり、コンテナ間でデータを共有する方が便利ですが、必要な問題もたくさんあります。アクセス許可の制御、データのバックアップ、ボリュームの削除などの解決策が必要です。これらの内容は次回以降の記事で紹介していきます。

推奨される学習: 「docker ビデオ チュートリアル

以上がdockerのマウント方法にはどのようなものがありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。