Node.js アプリケーションを Docker Compose を使用してコンテナベースのワークフローを構築する方法について、完全かつ包括的なガイドを以下に示します。このガイドでは、Docker と Docker Compose を利用して、Node.js アプリケーションの開発環境を設定する手順を詳しく解説します。
1. 前提条件のインストール
最初に、Docker と Docker Compose をインストールする必要があります。以下の手順でそれぞれをインストールします。
Docker のインストール
-
Docker の公式サイト (https://www.docker.com/get-started) から最新の Docker をインストールします。
-
インストールが完了したら、ターミナルで以下のコマンドを実行して、Docker が正常にインストールされたか確認します。
bashdocker --version
Docker Compose のインストール
Docker Compose は、複数のコンテナを一度に定義し、管理するためのツールです。最新の Docker Compose をインストールします。
bashdocker-compose --version
もしインストールされていなければ、公式サイト (https://docs.docker.com/compose/install/) に従ってインストールしてください。
2. プロジェクトのセットアップ
Node.js アプリケーションを作成し、そのアプリケーションを Docker コンテナで動かすために、プロジェクトフォルダを作成します。
1. Node.js プロジェクトの作成
まず、新しいディレクトリを作成し、その中に Node.js プロジェクトを初期化します。
bashmkdir my-node-app
cd my-node-app
npm init -y
次に、必要なパッケージをインストールします。この例では、express を使用してシンプルな Web サーバーを作成します。
bashnpm install express
2. アプリケーションコードの作成
index.js という名前で、以下の内容の Node.js アプリケーションを作成します。
javascriptconst express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello from Node.js with Docker!');
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
このアプリケーションは、/ パスにアクセスすると “Hello from Node.js with Docker!” というメッセージを返します。
3. Dockerfile の作成
次に、アプリケーションを Docker コンテナ内で動かすために、Dockerfile を作成します。このファイルは、Node.js アプリケーションをコンテナ内で動かすための手順を定義します。
dockerfile# Node.js の公式イメージを使用 FROM node:14 # 作業ディレクトリを設定 WORKDIR /usr/src/app # パッケージ情報をコンテナ内にコピー COPY package*.json ./ # 必要なパッケージをインストール RUN npm install # アプリケーションのソースコードをコピー COPY . . # アプリケーションを実行 CMD ["node", "index.js"] # コンテナがリッスンするポートを指定 EXPOSE 3000
4. Docker Compose の設定
複数のコンテナを一度に管理するために、Docker Compose を使用します。docker-compose.yml ファイルをプロジェクトルートに作成し、以下の内容で記述します。
yamlversion: '3'
services:
web:
build: .
ports:
- "3000:3000"
この設定では、web というサービスを定義しており、現在のディレクトリ (.) から Docker イメージをビルドし、ホストのポート 3000 とコンテナのポート 3000 をバインドしています。
5. コンテナのビルドと起動
次に、Docker Compose を使用してアプリケーションのコンテナをビルドし、起動します。
bashdocker-compose up --build
このコマンドは、docker-compose.yml ファイルの指示に従ってコンテナをビルドし、実行します。ビルドが完了したら、アプリケーションがポート 3000 で実行されていることが確認できます。
ブラウザで http://localhost:3000 にアクセスすると、”Hello from Node.js with Docker!” というメッセージが表示されるはずです。
6. コンテナの停止
開発が完了したら、以下のコマンドでコンテナを停止します。
bashdocker-compose down
これにより、すべてのコンテナが停止し、ネットワークも削除されます。
7. より高度な設定
上記の手順では、基本的な Node.js アプリケーションを Docker コンテナで動かす方法を説明しましたが、さらに複雑な設定を追加することができます。
1. 環境変数の使用
Docker Compose では、環境変数を使用してコンテナに設定を渡すことができます。例えば、docker-compose.yml に以下のように環境変数を追加できます。
yamlservices:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
これにより、アプリケーション内で process.env.NODE_ENV を使用して、環境設定を読み取ることができます。
2. 複数のサービスの構成
例えば、Node.js アプリケーションとデータベース(例えば MongoDB)を一緒に運用する場合、docker-compose.yml にサービスを追加します。
yamlversion: '3'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
db:
image: mongo
volumes:
- ./data/db:/data/db
これで、db サービスとして MongoDB コンテナが実行され、Node.js アプリケーションがそのデータベースにアクセスできるようになります。
8. デバッグとログの確認
コンテナのログを確認するには、以下のコマンドを使用します。
bashdocker-compose logs
特定のサービスのログを確認するには、以下のようにサービス名を指定します。
bashdocker-compose logs web
これにより、web サービスのコンテナから出力されるログを確認できます。
結論
このガイドでは、Node.js アプリケーションを Docker Compose を使用してコンテナベースで実行するための基本的な手順を説明しました。Docker と Docker Compose を利用することで、アプリケーションの開発環境を簡単に構築し、複数のコンテナを効率的に管理できるようになります。さらに、環境変数や複数のサービスを使用することで、より複雑なアプリケーションを構築することも可能です。
