dockerでnode.jsを使用する方法

Joseph Gordon-Levitt
Joseph Gordon-Levittオリジナル
2025-02-08 11:49:09116ブラウズ

このチュートリアルは、node.jsアプリケーションにdockerコンテナを使用することの利点を示し、効率的な開発ワークフローを確立します。

node.jsは、サーバーとクライアントの両方の側でJavaScriptを使用して、高速でスケーラブルなWebアプリケーションの作成を強化します。 アプリケーションは開発マシンで完璧に機能する可能性がありますが、さまざまな環境(同僚のマシン、生産サーバー)での一貫したパフォーマンスは保証されていません。 これらの潜在的な問題を考慮してください:

  • オペレーティングシステムのバリエーション:開発環境はmacOSである可能性がありますが、同僚はWindowsを使用し、生産サーバーはLinuxを実行します。
  • node.jsバージョンの不一致:
  • node.js 20を使用するかもしれませんが、他の人はさまざまなバージョンを使用しています。 依存関係の違い:
  • データベースおよびその他の依存関係は、さまざまなプラットフォームで異なるか、利用できない場合があります。
  • セキュリティ上の懸念:予想外のセキュリティリスクは、多様なオペレーティングシステムにコードを展開するときに発生する可能性があります。
  • 重要なメリット

クロスプラットフォーム互換性:dockerは、node.jsアプリケーションが孤立したコンテナ環境で実行できるようにすることにより、「マイチンで動作する」という問題を解決します。

    simplified node.jsアプリのDockerでの展開:基本的なnode.jsスクリプトを作成し、Dockerコンテナ内で実行することをガイドします。
  • 拡張node.js開発ワークフロー:node.jsアプリケーションの開発プロセスをDockerがどのように合理化するかを示します。
  • docker'sソリューション
  • Dockerは、前述の互換性の課題に効果的に対処します。アプリケーションを直接インストールする代わりに、コンテナと呼ばれる軽量で孤立した仮想マシンのような環境内でそれらを実行します。
PCハードウェアとオペレーティングシステム全体をエミュレートする仮想マシンとは異なり、DockerはOSをエミュレートして、アプリケーションを直接インストールできます。 Linuxベースのコンテナごとに1つのアプリケーションを実行し、HTTP通信のために仮想ネットワークを介してそれらを接続することが一般的です。

利点は多数あります:

一貫した環境:

dockerセットアップは、生産Linuxサーバーを反映​​して、展開を簡素化します。

How to Use Node.js with Docker 簡略化された依存関係管理:

依存関係を分でダウンロード、インストール、構成します。

クロスプラットフォームの一貫性:

コンテナ化されたアプリは、すべてのプラットフォームで同じように動作します。

    セキュリティの拡張:
  • コンテナ内でアプリが誤動作する場合、ホストマシンには影響しません。コンテナを簡単に再起動できます。
  • dockerを使用して、node.jsをローカルにインストールするか、nvmのようなランタイムマネージャーを使用する必要がありません。

    あなたの最初のnode.jsスクリプト

    Dockerデスクトップ(Windows、MacOS、またはLinux)をインストールします。 version.js

    という名前の簡単なスクリプトを作成します
<code class="language-javascript">console.log(`Node.js version: ${process.version}`);</code>

node.jsがローカルにインストールされている場合は、バージョンを表示するために実行します。 次に、Dockerコンテナ内で実行します(最新のLTS node.jsバージョンを使用):

(macos/linux)

<code class="language-bash">$ docker run --rm --name version -v $PWD:/home/node/app -w /home/node/app node:lts-alpine version.js</code>

(Windows PowerShell)

最初の実行には、Dockerが依存関係をダウンロードすると、少し時間がかかる場合があります。後続の実行ははるかに高速です。 node.jsバージョン(例:
<code class="language-powershell">> docker run --rm --name version -v ${PWD}:/home/node/app -w /home/node/app node:lts-alpine version.js</code>
)を簡単に切り替えることができます。 スクリプトは、特定のnode.jsバージョンを使用してLinuxコンテナ内で実行されます。

node:21-alpineコマンドブレークダウン:

:画像からコンテナを起動します。
  • docker run:終了時に容器を取り外します。
  • --rm:コンテナに名前を割り当てます。
  • --name version:現在のディレクトリをコンテナ内のボリュームとしてマウントします。
  • :コンテナ内の作業ディレクトリを設定します。-v $PWD:/home/node/app
  • :dockerイメージ(lts node.js on alpine linux)を指定します。 -w /home/node/app
  • :実行するコマンド
  • node:lts-alpine
  • dockerイメージはDocker Hubで利用でき、
  • version.js、またはなどの識別子でタグ付けされたさまざまなバージョンを提供します。 Alpine Linuxは、単純なプロジェクトに最適な軽量分布です。
より複雑なアプリケーションを実行している

:lts-alpine 20-bullseye-slim依存関係とビルドステップ(npmを使用)を備えたアプリケーションの場合、カスタムDocker画像が必要です。この例では、express.js:latestを使用しています

という名前のディレクトリを作成し、を追加します

および

simple package.jsona

<code class="language-json">{
  "name": "simple",
  "version": "1.0.0",
  "description": "simple Node.js and Docker example",
  "type": "module",
  "main": "index.js",
  "scripts": {
    "debug": "node --watch --inspect=0.0.0.0:9229 index.js",
    "start": "node index.js"
  },
  "license": "MIT",
  "dependencies": {
    "express": "^4.18.2"
  }
}</code>
を作成します

画像を作成します:index.js

<code class="language-javascript">// Express application
import express from 'express';

// configuration
const cfg = {
  port: process.env.PORT || 3000
};

// initialize Express
const app = express();

// home page route
app.get('/:name?', (req, res) => {
  res.send(`Hello ${req.params.name || 'World'}!`);
});

// start server
app.listen(cfg.port, () => {
  console.log(`server listening at http://localhost:${cfg.port}`);
});</code>
コンテナを実行します:

Dockerfile

<code class="language-dockerfile"># base Node.js LTS image
FROM node:lts-alpine

# define environment variables
ENV HOME=/home/node/app
ENV NODE_ENV=production
ENV NODE_PORT=3000

# create application folder and assign rights to the node user
RUN mkdir -p $HOME && chown -R node:node $HOME

# set the working directory
WORKDIR $HOME

# set the active user
USER node

# copy package.json from the host
COPY --chown=node:node package.json $HOME/

# install application modules
RUN npm install && npm cache clean --force

# copy remaining files
COPY --chown=node:node . .

# expose port on the host
EXPOSE $NODE_PORT

# application launch command
CMD [ "node", "./index.js" ]</code>

でアプリにアクセスします docker image build -t simple .a

ファイルは、不必要なファイルが画像にコピーされるのを防ぐことができます。

docker run -it --rm --name simple -p 3000:3000 simpleDocker Composeの改善された開発ワークフロー

http://localhost:3000/以前の方法は、開発には非効率的です。 Docker Composeはより良いソリューションを提供します。

を作成します .dockerignore

から始めます

。 自動再起動のトリガーの変更。 VSコードのデバッガー(ポート9229に添付)を使用して、デバッグを強化します。 で停止します

結論docker-compose.yml

Dockerには初期セットアップが必要ですが、信頼できる分散性コードの長期的な利点は重要です。 このチュートリアルは基本をカバーしています。高度な使用法のためのさらなるリソースを調べてください。 画像は簡潔に保持されています。

以上がdockerでnode.jsを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。