ジレンマに直面してA、ドッキングウィンドウコンテナ:
- 容器の運転中に生成されたデータは、容器は、容器が停止して削除された後に、これらのデータが削除され、スタックの一番上の層に配置されます。
- 貧弱な性能が得COW(コピーオンライト)戦略を、使用してドッカ。このようなそこにMySQLのコンテナとして頻繁にI / O処理を持っています。
第二に、解像度の戦略:ときに削除コンテナ(当時行うことができることができます、削除コンテナプラグインコンテナのライフサイクルとは独立したドッキングウィンドウのストレージボリューム(ボリューム)と呼ばれるコンテナストレージファイルシステム、には、ボリュームが削除されていない場合)ボリュームを削除するが、そう乾燥しません。
コンテナ内のディレクトリがホストマシン上のディレクトリにバインドされてみましょう。
、読み取ることができるコンテナの最後の層に書き込まれている下の容器の書き込みデータは、データが/書き込まれ; /データに書き込まれたデータは、ホスト/データディレクトリの下の最後に書かれています。図は次のとおりです。
ホストAはB、下の図に、Cは、ファイルシステムのNFSクライアントです。ホストAは、ホストBのファイルディレクトリB、Cのホスト・ファイル・ディレクトリCのファイルディレクトリ、同じディレクトリはNFSでアクセスされます。
使用ドッキングウィンドウのストレージ・ボリューム機能、ファイルホストAディレクトリAにバインドされたホストA、生成されたデータディレクトリ上で実行されているので、mysqlのコンテナなので、MySQLのコンテナによって生成されたデータは、それはファイル、ディレクトリ、ホストAに格納されたときに、上、その後、NFSへの預金に上。
ホストA上で実行されている容器のMySQLが削除された場合、またはデータで、NFSの存在。
ホストまたは単にMySQLの容器Cを有しているだけでなく、データディレクトリを生成するために、バインドホストまたはホストB CにホストB上で実行されている場合、NFSからデータを取得するためであってもよく、ホストAのデータのでランニングは同じです。
これは、運用・保守は、コンテナが簡単にクラスタ内のすべてのマシン上に展開することができる非常に便利を提供できます。
4つの象限に分割する[状態]、[ストレージを使用してもよいです]。
だけnginxのリバースプロキシサーバーとして、それは店の状態には必要ありません。
三つには、2つの戦略があるのドッキングウィンドウのストレージ・ボリュームが使用するようにしている-v
オプションを選択します。
バインドボリュームをマウント:手動でホストディレクトリを指定します。
コマンド:
docker run -v HOSTDIR:CONTAINERDIR
# docker run --name b1 -it --rm -v /tmp/html:/data busybox:latest
ドッキングウィンドウ管理ボリューム:ドッキングウィンドウは、独自のディレクトリをホストすることを決めました。
コマンド:
docker run -v CONTAINERDIR
# docker run --name b1 -it --rm -v /data busybox:latest
我们不知道被关联的宿主机的目录是啥,使用
docker inspect b1
,找到【Mount】里的【Source】,就可以看到了。但是你下次再启动容器是,关联的目录也会变化。也可以看到Volumes。
# docker inspect b1 "Mounts": [ { "Type": "volume", "Name": "2eeb1bdee5c83a304d101a98b06430af3aff27a578ad38c7e23423f317db9063", "Source": "/var/lib/docker/volumes/2eeb1bdee5c83a304d101a98b06430af3aff27a578ad38c7e23423f317db9063/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], "Volumes": { "/data": {} },
使用:
docker inspect -f {{.Mounts}} b1
,也可以看到。注意大括号里的key是区分大小写的。
四,活用volume
让2个容器绑定到宿主机的同一个目录,以达到2个容器的通信。
# docker run --name b1 -it --rm -v /tmp/html:/data busybox:latest # docker run --name b2 -it --rm -v /tmp/html:/data2 busybox:latest
2个容器都绑定到了宿主机的/tmp/html上了。
当另一个容器想和某个容器绑定到宿主机的同一个目录时,但是又不知道宿主机的目录,这时,可以让这个容器直接使用某个容器的volume,这样一来,就不用知道宿主机的目录了。
命令:
docker run --volumes-from b1
# docker run --name b2 -it --rm --volumes-from b1 busybox:latest
volume和joined containers(参考:二,host章节 )一起使用,创建nginx容器和tomcat容器,共享base容器的网络空间和volume。
找一个容器,作为基础,它使命是:
- 指定宿主机的目录
- 提供统一的对外网络接口,外部客户端直接可以访问nginx服务,但是看不到tomcat
- nginx和tomcat使用lo(127.0.0.1)通信。
# docker run --name base -it -v /tmp/html:/data busybox:latest
启动nginx容器:
--network container:base --volumes-from base
# docker run --name nginx -it --rm --network container:base --volumes-from base busybox:latest
启动tomcat容器:
--network container:base --volumes-from base
# docker run --name tomcat -it --rm --network container:base --volumes-from base busybox:latest