Node.jsアプリケーションをコンテナ化する

Node.js Dockerコンテナイメージ

私たちは最近、Dockerに関するブログを公開し、その中でコンテナ化されたGridDBサーバーとGridDBアプリケーションについて紹介しました。そのブログ(およびビデオ)では、特定のプログラミング言語向けGridDBクライアントを内包したコンテナ型アプリケーションの使用について詳しく説明しました。

また、前回のブログで手始めに、GridDBサーバー、Pythonアプリケーション、およびJavaアプリケーションの公開Dockerイメージを作成しました。これらはすべてDocker Hubから入手できるようになっています。 そして今回、PythonアプリケーションおよびJavaアプリケーションに加えて、新たにNode.jsコンテナ型アプリケーションイメージを追加しました。 これにより、他のDockerイメージと同様に、非常に移植性の高いコンテナ型Node.js GridDBアプリケーションを実行することができるようになりました。

このブログでは、コンテナ化されたアプリケーションがお使いの環境で適切に機能することを確認し、新しく作成されたイメージの使用方法と独自のコードの挿入方法について簡単に説明します。

はじめに

まず、Node.jsイメージがどのように見えるかを見てみましょう。

FROM node:10

RUN wget https://github.com/griddb/c_client/releases/download/v4.3.0/griddb-c-client_4.3.0_amd64.deb
RUN dpkg -i griddb-c-client_4.3.0_amd64.deb

WORKDIR /opt/nodejs
COPY package*.json ./
RUN npm install

ENV LD_LIBRARY_PATH /usr/griddb_c_client-4.3.0/lib/

ADD blogSample.js /opt/nodejs
CMD ["node", "/opt/nodejs/blogSample.js"]

GridDB Node.jsクライアントがnpm経由で利用できるようになったため、Dockerfileは非常にシンプルです。 ご覧のとおり、GridDB Node.jsクライアントの唯一の要件は、Node.jsのバージョン10を使用し、GridDB c_clientをインストールすることです。 インストールしたら、package.jsonファイルをコピーして、Node.jsクライアントを依存関係としてリストし、「npm install」を実行します。 blogSample.js以外の独自のNode.jsコードを実行したい場合、blogSample.jsファイルの代わりに独自のnodejsコードをコピーするようにしてください。

注意点:コンテナ化されたGridDBサーバーを実行している場合の接続方法はIPアドレスを指定する代わりに、次のようになります。

const factory = griddb.StoreFactory.getInstance();
const store = factory.getStore({
    "notificationMember": "griddb-server:10001",
    "clusterName": "defaultCluster",
    "username": "admin",
    "password": "admin"
});

通常のサーバーのみを実行している場合、接続情報は従来通り、IPアドレスを使用する方法で問題ありません。

実行する

実行の方法は通常のDockerコンテナと同じです。

[root@GridDB nodejs]$ docker build -t griddb-nodejs .
Sending build context to Docker daemon  2.114MB
Step 1/9 : FROM node:10
 ---> d9b29c7fd8c0
Step 2/9 : RUN wget https://github.com/griddb/c_client/releases/download/v4.3.0/griddb-c-client_4.3.0_amd64.deb
 ---> Using cache
 ---> 6550ce141d57
Step 3/9 : RUN dpkg -i griddb-c-client_4.3.0_amd64.deb
 ---> Using cache
 ---> ba30fe035674
Step 4/9 : WORKDIR /opt/nodejs
 ---> Using cache
 ---> 1e18971d3670
Step 5/9 : COPY package*.json ./
 ---> Using cache
 ---> 372cbda5a26c
Step 6/9 : RUN npm install
 ---> Using cache
 ---> 996f7d0099c9
Step 7/9 : ENV LD_LIBRARY_PATH /usr/griddb_c_client-4.3.0/lib/
 ---> Using cache
 ---> 3c35b0f512c8
Step 8/9 : ADD blogSample.js /opt/nodejs
 ---> Using cache
 ---> 254f4b957808
Step 9/9 : CMD ["node", "/opt/nodejs/blogSample.js"]
 ---> Using cache
 ---> 9184cfcd24dc
Successfully built 9184cfcd24dc
Successfully tagged griddb-nodejs:latest

そして、GridDBサーバーと共有されているDockerコンテナ・ネットワークのオプションを含めて実行します(コンテナ化されたバージョンではなく、ローカルのGridDBサーバーで実行している場合を除く)。

$ docker run --network griddb-net -t griddb-nodejs

基本的にはこれで完了ですが、最後に、前のブログで説明したコマンドをここでも紹介しておきます。 このコマンドは、コンテナ化されたGridDBサーバーのIPアドレスを表示しますが、アプリケーションの実行はスキップします。

$ CONT=`docker ps | grep griddb-server | awk '{ print $1 }'`; docker exec $CONT cat /etc/hosts | grep $CONT | awk '{ print $1 }'

不明な点がある場合は、お気軽にお問い合わせください。

ブログの内容について疑問や質問がある場合は Q&A サイトである Stack Overflow に質問を投稿しましょう。 GridDB 開発者やエンジニアから速やかな回答が得られるようにするためにも "griddb" タグをつけることをお忘れなく。 https://stackoverflow.com/questions/ask?tags=griddb

Leave a Reply

Your email address will not be published. Required fields are marked *