Node.jsサービスのコンテナ化

コンテナ化とは、アプリケーション、その依存関係、ライブラリを一緒に束ねて、どんなインフラストラクチャでもプラグアンドプレイのように使用できるようにすることです。各バンドルはコンテナと呼ばれます。

Node.jsサービスをコンテナ化する理由

前のセクションで説明したように、Node.jsサービスをコンテナ化することは、アプリ、依存関係、ライブラリ、さらには設定を1つのコンテナに束ねることを意味します。コンテナ化には次のような利点があります:

  1. ポータブル.すべてのアプリ要件をコンテナに束ねたため、同じイメージを開発、ステージング、本番環境にインストールできます。
  2. 高速で軽量.コンテナは、アプリの要件のみを実行しているため、仮想マシン(VM)やベアメタルよりもはるかに高速である傾向があります。一方、従来のVMやベアメタルは、全体のマシンを起動し、すべてのアプリを実行していました。
  3. スケーラブル. 上記の2つの利点により、コンテナは素早く、効率的で、展開も簡単になるため、スケーラビリティが非常に容易になります。 

この記事では、 Node.jsアプリをコンテナ化する

前提条件

ツールとソフトウェア

Docker(Docker EngineとDocker CLI)

コンテナを管理するためにはDockerをインストールする必要があります。Docker Engineはランタイムを処理し、CLIはコマンドラインを介して対話できます。

Node.jsとnpm/yarnがインストールされている(初期開発/テスト用)

ライブラリの依存関係をインストールし、サービスを実行するためにNode.jsとnpmが必要です。

複数のコンテナを管理するためのKubernetesまたはDocker Compose(オプション)

複数のコンテナを管理するためには、KubernetesまたはDocker Composeが必要です。 

基本事項

Node.jsアプリケーション構造:

  • 読者はすでにプロジェクトのメインファイル(app.jsまたはindex.js)の役割と、package.jsonyarn.lockのような他のファイルの役割を理解していることが期待されています。
  • この記事では、コントローラー、ミドルウェア、 ルートなど、プロジェクトの他の側面については掘り下げません。

基本的なDockerコマンドとDockerfile構文

Dockerコマンド:

Shell

 

主要なDockerfile命令:

Shell

 

取り上げた両方の表とNode.jsの構造は、コンテナ化を開始し、Node.jsサービスをデプロイするのに十分です。

Node.jsサービスのセットアップ

Node.js環境の設定は簡単なプロセスです。 確実にあなたのマシンにNode.jsがインストールされていることを確認してください。もし疑問がある場合は、付録(1)を参照してください。 インストールが完了したら、ターミナルを開き、インストールを確認するために次のコマンドを入力します。 

Shell

 

プロジェクトディレクトリを作成し、あなたのプロジェクトを次のように初期化します:

Shell

 

expressモジュールをインストールします

Shell

 

サーバーファイルを作成します。これをserver.mjsと呼びましょう。ここでは、ルートとそのルートに対応するロジックを追加できます。この記事はコンテナ化についてのものであるため、エンドポイントロジックは非常にシンプルに保ちます。以下のようなものです:

JavaScript

 

今 あなたの サービスは開始準備が整いました。プロジェクトディレクトリに移動し、ターミナルで次のコマンドを実行します:

Shell

 

サービスは起動しており、稼働中です。もし 私たちが訪れると http://localhost:3000、次のように表示されます:

“私のサーバーへようこそ” 

Dockerfileの作成

Dockerfileとは何か 復習しましょう。Dockerfileは、 Dockerイメージを構築するための指示が 記載されています。Dockerfileをルートディレクトリに作成しましょう。このステップでは、Dockerfileの指示で説明したように、次のことを行う必要があります:

Plain Text

 

Dockerイメージのビルドと実行

端末のルートから、あなたのプロジェクトに移動して、次のコマンドを実行します:

Shell

 

ここでimage-nameはDockerイメージの名前です。末尾の.はコンテキストを現在のディレクトリに設定します。

イメージがビルドされたら、次のコンテナを作成し、Node.jsアプリを実行します:コマンドを使用します:

Shell

 

上記が成功したら、サービスが実行されているかどうかを確認するために、docker psを実行し、以前と同じlocalhostのURLに移動します。

イメージをレジストリにプッシュする

現在、あなたのイメージが準備できたので、次はレジストリにプッシュする時です。本記事の範囲では、Docker Hubにのみプッシュすることにします。Docker Hubは、Dockerコンテナイメージを保存、共有、管理するためのクラウドベースのサービスです。

以下でアカウントを作成してください:https://hub.docker.com/そして、アカウントでログインしてください。

Shell

 

ログイン後、ローカルで作成したイメージを以下のように追加できます:

Shell

 

ここで:

  • taglatest またはバージョン番号です。
  • repository-name は目的のリポジトリ名です。

次に、以下のコマンドでイメージをプッシュします:

Shell

 

結論

見てわかる通り、コンテナ化は依存関係を分離することで複雑なワークフローやサービスを迅速かつ移植可能かつスケーラブルにします。実装されると、チーム全体がその恩恵を受けることができます。高度な機能(例:マルチステージビルドやコンテナネットワーキングなど)を探求することをお勧めします。また、オーケストレーションツール(例:Kubernetes)の学習やCI/CDパイプラインの統合なども検討して、開発ワークフローを最適化してください。

付録

  1. 自分のマシンにnodeとnpmをインストールする方法

Source:
https://dzone.com/articles/containerization-of-a-nodejs-service