はじめに
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は次のような流れになっています。
- Node.js 18の軽量版(Alpine)を使用
/app
にコードを配置- npm installで依存関係をインストール
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環境の構築はとてもシンプルになります。
今回の流れをまとめると:
- Node.js公式イメージをベースにする
- 作業ディレクトリを設定
- 依存関係をインストール
- ソースコードをコピーして実行
これだけで、どの環境でも同じNode.jsアプリを再現できます。
次のステップ
この基本を踏まえて、次は以下のステップに挑戦してみましょう。
- Docker Composeで複数コンテナを連携(例:Node.js + MongoDB)
- マルチステージビルドで軽量化
- Trivyでセキュリティスキャンを自動化
コメントを残す