‫この講義では､ ネットワークに関するこれまでの概念と､ コンテナの作成に関する概念を理解する必要があります｡
‫さて､ Dockerネットワークの概念と､ 仮想ネットワークとIPの仕組みがわかったところで､
‫それを管理するためのコマンドラインオプションをいくつか見てみましょう｡
‫まず､ 当たり前のことですが､ ネットワークのlsです｡ 複数のネットワークを作ることができるので､ それらを一覧するためのlsコマンドもきっとあるはずです｡
‫通常のinspectコマンドは､ おそらく他の検査で慣れていることでしょう｡
‫特定のネットワークに関する詳細が表示されます｡
‫次に､ 新しい仮想ネットワークを作成するために､ 内蔵およびサードパーティのドライバを使用するために指定できるオプションのドライバを持つcreateコマンドを用意しています｡
‫次に､ ライブで実行中のコンテナを変更し､ そのコンテナ用の仮想ネットワーク上に新しいNICを作成するためのconnectコマンドとdisconnectコマンドを用意しました｡
‫それは､ コンピュータを起動したままネットワークカードを刺しているようなものです｡
‫それでは､ どうぞ｡
‫そこで､ コマンドラインに戻る｡ 先ほど学んだコンセプトをもとに､ 実際にdocker
‫network lsをやってみます｡ これで､ 作成されたすべてのネットワークが表示されますね｡ この場合､ 同じコマンドを実行すると､ おそらく同じ3つが表示されるはずです｡
‫お使いのOSやDockerのバージョンによっては､
‫ブリッジネットワークがdocker0やbridgeと呼ばれているのを見かけるかもしれませんが､ どちらも同じことを意味します｡
‫これは､
‫NATファイアウォールを介して､ ホストが接続されている物理ネットワークに橋渡しするデフォルトのネットワークである｡ これまでは､ すべてのコンテナがそのネットワークに接続するだけで動作していたので､
‫心配する必要はありませんでした｡
‫Nginxコンテナを起動した状態で､ docker network inspectを実行すると､ ブリッジネットワークに接続されているコンテナの一覧が表示されます｡
‫webhostと呼んでいるNginxのものがそこに添付されているのがわかると思います｡
‫実際にそのIPアドレスを見ることができます｡ そして､ これらのネットワークは自動的にIPアドレスを割り当てることがわかりますが､
‫IPAMの設定により､ サブネットのデフォルトが172であることがわかります｡ 17､ これは通常､ あらゆるDockerホストのデフォルトネットワークです｡
‫しかし､ それは変更することができ､ そして最終的に物理ネットワークにルーティングアウトするこのネットワークのためのゲートウェイ｡
‫docker network lsに戻ると､ この他の2つのネットワークが表示されます｡ ホストネットワークは､ 以前お話したように､
‫Dockerの仮想ネットワークをスキップして､ コンテナを直接ホストインターフェースにアタッチする特別なネットワークです｡
‫ご想像の通り､ コンテナ化のセキュリティ境界がそのコンテナのインターフェイスを保護することを妨げるので､
‫これには賛否両論があります｡
‫しかし､ 特定の状況下では､ 高スループットのネットワーキングのパフォーマンスを向上させ､ そこにある特定の特別なソフトウェアで他のいくつかの問題を回避することもできます｡
‫そして､ 最後の「none」ですが､ これはコンピュータに何もついていないインターフェースと同じようなもので､
‫自分たちで作ることができます｡
‫Dockerネットワークを作ろう... my_app_netを作成します｡
‫ここでもう一度､
‫docker network lsを行います｡ ブリッジのドライバで新しい仮想ネットワークが作成されたことがわかると思います｡
‫それは､ それがデフォルトのドライバーだからです｡
‫172あたりのどこかに独自のサブネットを持つ仮想ネットワークをローカルに作成するだけのシンプルなドライバです｡
‫17歳以上､ そのままインクリメントされるから｡ つまり､ 17､ そして18､ 19､ 20というように｡
‫ホスト間のプライベートネットワークを可能にするオーバーレイネットワークや､
‫Weaveのようなサードパーティードライバなど､ このコースの後半で出てくるかもしれない高度な機能は一切備えていません｡
‫docker network createコマンドをヘルプで見てみると､ 使いたいドライバだけでなく､ 高度なシナリオで必要となるであろうIPやネットワークのオプションもたくさん指定できることがわかります｡
‫これらのネットワークとコンテナとの接続方法によって､ いくつかのことが可能になります｡
‫コンテナ作成時に --network オプションを使用することができます｡
‫そこで､ docker container run name
‫new nginx, and network, and my app net, and the
‫nginx imageを実行します｡
‫my appのネットワーク上でdocker network inspectを行うと､ 先ほど作成した新しいNginxがそのネットワーク上にあることがわかります｡
‫新しいIPアドレスは172です｡ 18.
‫つまり､ リストの次のサブネットということですね｡
‫しかし､ 実際には新しいコンテナを立ち上げる必要はありません｡ 現実世界でイーサネットデバイスを抜き差しして無線ネットワークに再接続できるのと同じように､
‫既存のネットワークや既存のコンテナでも同じことが可能だからです｡
‫そのために､ docker networkのconnectとdisconnectのオプションを使います｡ --helpを使うと､ Docker
‫networkのすべてのオプションを見ることができます｡
‫この場合､ やりたいことはdocker networkで､ 最初に作った既存のコンテナを新しいネットワークに接続したいのです｡
‫新しいmy app networkを選び､ 次に､ 作成したオリジナルのウェブホストを選びます｡
‫ここで､ 元のウェブホストをDockerコンテナで検査してみると､ 実際には2つのネットワーク上にあることがわかります｡
‫元のブリッジネットワークで､
‫基本的には別のネットワークに新しいイーサネットインターフェースを与え､ DHCPから受信した別のIPを与えるのと同じことをしました｡
‫ということで､ 18ネットワークで17ネットワークになりました｡
‫それを切断しようと思えば､ 切断だけで同じことができるんです｡ その後､ もう一度検査をしてみると､ 今度はネットワークが1つだけに戻っていることがわかります｡
‫ご覧のように､ Dockerネットワークにはたくさんの興味深いオプションがあります｡ 最終的な目標は､ 私がコンテナについて自慢したいことの1つですが､
‫この場合､ すべてのアプリケーションを1つのサーバで実行していれば､ それらを本当に保護することができるということです｡
‫なぜなら､
‫ネットワーク上に仮想マシンやホストを作成していた物理的な世界では､ アプリケーションサーバーのポートやネットワークを過剰に公開してしまうことが多かったからです｡
‫このような場合､ アプリのコンテナを1つのネットワークにまとめて仮想ネットワークで接続すると､
‫-pを指定したホスト上のポートだけが公開されることになります｡
‫そして､
‫仮想ネットワーク内に保護されたファイアウォールがあることで､ 他のすべてが少しばかり安全になるのです｡
‫この後､ Docker Swarmに入ると､ マルチホストネットワーキングについて学び､
‫スケールアップやスケールアウトを始めると､ これがさらに良くなることを学びます｡
‫要約すると､ Dockerネットワークを管理するためのコマンドをたくさん取り上げたところです｡
‫lsとinspectコマンドで遊び､ Dockerネットワークを作成し､ デフォルトのドライバであるbridgeを使用しました｡
‫実際に-driverを使う必要はありませんでした｡
‫最後に､ 実行中のコンテナからNICを追加､ 削除するためのnetwork connectとnetwork disconnectコマンドを試しました｡