‫この講義では､ 複数のホスト､ ノード､ インスタンスなど､ お好きなものを実際に使ってみましょう｡
‫複数のOSに対応しています｡ その3つのノードすべてに､
‫3ノードのスウォームを設定します｡
‫この部分は､ 残念ながらマシンに内蔵されているDockerではできません｡ なぜなら､
‫それは1つのOSしか提供してくれないからです｡ この次の機能で遊ぶには､ 3つのLinux OSが必要です｡
‫最初の選択肢は､ play-with-dockerを使うことです｡ comを使用しています｡
‫絶対に一番簡単な方法です｡
‫Dockerがプリインストールされています｡ 3台のマシンをプロビジョニングするのに数秒かかり､
‫お客様側の投資は一切必要ありません｡ しかし､ 4時間ごとにこれまでの作業をすべて消去してしまうということです｡
‫ですから､ もしあなたがこのセクションの残りを何日もかけてやろうと思っているなら､ これはあなたにとって最良の選択ではないかもしれません｡
‫しかし､
‫数時間集中するのであれば､ Play With Dockerを使ったマルチノードのスウォームに関することは､ すべてではないにしても､ ほとんどを一度に終わらせることができるのは間違いないでしょう｡
‫もう一つの選択肢は､ docker-machineを使うことです｡ これはまだ説明していませんが､
‫Windows版DockerとMac版Dockerと一緒にインストールされるコマンドラインツールです｡
‫Linux用のダウンロードが可能で､ 基本的にはローカルやインターネット上で仮想マシンをプロビジョニングし､
‫Dockerを自動的にセットアップするための自動化ツールです｡
‫デフォルトの動作方法は､ 無料でインストールできるVirtualBoxを使用します｡ しかし､ ローカルで3台の仮想マシンを走らせる場合､ これらの例の多くを実行するには､
‫それぞれのマシンに1ギガほどのRAMが必要になるのではないでしょうか｡
‫だから､ それなりのRAMを積んだマシンが必要になる｡ もうひとつの選択肢は､
‫このデモやウォークスルーではデフォルトで使うことにしているDigitalOceanです｡
‫DigitalOceanは､ 一番安くて簡単に始められるサービスですし､
‫SSDで動いているので高速なのが魅力です｡ クラウド上で3台の仮想マシンを使って､
‫それぞれの仮想マシンを起動するのに1分ほどかかるので､ 本番環境と非常によく似たセットアップで使用することができます｡
‫もし､ そういう選択肢もありかなと思っているのなら､ 私の紹介コードとこのセクションの紹介を使えば､
‫最初の10ドルが無料になりますよ｡
‫このswarmのようなものを数日で終わらせるのであれば､ 3つ､ 月10ドルのノードを用意して､
‫数日から1週間ほどアップさせればいいのです｡
‫そして､ それは10ドルの予算内に収まるかもしれないので､ 技術的には何も負担にならないでしょう｡
‫そして最後に､ Dockerをインストールする方法はたくさんありますが､ 本当に必要なのは､ Dockerがインストールされた3台のマシンだけです｡
‫Docker Machineを使用することができます｡
‫Amazonインスタンス､ Azureインスタンス､ DigitalOcean Droplets､ Google Compute nodesなど､ Linux仮想マシンを入手できる場所ならどこでも､ 入手した自動スクリプトを使ってDockerをインストールすることができるように､
‫ドライバが内蔵されているのです｡
‫ドッカーです｡ comを使用しています｡
‫正直なところ､ 私はgetの方が好きです｡ ドッカーです｡ 特にAmazonやAzureのように､ 仮想マシンのプロビジョニングに至る前にさまざまなものをプロビジョニングする必要がある場所では､
‫Docker Machineがいくつかの手順を省くことができるため､ com版のみ｡
‫しかし､
‫Docker Machineを実運用で使うことはないでしょう｡
‫開発環境とテスト環境をシンプルに自動化するためのツールです｡ マルチノードのスウォームで必要なすべてのプロダクション設定を行うようには設計されていないのです｡
‫本来は何の問題もないのですが､ 典型的には得てして｡ ドッカーです｡ comは主要なLinuxディストリビューションで動作し､
‫Docker Machine自体を実際に使用するよりも時間がかかりません｡
‫これらのシナリオのいずれかを､ Dockerをインストールするところまで持っていくだけの､
‫本当に簡単な例をお見せします｡ そうすると､ 実際にスウォームを作り､ サービスを行う方法は､
‫どれも非常に似てきます｡
‫だから､ 私のやり方でなければならないとは思わないでください｡
‫Dockerの情報が実際に戻ってくるようにし､ 3つのノードがお互いにネットワークアクセスできるようにし､
‫よく接続されたネットワーク上にあることを確認するのみです｡
‫ですから､ 理想は同じネットワークにあることです｡
‫Play With Dockerを使うなら､ play-with-dockerにアクセスすればいいんです｡ comにアクセスし､ I'm not a robotのボックスにチェックを入れてください｡
‫そして､ CAPTCHA画面が表示されたら､ その通りにしてください｡
‫わかりました｡ 4時間ずつカウントダウンしているのがわかると思います｡
‫でも､ インスタンスの作成をクリックするだけで､ あと2回クリックすれば､ あっという間に3つの仮想環境ができあがります｡
‫余談ですが､ これは実際にDockerの中でDockerを使っています｡ Dockerコンテナの中で実際にDockerを動かしているという､
‫とても素晴らしい技術です｡
‫しかし､ 他のDockerキャプテンやDockerチームによって作られたPlay With Dockerとのセットアップでは､ 本当に違いを見分けるのは難しいです｡
‫node1に行くと､ すでにDocker infoで最新版が表示されているのがわかります｡ さらにnode2にpingを打とうとすると､ 実はフレンドリーな名前を認識しているので､
‫両者の間で簡単にやり取りができるようになるんです｡
‫低性能なマシンでも､ 4時間後の環境設定に時間をかけたくない場合でも､
‫簡単に試すことができます｡
‫オプション2は､ docker-machineを使用することです｡ インストールされている場合､ 新しいものでなければ少なくともバージョン10である必要があります｡
‫インストールされているかどうかは､ コマンドラインからdocker-machineコマンドを入力すると､
‫動くか動かないかでわかります｡
‫もし､ あなたのLinux OS用にダウンロードする必要があるなら､ Docker Documentationに飛び､ 実際にダウンロードするための簡単なcurlラインを提供することができます｡
‫Windows 7や8でToolBoxを､ Windows 10でDocker for Windowsを､ Mac OSでDocker for
‫Macを使っている人は､ すでにそれらのOSで最新版を利用できるようになっていますよ｡
‫デフォルトであるVirtualBoxのオプションを使いたい場合は､ virtualboxに飛び移ればよい｡
‫orgにアクセスし､ お使いのOSに対応した最新版をダウンロードしてください｡ しかも､
‫VirtualBoxで何もする必要がない｡
‫インストールするだけでいいのです｡ そして､ コマンドラインから docker-machine create
‫node1 と入力すると､ BusyBox（非常に軽量なLinuxディストリビューション）を使って仮想マシンを作成するところまで実行されます｡
‫これは実際に非常に軽量なLinuxマシンの作成を実行するもので､ node2と3に対してこの2つのコマンドを繰り返すだけです｡
‫Docker Machineについてもっと情報が必要な場合は､ 私のリファレンスセクションにあるチュートリアルのリンクを実際に見てみてください｡
‫マシンを作成した後､ そのマシンにアクセスする方法として､ 2つの選択肢があります｡
‫docker-machine ssh を使って､ 作成したノードの名前を入力すると､ そのマシンに飛び込むことができます｡
‫または､ environmentコマンドを使用することもできます｡
‫docker-machine envというコマンドと､ 希望するマシン名が出力されるので､ これらのオプションをコマンドラインにカット＆ペーストするか､
‫一番下のオプションをコピー＆ペーストすると､ 実際に環境変数が作成され､ Dockerコマンドを実行するときに､
‫Docker CLIはどのDockerホストと話をすればいいかが分かるようになるのです｡
‫そして､
‫デフォルトでは､ あなたのローカルマシンと会話しています｡
‫しかし､ それはDocker Machineのnode1と会話するようにプログラムし直しただけです｡
‫docker infoを実行すると､ その名前がnode1になっているのがわかります｡
‫最後の例では､ アカウントを作成したDigitalOceanを使用することにします｡
‫ここでは､ サーバーをドロップレットと呼んでいます｡ 他のOSを動かす特別な理由がなければ､ まずはUbuntu
‫16.NETで始めることをお勧めします｡ 04は､ より新しいDockerの機能をサポートする最初のLinuxディストリビューションになる傾向があるからです｡
‫そこがデフォルトなんですね｡
‫そうすると､ このコースの残りの期間は､ 月10ドルのサーバーを使うことをお勧めします｡ 月5ドルのサーバーでも大丈夫かもしれませんが､
‫後半のデモで､ アプリケーションの上でコンテナの監視やログ取得を行う際に､
‫少し遅くなるかもしれません｡
‫そして､ あなたに一番近いデータセンターを選ぶことができます｡ そうすると､ あとはSSHキーを追加するしかありません｡
‫もし､ ローカルでSSHキーを作成し､ DigitalOceanにアップロードする方法に慣れていない場合は､
‫このセクションのリソースで見つけることができる素晴らしいチュートリアルがあります｡
‫一番下に3台のマシンを作成し､ node1, 2, 3と呼ぶことにします｡
‫それから､ おそらく60秒くらい待てば､ 準備が整うでしょう｡
‫ここでIPアドレスを使えばいいのに...｡ これらのマシンに飛び乗る｡
‫コピーボタンをクリックしてから､ ssh root @そのIPアドレス｡
‫そして､ あなたのマシンにSSHキーがきちんと設定されていれば､ 自動的にそのキーでログインすることができるのです｡
‫しかし､ リソースのコーナーでは､ .NET Frameworkのセットアップ方法を例示しています｡ ssh config ファイルで､ これら 3
‫つのノードの IP アドレスを覚える代わりに､ 単純に node1,
‫node2, node3 と呼ぶことができるようにします｡
‫それは本当に簡単にこれらのサーバーに出入りする方法です｡
‫Docker Machineを使った場合､ あるいはPlay With Dockerを使った場合は､ すでにDockerがインストールされており､
‫swarmを作成する準備が整っていることになります｡
‫しかし､ DigitalOceanを使用したり､ 自分でVMをロールアップする場合は､ Dockerをインストールする必要があります｡
‫一番簡単な方法は､ getのスクリプトを使うことです｡ ドッカーです｡ comを使用しています｡
‫このスクリプトを使って､ あなたのマシンに最新のプロダクション・リリースのDockerを取得する方法の例を､
‫ここで見ることができます｡
‫これで､ 3台のサーバーすべてに最新版のDockerがインストールされ､ swarmをセットアップする準備が整いました｡
‫ここでも必要なのは､ これら3つのノードが互いにしっかりとしたネットワークを持ち､ 特定のポートが開いていることだ｡
‫Swarmのポートについて興味がある方は､ このセクションのリソースをご覧ください｡ 実際に､ Swarmが動作するために必要なファイアウォールのポートの私自身のリストへのリンクが掲載されています｡
‫以前､ docker swarm initを行ったのを覚えている方はいらっしゃるでしょうか｡ さて､ この場合､ クラウドサーバーではよくあることですが､
‫Swarmサービスを広告するためのIPアドレスを指定するように要求されます｡
‫他のサーバーからアクセス可能なIPアドレスを使用したい｡
‫今回は､ DigitalOceanのホストのパブリックIPアドレスを使用することにします｡
‫そして､ そこに行く｡
‫ここまでは､ ローカルマシンの時と同じです｡
‫今回は､ swarm joinコマンドをコピーして､ node2に行き､ 追加してみますが｡
‫そして､ そこに行く｡
‫このノードは現在､ スウォームの一部となっています｡
‫node1に戻って､ docker node lsを実行すると､ 2つのノードがあります｡
‫2番目のノードがワーカーだけであることがわかると思います｡ というのも､ 書いてある通り､ マネージャーにして欲しかったら､ このマネージャー・トークンを手に入れるべきだったからです｡
‫でも､ 心配は無用です｡ 実際にこのワーカーをアップデートして､
‫マネージャーに昇格させることができます｡
‫しかし､ node2の場合､ Swarmのコマンドは使えないことに注意してください｡ 労働者は本当は優遇されていないのですから｡
‫群れを制御するためのアクセス権を持っていないのです｡
‫そのため､ マネージャーで使い慣れたSwarmのコマンドは一切使えません｡
‫node1とマネージャーに戻り､ docker nodeのアップデートを行う...｡
‫そこでやっていたのは､ Dockerでは特に多くの機能を持つ素晴らしい機能であるタブ補完のためのタブキーを押すことでした｡
‫その更新コマンドの使い方を､
‫ひとつひとつ説明してくれていたのです｡
‫今､ この最終アップデートを終えて､ node2が変わりました｡
‫ここで､ docker node lsを実行すると､ 到達可能であると考えられることがわかります｡
‫しかし､ 元のノードがリーダーであることに変わりはない｡ ちなみに､ 小さなアスタリスクは？ それは､ 現在話しているノードがそうであることを意味するだけです｡
‫node3については､ デフォルトでマネージャとして追加しておきましょう｡
‫元のdocker swarmのコマンドに戻り､ join-token managerを取得する必要があります｡
‫このトークンはいつでも手に入れることができます｡
‫書き留めたり､ 保存したりする必要はありません｡
‫これらはスウォームの設定の一部であり､ ディスク上に暗号化されて保存されているので､ 心配は無用です｡
‫また､ サーバーの脆弱性が露呈した場合､ 古いキーからスウォームに参加できないようにするために､
‫キーをローテーションさせることも可能です｡
‫これをコピーして､ node3に貼り付けます｡
‫そして､ そこに行く｡ node1に戻る｡
‫もう一度docker node lsを実行すると､ 3つのノードがあることがわかります｡ そして､ 全員がマネージャーであることを示すマネージャーステータスを持つ｡
‫これで3ノードの冗長化スウォームができ､ 3人のマネージャを持つことになります｡ 先ほどと同じように､ docker service create alpine
‫ping 8を実行してみましょう｡
‫8. 8. 8
‫今回に限り､ 3つのレプリカを与えよう｡
‫そして､ docker service
‫lsを実行すると､ 3つのうち3つがすでに稼働していることがわかります｡
‫docker node psを実行すると､ 私のローカルノードが実際にこのタスクやコンテナを実行していることがわかります｡
‫実際にnode2というノードを指定すると､ node2上で動作しているコンテナだけを表示することができます｡
‫もし全リストを取得したければ､ docker service psを実行すれば､ sleepy brownという名前が私たちのサービスに与えられます｡
‫そして､ ここでわかるのは... 画面を少し拡大させてください｡
‫3つのタスクがリストアップされているのがわかると思います｡
‫このスウォームを作成したら､ 通常はすべてのノードにコマンドを打ち込む必要はありません｡
‫ノード1からは､ ほとんどの場合､ スウォーム全体を操作することができます｡
‫今後の講義では､ ノード1から多くの作業を行う予定ですが､ とりあえず､ 完全に動作するswarmクラスタができたので､
‫自分を褒めてあげましょう｡