【Node-Red】をChromebookのDocker経由で使用してみる

Chromebookを使っているとネットワークがつながらないときにやることがなくなるという不安はわりとあります。(そういうことも少なくなりつつありますが) たとえばオンライン上にあるIBM Cloudに入れてあるNode-Redで作業できなくなるなんてことも!Windows PCであればローカルにインストールしておけば問題はないのですが…

f:id:ueponx:20200321163200p:plain

【参考:Windowsで実行】 nodered.jp nodered.jp

せっかく軽いChromebookを使用しているのに、Windows PCを持ち歩くのはなんか負けた気がします。ということで、ねっと環境のないChromebookからNode-REDを使えるようにしてみようと思います。といっても、そこまで難しいことはありません。Dockerを使用すれば、Linux(ベータ版)のコンソールから簡単に実行することができるようになります。

Dockerのインストール

以前のエントリーでもChromebook(ChromeOS)Dockerをインストールしていました。それを参考にDockerをインストールしていきます。

【Dockerインストール関連参考】

docs.docker.com

念のためアンインストール

以前に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 … ChromebookLinuxホームディレクトリにある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を使用できるようになります。

f:id:ueponx:20200321151117p:plain

ちなみに終了させるには以下のコマンドで行います。

【停止】

$ 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
/* -----codeの行番号----- */