‫サービスを拡張して多数のノードで動作させ､ すべてのサービスが互いに会話するようになる前に､
‫Swarmがもたらすいくつかの新しい概念について説明します｡
‫最初のものはOverlayという新しいネットワーキングドライバで､ docker network createでいつものようにネットワークを作成し､
‫-driver overlayを入れるだけでいいのです｡
‫これは､ 基本的にSwarm全体のブリッジネットワークを作り､ 同じ仮想ネットワーク上のホストにあるコンテナは､
‫VLANのように互いにアクセスできるようにするものです｡
‫これは群内通信のみです｡
‫オーバーレイドライバは､ ネットワークの全体像を把握することで､ 個々のノードのネットワーク設定に煩わされないようにするため､
‫内部に入ってくるトラフィックには大きな影響を与えません｡
‫また､ IPiece SECを使用すれば､ スウォームのすべてのノード間にIPSecトンネルを設定し､ ネットワークの完全な暗号化を有効にすることができます｡
‫しかし､ パフォーマンス上の理由から､ デフォルトではオフになっています｡
‫サービスを作成する際に､ Overlayネットワークに追加しないか､ 1つ以上のOverlayネットワークに追加することができます｡
‫それは､ アプリケーションの設計によります｡
‫従来の設計では､ データベースはバックエンドのネットワークに､ ウェブサーバーはフロントエンドのネットワークに配置されることが多かったと思います｡
‫そうすると､
‫両者の間にAPIがあって､ それが両方のネットワークにあるとか､ そういうことかもしれませんね｡
‫そして､ Swarmではそれが完全に実現できるのです｡
‫実際に見てみましょう｡ 前回の課題のDrupalの例とPostgres
‫Databaseをサービスとしてデプロイし､ それらが互いに通信できるようにOverlayネットワークを作成すると､ どのようになるかをお見せしたいと思います｡
‫まず､ ネットワークを作成する必要があるので､ docker network createで､ 新しいドライバを使うという事実以外､
‫Swarmのために変更されていない｡
‫mydrupalということで｡
‫OKです｡
‫そこで､ docker network ls を実行すると､ 新しいオーバーレイがあるのがわかります｡ イングレスのほうはデフォルトで入っています｡
‫また､ スウォームという新しいものがありますが､ これは実は発信型のネットワークで､ 私たちがいじくり回す必要はありません｡
‫では､ Postgresのサービスを作ってみましょう...｡ docker service create name... psqlネットワークと呼ぶことにしましょう｡
‫mydrupalのネットワークに接続することにします｡
‫実は､ ネットワーク名にはタブ補完があるんです｡
‫それから､ Postgresのパスワードのために環境変数を追加する必要があることを忘れないでください｡
‫だから､ 後で接続することができるのです｡
‫そして､ Postgresのイメージを使用します｡ 良さそうですね｡
‫なぜなら､ サービスはオーケストレーターとスケジューラーを経由しなければならないので､ フォアグラウンドで実行することができないからです｡
‫そこで､
‫docker service lsを実行すると､ 片方が起動していることが確認できます｡
‫docker service ps psql を実行すると､ 実際に Node 1 で実行されていることがわかります｡
‫だから､ docker container logs psqlをやって､ そのログを見ることができるんです｡
‫うん｡ 走っているように見える｡
‫わかりました｡
‫もう1つのサービスを作成しましょう｡ ここではdrupalと呼びます｡
‫また､ その同じネットワークに接続する必要があります｡ そして､ docker runコマンドで行ったように､
‫80:80のポートを公開したいと思います｡ そして､ Drupalの画像を使用します｡
‫OKです｡
‫そこから始まっていることがわかります｡
‫コツがあるんです｡ 実はLinuxではwatchコマンドで見ることができるんです｡ 基本的には...
‫は､ コマンドを何度も何度も繰り返し実行しているのです｡ Ubuntuではデフォルトでインストールされています｡
‫docker service ls の前に watch を置くだけで､ デフォルトで2秒に1回､ ...まで実行し続けます｡
‫ほーら
‫今は一人一人です｡
‫よし､ それじゃあコントロールCを出そうか｡ docker service ps drupal
‫を実行して､ drupal が実際に Node 2 上で動作していることを確認することができます｡
‫Node1上でデータベースを動作させています｡
‫Node 2上でDrupalのウェブサイトを動かしています｡
‫では､ どうやって会話するのか？
‫まあ､ サービス名を使ってね｡
‫IPアドレスの一つを貼り付けると､ Drupalのインストール時に出てくるはずです｡ そして､ ここでデータベース名を伝えると､
‫またpostgres､ 私のパスワードで実行します｡
‫ホストは､ Composeのときと同じように､ Composeファイルでサービス名を作ったので､ ここでは､ データベースサーバー用に作ったサービス名を使うことにします｡
‫ということで､
‫psqlでした｡
‫この画面は基本的に､ ノードをまたいでデータベースと会話し､ システムをセットアップすることができたことを伝えています｡
‫オーバーレイの素晴らしいところは､ すべてが同じサブネット上にあるかのように動作するところです｡
‫わかりました｡
‫だから､ もうこれは必要ないんです｡
‫この例は､ Swarmの次のクールな点をお見せするために､ 本当に素早く終わらせるつもりです｡ OKです｡
‫今､ このサイトが動いています｡ しかし､ 私は3つのノードを持っているので､ このウェブサイト名を作成するときに､
‫どのノードで､ どのポートをDNSが指すようにする必要があるのかを知るにはどうしたらよいでしょうか｡
‫私の場合､ IPアドレスが3つあるので､ 3つともコピーして､ そのIPアドレスを3つとも入れて・・・｡
‫然うは そこで間違えたんです｡
‫つまり､ 3つのIPアドレスを見ているので､ 3つのノードでウェブサイトが動いているように見えるわけです｡
‫しかし､ こちらでこのサービスps drupalを実行すると､ ノード2しか動いていないことがわかります｡
‫docker service inspect をしてみると､ 確かにオーバーレイネットワーク上に IP アドレスが一つしかないことがわかります......｡
‫をご覧ください｡
‫では､ なぜ3つのホストで応答しているのでしょうか？
‫それが､ 次の新機能につながるのです｡