‫この講義の要件は､ これまでのネットワーク講義をご覧になり､ Dockerネットワークのキーコンセプトとそれに付随するコマンドを理解されていることです｡
‫わかりました｡
‫この講義では､ DNSについて学び､ 実際に使ってみることで､ カスタムネットワークとデフォルトネットワークにおけるコンテナにどのような影響を与えるかを学びます｡
‫コンテナ内は非常に動的なので､
‫IPアドレスに頼ることはできないからです｡
‫ここでは､
‫DNSの扱いに関して､ デフォルトネットワークとカスタムネットワークの違いを見ていきます｡
‫そして､ デフォルトのブリッジネットワークでDNSを有効にするために､ コンテナランの-linkオプションを確認します｡
‫もうひとつ､ コンテナや仮想ネットワークが相互に通信するために重要なことがあります｡
‫それは､ ネーミングです｡ というのも､ コンテナは常に起動し､ 消滅し､ 移動し､ 拡大し､
‫縮小していますし､ マイクロサービスという素晴らしいものが至るところで生まれていますが､ あるものから別のものへ話をする手段として､
‫もはやIPアドレスに簡単に頼ることはできないからです｡
‫なぜなら､
‫IPアドレスが同じになることすら､ 分単位で想定できないからです｡
‫コンテナは消えてしまうかもしれないし､ 失敗してDockerがどこか別の場所に持ってくるかもしれない｡
‫ただ､ あまりにもダイナミックで複雑なため､ それに対応するのは難しいのです｡
‫そこで､ これに対する解決策が内蔵されていることが判明し､ それがDNSネーミングです｡ Dockerはコンテナ名を､ コンテナ同士が会話する際のホスト名に相当するものとして使用します｡
‫今､ 私たちは2つのコンテナを走らせていたのを覚えていますか?
‫Nginx は my_app_net という新しいネットワーク上にあったのを覚えていますか？
‫そうですね｡
‫そして､ 1つのコンテナを搭載しています｡ この新しいネットワークは､
‫デフォルトのブリッジネットワークではないので､
‫特別な新機能を備えており､ 仮想ネットワーク上の他のすべてのコンテナから､ コンテナ名を使って自動的にDNS解決を行います｡
‫もし､ その仮想ネットワーク上に2つ目のコンテナを作るとしたら､ IPアドレスがどうであれ､ コンテナ名でお互いを見つけることができるようになりますね｡
‫それでは､ 次のように試してみましょう： docker container run name ... で､ これを私のnginxと呼ぶことにします...｡ で､ ネットワークはnginxのイメージからmy
‫app netを指定することにします｡
‫そして､ 先ほど作成した新しいコンテナから docker container exec
‫を実行すると -- おっと､ IT も必要でしたね -- 新しい nginx に
‫ping を実行すると､ DNS 解決がうまくいっていることがわかります｡
‫このため､
‫コンテナを1つ用意し､ その中に設定ファイルをセットして､ PHPサーバーがMySQLバックエンドと会話できるようにすることが非常に簡単です｡
‫それをCtrl-cで消すと､ 他の方法でも動作することがわかります｡
‫新しいnginxコンテナに飛び込んで､ 自分のngnixにpingを打ってみると､ 両方向に解決していることがわかります｡
‫Docker Swarmサーバのクラスタがある本番環境では､
‫コンテナがいつまで持つか､ 1分後にどこにあるか予測できないからです｡
‫ですから､ ローカルマシンではあまり変わらないかもしれませんが､ 3つ､ 4つのコンテナを停止して､ 同じコンテナを起動し､
‫その順番を変えると､ 同じIPアドレスにならない可能性があるのです｡
‫しかし､
‫それらのホスト名､ またはコンテナ名は常に同じです｡
‫だから､ 頼りになるんです｡
‫さて､ ここで注意しなければならないのは､ dockerのネットワークリストを行うと､ デフォルトのブリッジネットワークには1つ不利な点があるということです｡
‫デフォルトではDNSサーバーを内蔵していません｡
‫だから､ -linkを使えばいいんです｡
‫コンテナを作成するときに､ リンクオプションがあることに気づくと思いますが､ 実はこのデフォルトのブリッジネットワークで､
‫コンテナ間のリンクを手動で指定することができます｡
‫しかし､ 実際には､ アプリ用に新しいネットワークを作成した方が､ 毎回この作業をする必要がないので､
‫ずっと簡単です｡
‫今後のセクションでは､ Docker Composeについて説明します｡ Composeは､ アプリをスピンアップするたびに新しい仮想ネットワークを自動的に作成するため､
‫この作業の多くがさらに簡単になることがおわかりいただけると思います｡
‫そのため､ コンテナ間のコミュニケーションはさらに容易になります｡
‫簡単に復習すると､ この講義では､ コンテナ同士が通信する際にIPアドレスに依存することはできない､
‫あるいは依存すべきではない､ ということを説明しました｡
‫DNSは､ 同じホスト上のコンテナやホスト間の相互通信を行うための､
‫まさに標準となるものです｡
‫そのため､ 常にカスタムネットワークを作成することをお勧めしました｡
‫それから､ Docker Composeについて､ 特にネットワーキングをどのように簡単にするかについて､
‫お披露目しました｡