翻訳者から : この記事へのリンクは、最新の公式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のフィードをリモートで制御できるようになりました。 ほら、それはまったく難しくありませんでした!
[...]