Chromebook
を使っているとネットワークがつながらないときにやることがなくなるという不安はわりとあります。(そういうことも少なくなりつつありますが)
たとえばオンライン上にあるIBM Cloud
に入れてあるNode-Red
で作業できなくなるなんてことも!Windows PCであればローカルにインストールしておけば問題はないのですが…
【参考:Windowsで実行】 nodered.jp nodered.jp
せっかく軽いChromebook
を使用しているのに、Windows PCを持ち歩くのはなんか負けた気がします。ということで、ねっと環境のないChromebook
からNode-RED
を使えるようにしてみようと思います。といっても、そこまで難しいことはありません。Docker
を使用すれば、Linux(ベータ版)
のコンソールから簡単に実行することができるようになります。
Docker
のインストール
以前のエントリーでもChromebook(ChromeOS)
にDocker
をインストールしていました。それを参考にDocker
をインストールしていきます。
【Dockerインストール関連参考】
念のためアンインストール
以前にDocker
をインストールしている場合は、念のためアンインストールします。比較的バージョンアップが頻繁なアプリケーションなので新しいものをインストールしたほうがいいかなとは思います。
$ sudo apt remove --purge docker docker-engine docker.io containerd runc
依存パッケージをインストール
Docker
が依存するパッケージ群を事前にインストールしていきます。
$ sudo apt update -y $ sudo apt install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
Dockerをインストール
ようやくDocker
のインストールになります。
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - $ sudo apt-key fingerprint 0EBFCD88 $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" $ sudo apt update -y $ sudo apt install -y docker-ce docker-ce-cli containerd.io
これでインストール完了です。
インストールできたことを確認
以下のように実行すると以下のように表示が行われれば成功しています。
$ docker run --rm hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:f9dfddf63636d84ef479d645ab5885156ae030f611a56f3a7ac7f2fdd86d7e4e Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
sudoなしでDocker
を実行できるようにする
$ sudo usermod -aG docker `whoami`
実行後にOSを再起動するとsudoなしでも実行できるようになります。
Node-RED
を実行する
Docker
がインストールできてしまうと、あとはDocker
コマンドでイメージを取得して実行するだけで環境が出来上がります。
初回は以下のように実行します。
【初回起動】
$ docker run -it -p 1880:1880 -v /home/【ユーザー名】/data:/data --name mynodered nodered/node-red
オプションは以下のようになっています。
-it
… コンテナにアタッチしてコンソールを開いた状態になります。-p 1880:1880
… ローカル側のポートとDockerコンテナ側のポートを接続します。-v /home/【ユーザー名】/data:/data
… ChromebookのLinuxホームディレクトリにあるdataディレクトリとコンテナの/dataを接続(マウント)する。--name mynodered
… コンテナに名前をつけます。nodered/node-red
… コンテナのベースイメージです(初回にはイメージのダウンロードが行われるので、回線の細いところでの実行はやめておいたほうがいいと思います)
実行するとNode-RED
のログが流れます。ここで【Ctrl+C】などを押してしまうとコンテナが終了するので注意です。
2回目以降はコンテナ名がConflictするのでエラーになるので注意です。
【失敗したときのログ】
$ docker run -it -p 1880:1880 --name mynodered nodered/node-red docker: Error response from daemon: Conflict. The container name "/mynodered" is already in use by container "6ba4d2adbb136aa120446782bc0a29bc13df4428d131ad8600c8360eddb77f4d". You have to remove (or rename) that container to be able to reuse that name. See 'docker run --help'.
2回目以降の起動はすでに環境が整っているので、docker start
コマンドで実行ができます。ただし、この方法で起動するとバックグラウンドでの実行になります。個人的にはこちらのほうがコンソールを使用できる状態に戻るので助かります。引数は先程つけた名前を指定します(今回の例ではmynodered
としています)。
【2回目以降の起動】
$ docker start mynodered
起動後にWebブラウザからhttp://【ローカルのIPアドレス】:1880/
にアクセスするとNode-RED
を使用できるようになります。
ちなみに終了させるには以下のコマンドで行います。
【停止】
$ docker stop mynodered
もし、起動したコンテナでbashのシェルを開く場合には以下のようにします。このシェルは終了してもバックエンドのコンテナが終了しません。
$ docker exec -it mynodered /bin/bash
Docker Compose
もインストール
念のためDocker Compose
もインストールしておきます。
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose $ docker-compose --version
おわりに
Chromebook
でもローカル環境でNode-RED
開発環境ができました。Docker
環境なので、Chromebook
側の環境に左右されない点では自由な環境ですね。壊れてしまっても復帰も簡単なのはいいですね。
余談ですが、Chromebook
のストレージサイズは比較的小さいのでコンテナのイメージのサイズも気になりますが、サイズは448MB…もう少し小さいと助かりますかねえ…
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nodered/node-red latest 37f21089d3eb 2 weeks ago 448MB