Node-REDをDocker上で動かしてみる

以前、nvm+Node.js上でNode-REDを動かしてみましたが、今回はDocker上で動かしてみます。Dockerを使うとLinuxのディストリビューションの影響を受けることなく開発環境と同じ手順で運用環境を構築できるので、最近はアプリケーションの基本構成を理解したららなるべくDockerを使うようにしています。

とりあえずDocker上で起動

ドキュメントには以下のコマンドで起動できると書いてあるので、素直に実行します(Dockerはインストール済みの前提)。Node-RED公式イメージを指定して1880ポートを晒しているだけのようです。シンプルですね。
$ docker run -it -p 1880:1880 --name mynodered nodered/node-red
Unable to find image 'nodered/node-red:latest' locally
latest: Pulling from nodered/node-red
6a428f9f83b0: Pull complete
630852b09df4: Pull complete
f13ad23a48a4: Pull complete
43df7c393f3d: Pull complete
47ba55791fa2: Pull complete
c2ef95bab0b2: Pull complete
3e43fcf5cc3e: Pull complete
0596f2101de6: Pull complete
c0750ee7682e: Pull complete
cbee34ba177b: Pull complete
b9ca9e756757: Pull complete
24ebeb41a4d9: Pull complete
343fda8f67f1: Pull complete
Digest: sha256:ddd05759e91dce9db82d36a3df66011936cc49d59ac329589df379c44e74867e
Status: Downloaded newer image for nodered/node-red:latest

> node-red-docker@2.0.6 start /usr/src/node-red
> node $NODE_OPTIONS node_modules/node-red/red.js $FLOWS "--userDir" "/data"

21 Sep 12:36:01 - [info]

Welcome to Node-RED
===================

21 Sep 12:36:01 - [info] Node-RED version: v2.0.6
21 Sep 12:36:01 - [info] Node.js  version: v14.17.6
21 Sep 12:36:01 - [info] Linux 5.10.47-linuxkit x64 LE
21 Sep 12:36:02 - [info] Loading palette nodes
21 Sep 12:36:02 - [info] Settings file  : /data/settings.js
21 Sep 12:36:02 - [info] Context store  : 'default' [module=memory]
21 Sep 12:36:02 - [info] User directory : /data
21 Sep 12:36:02 - [warn] Projects disabled : editorTheme.projects.enabled=false
21 Sep 12:36:02 - [info] Flows file     : /data/flows.json
21 Sep 12:36:02 - [warn]

---------------------------------------------------------------------
Your flow credentials file is encrypted using a system-generated key.

If the system-generated key is lost for any reason, your credentials
file will not be recoverable, you will have to delete it and re-enter
your credentials.

You should set your own key using the 'credentialSecret' option in
your settings file. Node-RED will then re-encrypt your credentials
file using your chosen key the next time you deploy a change.
---------------------------------------------------------------------

21 Sep 12:36:02 - [info] Server now running at http://127.0.0.1:1880/
21 Sep 12:36:02 - [info] Starting flows
21 Sep 12:36:02 - [info] Started flows
全体的にログが英語なのが目に付きます(そう言えば、今までなんで日本語が出ていたのだろう。別の機会に掘ってみます)。起動時のログを上からサーッと眺めて気になった箇所をピックアップします。
  • Unable to find image 'nodered/node-red:latest' locally〜
    • DockerイメージがないのでPullしています
    • これ以降はnvm+Node.js上で起動したのと流れは一緒のようです
  • Node-REDバージョン:v2.0.6
    • 以前の記事と同じ最新版ですね
  • Node.jsバージョン:v14.17.6
    • Node.jsのバージョンが少し違います
  • ユーザディレクトリ:/data
    • ユーザディレクトリが以前と違いますね
    • これはDockerイメージがマウントしたボリューム上のパスなので、ホスト上のユーザディレクトリ(以前の記事で確認しました)を/dataにマウントしてやればDocker上に環境を複製できると想像できます
あとは以前と同じですね。ログにある通り、ブラウザから「http://127.0.0.1:1880/」にアクセスしてみると警告が表示されました。


読んでみると、
  • /dataにマウントされて起動されている
  • コンテナを再デプロイもしくはアップグレードすると変更したフローが失われる
  • 名前付きDockerボリュームを利用している場合はこの警告は無視していい
  • 詳しくはinfoパネルを参照のこと
とあります。今回は名前付きボリュームを利用しているので、警告は無視しても大丈夫です。ちなみにinfoパネルにはこんな感じの内容が書かれています。-vオプションでマウントしろってことみたいです。予想通り、/dataにユーザディレクトリをマウントしてやればホスト上にフローファイル他設定が保存できそうです。


ホストのユーザディレクトリをマウントして起動

続いて、infoパネルにある通りホストのユーザディレクトリをマウントして起動してみます(先ほど作成したコンテナを一旦削除しています)。
$ docker rm mynodered
$ docker run -it -p 1880:1880 -v /Users/wataru/.node-red:/data --name mynodered nodered/node-red
ブラウザでアクセスしてみるとホスト上のフローファイルが読み込まれました。


コンテナの起動と停止

ここまでできたら、あとはコンテナの起動と停止コマンドでNode-REDの起動および停止ができます。
$ docker stop mynodered
$ docker start mynodered
$ docker restart mynodered

さいごに

これでDocker上でNode-REDが使えそうです。もっと細かいことはドキュメントを確認するのが良さそうです。運用環境で便利なdocker-composeついては別の機会に深堀りしてみようと思います。

コメント

このブログの人気の投稿

Execノードを使う

Joinノードを使う(その4)

SendGridのX-SMTPAPIヘッダの使い方(Section Tags、Substitution Tags編)