Dockerfileで学ぶNode.js入門:環境構築から実行まで

はじめに

Node.jsは軽量で高速なサーバーサイドJavaScript実行環境として、多くのWebアプリケーションやツールに採用されています。
しかし、開発環境を整えるにはバージョン管理や依存関係の違いなどでトラブルが起きがちです。
そこで登場するのが Dockerfile
Dockerを使えば「どんな環境でも同じように動くNode.jsアプリ」を簡単に構築できます。

この記事では、Dockerfileを使ってNode.jsアプリの実行環境を作成する手順を、実際に動かしながら学びます。


Node.jsとDockerfileの関係

Dockerfileは、アプリケーションの実行環境を定義する設計図のようなものです。
Node.jsでは、Dockerfileを使うことで以下のような利点があります。

  • Node.jsのバージョンを固定できる
  • どのマシンでも同じ環境を再現できる
  • npm installなどの依存関係をキャッシュしてビルド高速化できる

ハンズオン:DockerfileでNode.jsアプリを構築

1. プロジェクトの準備

まずはプロジェクト用のディレクトリを作成します。

mkdir docker-node-tutorial
cd docker-node-tutorial

次に、簡単なNode.jsアプリを作成します。

npm init -y

index.js を作成して、簡単なHTTPサーバーを作りましょう。

// index.js
const http = require('http');
const port = 3000;

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello Docker + Node.js!\n');
});

server.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

2. Dockerfileを作成

次にDockerfileをプロジェクト直下に作成します。

# ベースイメージに公式のNode.jsイメージを使用
FROM node:18-alpine

# 作業ディレクトリを設定
WORKDIR /app

# package.jsonとpackage-lock.jsonをコピー
COPY package*.json ./

# 依存関係をインストール
RUN npm install

# ソースコードをコピー
COPY . .

# アプリを起動
CMD ["node", "index.js"]

# 外部アクセス用にポートを開放
EXPOSE 3000

このDockerfileは次のような流れになっています。

  1. Node.js 18の軽量版(Alpine)を使用
  2. /app にコードを配置
  3. npm installで依存関係をインストール
  4. index.js を実行してアプリを起動

3. Dockerイメージをビルド

以下のコマンドでイメージをビルドします。

docker build -t node-app-demo .

DockerがDockerfileの内容に従って、Node.js環境とアプリをセットアップします。


4. コンテナを起動

ビルドが完了したら、コンテナを起動してみましょう。

docker run -d -p 3000:3000 node-app-demo

-p 3000:3000 はホストの3000番ポートをコンテナの3000番にマッピングしています。

ブラウザで以下のURLにアクセスしてみてください:

http://localhost:3000

Hello Docker + Node.js! と表示されれば成功です!


5. 修正と再ビルドのポイント

もしコードを修正した場合、再度イメージをビルドし直す必要があります。

ただし、頻繁に変更する場合は次のようにボリュームマウントを使うと便利です。

docker run -d -p 3000:3000 -v $(pwd):/app node:18-alpine sh -c "cd /app && npm install && node index.js"

これにより、ホスト側の変更が即座に反映されます。


よくあるトラブルと対処法

トラブル原因対処法
npm install が遅いAlpine環境でビルド時にキャッシュが無効package.jsonだけ先にCOPYする
コンテナがすぐ終了するCMDが正しく設定されていないCMD ["node", "index.js"] を確認
ポートにアクセスできないEXPOSE-pオプションの設定ミスDockerfileとrunコマンドを再確認

まとめ

Dockerfileを使うことで、Node.js環境の構築はとてもシンプルになります。
今回の流れをまとめると:

  1. Node.js公式イメージをベースにする
  2. 作業ディレクトリを設定
  3. 依存関係をインストール
  4. ソースコードをコピーして実行

これだけで、どの環境でも同じNode.jsアプリを再現できます。


次のステップ

この基本を踏まえて、次は以下のステップに挑戦してみましょう。

  • Docker Composeで複数コンテナを連携(例:Node.js + MongoDB)
  • マルチステージビルドで軽量化
  • Trivyでセキュリティスキャンを自動化

投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です