工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 産業技術

DockerでPLCnextにNode-REDをデプロイ:ステップバイステップガイド

Dockerコンテナを使用して、PLCnextデバイス上でNode-REDサーバーを実行できます。こちらで説明されている別の方法の方が少し速いですが、OCIコンテナの利点もあります。例えば、アプリケーションで同じパッケージを繰り返し使用する場合、標準イメージをビルドしてDocker Hubからダウンロードするだけで済みます。また、Dockerを使えばNode-REDサーバーを必要なときに開始・停止できます。

このブログではその手順を説明します。まずDockerのインストールプロセスをガイドし、インストールを確認します。Dockerfileで好みのパッケージを事前インストールしたカスタムイメージをビルドし、そこからコンテナを作成します。最後に、コントローラ起動時にコンテナが自動開始するようにし、イメージをDocker Hubにプッシュします。

Balena Engineのインストール

「DockerコンテナでNode-REDを実行」と言いましたが、正確にはBalena Engineを使用してOCI(Open Container Initiative)コンテナを実行します。用語の詳細は割愛しますが、詳細は文末の「さらに読む」を参照してください。

インストール手順はこちらで完全版を参照できますが、実用性を考慮してここにもコマンドを記載します。rootユーザーとしてログインしていることを確認してください。新しいrootパスワードを作るには、シェルで以下を実行し、管理者パスワードに続けて2回新しいrootパスワードを入力:

sudo passwd root

suと新しいパスワードでrootユーザーとしてログイン。Gitリポジトリをクローンしてフォルダに移動:

git clone https://github.com/PLCnext/Docker_GettingStarted.git
cd Docker_GettingStarted

セットアップスクリプトを実行可能にして実行:

chmod +x setup.sh
./setup.sh

コンテナからのインターネットアクセス

インストール中にnftテーブルが正しく設定されないことがあります。幸い簡単に修正できます。完全なリファレンスはこちらですが、簡単な手順を以下に示します。

シェルで:

ifconfig

ネットワークインターフェースの設定が表示されます。「balena」という名前のものがあり、そのInetアドレスをメモします。172.17.0.1のような形式のはずです。

次のコマンドを実行し、前の手順で得たInetアドレスとスクリプトの2行目を比較:

nano /etc/nftables/balena.nft

2つのアドレスが同じなら次のセクションへ。異なる場合は、次のコマンドを実行し、2行目のアドレスをifconfigで得たものに変更:

/etc/init.d/balena stop
/etc/init.d/balena start

balena-engineデーモンを停止・開始してnftテーブルを再読み込みします。

最初のコンテナ

最初のコンテナをダウンロードするには次のコマンド(フラグの説明は後で):

balena-engine run -d -p 1880:1880 --name nodered --restart always nodered/node-red

カスタムパッケージが不要ならここで終了。コントローラのポート1880にブラウザでアクセスしてください。

Docker Hub

前節で使用したarm32v7/debianイメージはDocker Hubからダウンロードされました。Docker Hubはコンテナイメージが集められ、簡単にダウンロードできる場所です。arm32v7組織のイメージはAXC F 2152のアーキテクチャと互換性があるためお勧めです。nodered組織もAXC F 2152互換のイメージを提供しており、次節で使用します。コンテナを頻繁に使うならDocker Hubアカウントを作成し、リポジトリを活用すべきです。無料アカウントでほぼ無制限のパブリックリポジトリと1つのプライベートリポジトリが得られます。私はしばらくDocker Hubを避けていましたが、多くの時間を浪費しました。最後のセクションで、ログイン、再タグ付け、プッシュの方法を紹介して学習曲線を緩やかにします。

Dockerfile

DockerfileはDockerイメージの「レシピ」のようなものです。ここではDockerfileを使って、必要なパッケージをプリインストールした独自のNode-REDイメージを作成します。Dockerfileの最初の行はほぼ必ずFROMコマンドで、ベースイメージを定義します。FROM文の後でイメージを構築します。Dockerfileには多くのコマンドがありますが、ここではRUNのみ使用します。Dockerfileリファレンスは「さらに読む」を参照。RUN文は、ビルド中のコンテナ内で続くコマンドを実行します。例えばSNMPパッケージをインストールするには:RUN npm install node-red-node-snmp

理論はここまで。Dockerfileを作成します。まだSSHセッション中(AXC F 2152に戻っており、2つ前のセクションのDebianコンテナの中にいないこと)を確認してください。nano Dockerfileでファイルを作成し、以下をコピペして保存(ctrl+s)して終了(ctrl+x):

FROM nodered/node-red:latest-minimal
RUN npm install node-red-node-snmp

新しいイメージをビルド!

balena-engine build . --tag myimage

「successfully tagged」のメッセージが出れば最初のイメージ完成です!
balena-engine imagesで確認できます。

新しいイメージの実行

いよいよイメージを実行してコンテナを作成します!シェルで以下を実行してインタラクティブに実行(コンテナ内の様子がターミナルに表示されます)。対義語はdetached(-dフラグ)。

balena-engine run -it -p 1880:1880 --name nodered myimage

コンテナを抜けて実行し続けるにはctrl+p ctrl+q。コントローラのIPアドレスにポート1880でブラウザアクセスするとNode-RED環境が表示され、SNMPパッケージがインストールされていることがわかります!

起動時自動開始とdocker runフラグの入門

AXC F 2152が再起動するたびに手動でコンテナを起動するのは非現実的です。Dockerに自動開始を任せられます。以下のコマンドを使用:

balena-engine run -it -p 1880:1880 --name nodered --restart always myimage

ここでdocker runフラグの理解を深めましょう。フラグはコマンドの後に続き、-または--で始まります。これまで-it(インタラクティブ)、-d(デタッチド/バックグラウンド)を見てきました。
-pはコンテナのポートをホストのポートにマッピングします。ホスト側ポート番号、コンテナ側ポート番号の順。
--nameでコンテナに名前を付けられます。この名前はbalena-engine ps(アクティブなコンテナ一覧)やbalena-engine ps -a(全コンテナ一覧)に表示されます。指定しないとランダムな名前が割り当てられます。
--restartで再起動ポリシーを設定できます。設定値はリファレンスリンク(「さらに読む」)を参照。--restart alwaysでOKです!

Docker Hubへプッシュ

異なるコントローラでイメージを使いたい場合、Docker Hubにアップロードするのが良いでしょう。アカウント作成とリポジトリ作成済みとして進めます。まずログイン:balena-engine loginでユーザー名とパスワードを入力。これでプライベートリポジトリからのダウンロードと自分のイメージのプッシュが可能になります。
イメージ名を正しくすることが重要です。リポジトリがmyrep、ユーザーがmyaccountなら、イメージ名はmyaccount/myrepである必要があります。ビルド時にそう命名しなかった場合はbalena-engine tag oldimagetag newimagetagで再タグ付け。今回の場合:

balena-engine tag myimage myaccount/myrep

ラベルを追加する場合は:とラベル名。例:

balena-engine tag myimage myaccount/myrep:alabel

最後にDocker Hubへプッシュ:

balena-engine push myaccount/myrep

さらに読む・参考資料

産業技術

  1. 不屈の成功:エイブラハム・リンカーンとメンテナンスリーダーシップに学ぶ粘り強さ
  2. Cat®機材を最適化:My.Cat.com完全活用ガイド
  3. TJBot入門:組み立て、設定、音声制御で自分だけのAIロボットを構築
  4. RAK 831 LoRaゲートウェイをRaspberry Pi 3に導入するステップバイステップガイド
  5. Raspberry Pi 3 と RAK831 モジュールで LoRa ゲートウェイを構築するステップバイステップガイド
  6. Arduino初心者チュートリアル01: 最初のプロジェクトを始めよう
  7. セラミック3Dプリント実践ガイド:技術、材料、設計のコツ
  8. 保険業界における AI:実践的スターターガイド
  9. Docker上のNode-REDをマスター:エキスパートのヒントとベストプラクティス
  10. 基本染料の理解:用途・安全性・産業応用
  11. 産業用染料と顔料:用途とタイプの包括ガイド