DockerをRaspberry Piのクラスター全体に群がらせます





翻訳者からこの記事へのリンクは、最新の公式Dockerニュースレターに掲載されました。 Raspberry PiとDocker(Swarm)の両方に興味があるのは私だけではないので、翻訳に注目します。



この投稿では、Raspberry PiにSwarmをインストールし、Dockerマシンを使用してSwarmクラスターを構成することがいかに簡単かを示します。



3つのRaspberry Pi 2 Model Bの小さなPiタワーを構築し、それらをDocker Swarmクラスターに組み立てました。



写真でわかるように、5ポートD-Linkスイッチに3つのRaspberry Piを配置します。 4つのデバイスはすべて、4 USBポート充電器から電力を供給されます。 これにより、タワーを非常に安定させることができますが、同時に持ち運び可能です。外部ワイヤからは、1本の電源ワイヤと1本のネットワークケーブルしかありません。



便宜上、使用済みのコンポーネントをAmazonの1つの買い物リストにまとめました。 (翻訳者のメモ:リスト全体から2つのアイテムしか残っていませんが、残りはAmazonからすぐに消えてしまいました。)



必要な材料

このチュートリアルでは、3つのステップすべてがMacで実行されます。 これを行うには、3つのユーティリティが必要です。



すべてのRaspberry PiのSDカード画像を記録するためのフラッシュユーティリティ。

単一のbrewインストール内にあるDockerクライアント。

hypriotドライバーを備えたDocker Machineバイナリ。





カードを書き留めます



まず、Dockerがプリインストールされたカードをインストールする必要があります。 MacまたはLinuxを搭載したコンピューターでは、小さなフラッシュコマンドラインユーティリティを使用して、簡単なコマンドを使用して3つのカードすべてを準備できます。



$ flash --hostname pi1 http://downloads.hypriot.com/hypriot-rpi-20150416-201537.img.zip $ flash --hostname pi2 http://downloads.hypriot.com/hypriot-rpi-20150416-201537.img.zip $ flash --hostname pi3 http://downloads.hypriot.com/hypriot-rpi-20150416-201537.img.zip
      
      





次に、すべてのRaspberry Piデバイスにカードを挿入し、それらから起動します。 しばらくすると、異なるホスト名で表示されます。





IPアドレスを取得する



SDイメージもavahi-deamonを実行して、mDNS経由でホスト名を宣言します。 したがって、各ラズベリーはpi1.local



pi2.local



、およびpi3.local



介して利用できます。 Docker Machineは現在これらのホスト名を解決できないため、ラズベリーのIPアドレスを手動で取得する必要があります。



 $ ping -c 1 pi1.local $ ping -c 1 pi2.local $ ping -c 1 pi3.local
      
      





この例では、3つのアドレスが92.168.1.101, 102



および103



92.168.1.101, 102



と想像してください。





SSH公開キーを入力してください



Docker Machineは、SSHを介して各Raspberry Piに接続します。 root



パスワードを入力しないために、SSH公開鍵を入力する必要がありroot



ssh-copy-id



と呼ばれるリモートマシンのSSH公開キーを入力するための特別なユーティリティがありssh-copy-id



。 最初にインストールする必要がある場合があります。



 $ ssh-copy-id root@192.168.1.101 $ ssh-copy-id root@192.168.1.102 $ ssh-copy-id root@192.168.1.103
      
      





上記の各コマンドについて、rootユーザーのhypriot



パスワードを入力する必要があります。





Dockerマシンを作成する



次のステップでは、Docker Machineドライバーを使用してRaspberry Pi Hypriotデバイスに接続します。 私たちのhypriotドライバーは、公式のDocker Machineバイナリにまだ統合されていません。 したがって、hypriotドライバーを使用してdocker docker-machine



バイナリをダウンロードする必要があります。



 $ curl -o docker-machine http://downloads.hypriot.com/docker-machine_0.4.0-dev_darwin-amd64 $ chmod +x ./docker-machine
      
      





ファイルを現在のディレクトリにダウンロードし、実行可能にします。 他のディレクトリから使用するために、 PATH



別のディレクトリに移動する必要がある場合があります。





Swarmトークンを作成する



Docker Swarmクラスターは、個々のswarmエージェントが相互に検出できるようにする一意のクラスター識別子を使用します。 Docker Swarmを作成するには、このような識別子が必要です。

これはシェルから実行できます。



 $ export TOKEN=$(for i in $(seq 1 32); do echo -n $(echo "obase=16; $(($RANDOM % 16))" | bc); done; echo) $ echo $TOKEN
      
      





この例では、使用します

  $ export TOKEN=babb1eb00bdecadedec0debabb1eb00b
      
      





既にDocker Swarmで実行されているコンテナーがある場合は、 docker run --rm hypriot/rpi-swarm create



使用して新しいクラスター識別子を作成することもできます。 上記のコマンドを使用して、鶏と卵の問題に陥らないようにしました。





Swarm Masterを作成する



生成されたクラスターIDを使用して、最初のRaspberry PiでDocker Swarm Masterを作成します

 $ ./docker-machine create -d hypriot --swarm --swarm-master --swarm-discovery token://$TOKEN --hypriot-ip-address 192.168.1.101 pi1
      
      





このコマンドはpi1ラズベリーに接続し、TLSを使用してdockerデーモンを制御し、DockerハブからDocker hypriot/rpi-swarm:latest



イメージをダウンロードします。 彼女は、コンテナ内のSwarm MasterとSwarmエージェントの両方を起動します。



すべてが正常に機能するかどうかを確認するために、次のコマンドを使用して、新しく作成されたSwarm Masterに接続できます。 彼女は、クライアントDockerがSwarmと通信するために必要なすべての環境変数を受け取ります。



 $ eval $(./docker-machine env --swarm pi1) $ docker info Containers: 2 Strategy: spread Filters: affinity, health, constraint, port, dependency Nodes: 1 pi1: 192.168.1.202:2376 └ Containers: 2 └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 971.3 MiB
      
      





単独のSwarmマネージャーのセットアップに成功しました。 彼が孤独にならないように、もっとマリオックを発射しましょう。





Swarmエージェントを作成する



残りのRaspberry Piについても、同じクラスターIDでDocker Machine接続を作成する必要があります。 今回は、 --swarm-master



オプションなしで--swarm-master



-machineを起動し、各ラズベリーでSwarmエージェントコンテナを起動します。



 $ ./docker-machine create -d hypriot --swarm --swarm-discovery token://$TOKEN --hypriot-ip-address 192.168.1.102 pi2 $ ./docker-machine create -d hypriot --swarm --swarm-discovery token://$TOKEN --hypriot-ip-address 192.168.1.103 pi3
      
      





Swarmがどのように見えるか見てみましょう。



 $ docker info Containers: 4 Strategy: spread Filters: affinity, health, constraint, port, dependency Nodes: 3 pi1: 192.168.1.101:2376 └ Containers: 2 └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 971.3 MiB pi2: 192.168.1.102:2376 └ Containers: 1 └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 971.3 MiB pi3: 192.168.1.103:2376 └ Containers: 1 └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 971.3 MiB
      
      





通常のコマンドでスウォーム全体のすべてのコンテナを表示できます



 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5effaa7de4a3 hypriot/rpi-swarm:latest "/swarm join --addr 2 minutes ago Up About a minute 2375/tcp pi3/swarm-agent 6b73003b7246 hypriot/rpi-swarm:latest "/swarm join --addr 4 minutes ago Up 3 minutes 2375/tcp pi2/swarm-agent 5e00fbf7b9f6 hypriot/rpi-swarm:latest "/swarm join --addr 7 minutes ago Up 7 minutes 2375/tcp pi1/swarm-agent 02c905ec25a0 hypriot/rpi-swarm:latest "/swarm manage --tls 7 minutes ago Up 7 minutes 2375/tcp, 192.168.1.101:3376->3376/tcp pi1/swarm-agent-master
      
      





Docker Swarmの構成後、ポート3376を介して通常のDockerコマンドを使用できるようになりました。詳細については、 公式のDocker Swarmドキュメントを参照してください。



Swarm Masterとの正しい通信のために、Dockerクライアントを使用する前に、環境を構成することを忘れないでください



 $ eval $(docker-machine env --swarm pi1)
      
      





MacからRaspberry Piのフィードをリモートで制御できるようになりました。 ほら、それはまったく難しくありませんでした!



[...]



All Articles