方法: 1. run コマンドを使用します。構文は「docker run --name test1 -it -v」です。 2. dockerfile の VOLUME 命令を使用してマウント ポイントを作成します。構文は「VOLUME」です。 ["/data1" ,"/data2"]"; 3. コンテナ共有ボリュームを使用します。
このチュートリアルの動作環境: linux7.3 システム、docker-1.13.1 バージョン、Dell G3 コンピューター。
VOLUME 命令を紹介する前に、次のシナリオ要件を見てみましょう:
1. コンテナーは、以下に基づいて作成されます。最後に、コンテナ ファイル システムには、イメージの読み取り専用レイヤと書き込み可能レイヤが含まれており、コンテナ内のプロセス操作のデータ永続性は、コンテナの書き込み可能レイヤに保存されます。コンテナーが削除されると、手動でバックアップしない限り (またはコンテナーに基づいて新しいイメージを作成しない限り) データは失われます。コンテナプロセスによって永続化されたデータはホスト上に保存できますか?この方法では、コンテナーが削除されても、データはまだ存在します。
2. Web アプリケーションを開発する場合、開発環境はホストに対してローカルですが、実行テスト環境は Docker コンテナ上に配置されます。
この場合、ホスト上のファイル (html、js など) を変更した後、それらをコンテナーに同期する必要があります。こちらの方が明らかに面倒です。
3. 複数のコンテナが一連の関連サービスを実行しますが、データを共有したい場合はどうすればよいでしょうか?
これらの問題に対しては、確かにさまざまな解決策を考えることができます。 Docker 自体は、ホスト上のディレクトリをコンテナ内のディレクトリ (マウント ポイントまたはボリュームと呼ばれます) に関連付けることができるメカニズムを提供します。コンテナ上のマウント ポイントの下のコンテンツはホストです。ディレクトリのコンテンツは次のようになります。 Linux システムでのマウント メカニズム。この場合、ホスト上のディレクトリの内容を変更するときに、コンテナを同期する必要はなく、コンテナに対して即座に反映されます。マウント ポイントは複数のコンテナで共有できます。
具体的な実装メカニズムを紹介しましょう。
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」の値は対応するホスト ディレクトリです。このメソッドに対応するホスト ディレクトリが自動的に作成されることがわかりますが、その目的はホスト上で変更することではなく、複数のコンテナで共有することです。
上で紹介した 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 つのマウント ポイントの情報が表示されます。
次に、/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 つのディレクトリがあり、ディレクトリ内の内容は共有されており、いずれかのコンテナが内容を変更すると、他のコンテナもその内容を取得できます。
複数のコンテナでデータ (永続データベース、構成ファイル、データ ファイルなど) を共有する必要がある場合は、特定のデータ コンテナの作成を検討できます。コンテナには 1 つ以上のボリュームがあります。
他のコンテナは、-volumes-from を通じてこのデータ コンテナのボリュームを共有します。
コンテナのボリュームは基本的にホスト上のディレクトリに対応するため、このデータ コンテナを起動する必要はありません。
例: docker run --name dbdata myimage echo "data container"
注: ボリュームがあり、コンテナ間でデータを共有する方が便利ですが、必要な問題もたくさんあります。アクセス許可の制御、データのバックアップ、ボリュームの削除などの解決策が必要です。これらの内容は次回以降の記事で紹介していきます。
推奨される学習: 「docker ビデオ チュートリアル 」
以上がdockerのマウント方法にはどのようなものがありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。