チュートリアル: Node.js Express アプリケーションを Docker 化する
Docker を使用すると、アプリケーションを特定のランタイム環境やその他の必要な依存関係とともにイメージにパッケージ化できます。 その後、そのイメージからコンテナーを実行し、アプリケーションがその環境でどのように動作するかを確認できます。 これをアプリケーションの Docker 化と呼びます。
このチュートリアルでは、Node.js 22 と Node.js Express アプリケーションを使用して Docker イメージをビルドするための Dockerfile を作成する方法について説明します。 また、このイメージを他のユーザーと共有し、そこから Docker コンテナーを実行する方法も説明します。
例 1: シンプルな Node.js アプリケーションを Docker 化する
シンプルな Node.js Express アプリケーションから始めましょう。 このアプリケーションは、 Hello World! を返し、コンソールに Example app listening on port 3000! を出力する hello_express.js ファイルで構成されています。
Node.js で空のプロジェクトを作成する
Welcome 画面で 新規プロジェクト をクリックするか、メインメニューから を選択してください。
開いたダイアログで、左側のペインで Node.js を選択します。
アプリケーションの場所と名前(例:
hello_world_docker)を指定します。使用するローカル Node.js ランタイムを指定します。 推奨インストールを承認するか、リストから別のものを選択するか、まだマシンに Node.js がインストールされていない場合は ダウンロード をクリックしてください。 詳しくは 新しい Node.js アプリケーションを作成するを参照してください。

作成 をクリックしてください。
アプリケーションを実装する
アプリケーション用に別のフォルダーを作成しましょう。これにより、後でローカルフォルダーをコンテナー内のフォルダーにマッピングしやすくなります。
そのためには、 プロジェクト ツールウィンドウ Alt+1 を開き、プロジェクトフォルダーを右クリックし、コンテキストメニューから を選択し、 を選択します。 表示されるポップアップダイアログで、フォルダー名(例: app )を指定します。

ここで、アプリケーションのコードを配置するための JavaScript ファイルを作成します。

表示されるポップアップダイアログで、ファイル名 (例: hello_express.js ) を指定します。

新しく作成された hello_express.js ファイルをエディターで開き、次のコードを入力します。
const express = require('express'); const app = express(); app.get('/', function(req, res) { res.send('Hello World!') }); app.listen(3000,function() { console.log('Example app listening on port 3000!') });ご想像のとおり、
express参照は解決されておらず、エラーとしてハイライト表示されています。 ただし、参照にマウスオーバーすると、WebStorm がクイックフィックスを提案します:
「エクスプレス」をインストールする リンクをクリックすると、 package.json ファイルに
expressが追加され、インストールされます。
アプリケーションをローカルで実行する
アプリケーションをローカルで実行して、期待どおりに動作するか確認してみましょう。
hello_express.js ファイルを開き、エディタータブ内の任意の場所を右クリックし、コンテキストメニューから を選択します。

実行 ツールウィンドウが開き、
Example app listening on port 3000!が表示されます。http://localhost:3000でブラウザーを開くと、予想どおりページに Hello World! が表示されます。
Dockerfile を作成する
プロジェクトフォルダーのコンテキストメニューから、 を選択し、次に を選択します。

新しく作成された Dockerfile を開き、次のコードを入力します。
FROM node:22-alpine WORKDIR /tmp COPY package*.json . RUN npm ci --omit=dev COPY ./app/ ./app/ CMD ["node","./app/hello_express.js"]この Dockerfile には、 Docker Hub(英語) の
node:22イメージに基づいてイメージを構築するための手順が含まれています。このイメージからコンテナーを実行すると、Docker はコンテナー内の /app/ ディレクトリの内容を /tmp/app/ ディレクトリにコピーします(この例では、 /app/ ディレクトリに hello_express.js ファイルが含まれています)。 package.json ファイルは /tmp/ にコピーされます。
次に、Docker は現在の作業ディレクトリを /tmp に設定し、
node ./app/hello_express.jsを実行します。 その結果、コンテナーログにはExample app listening on port 3000!が表示されます。
Dockerfile からイメージをビルドして実行する
エディターで Dockerfile を開き、
ガターアイコンをクリックして、 実行 を選択してから、 'Docker' で実行する を選択します。

WebStorm は Dockerfile 実行構成 を作成し、Dockerfile からイメージをビルドし、そのイメージに基づいてコンテナーを実行します。

プロセス全体を確認するには、 サービス ツールウィンドウの ビルドログ タブを開いてください。

たとえば、Node.js をインストールしなくても、アプリケーションがどのように実行されるかを正確に示すために、イメージを他のユーザーと共有できます (Docker のみが必要です)。
これで、コンテナー内で Express アプリが実行状態になり、ポート 3000 をリッスンするようになりました。 しかし、外部から接続することはできません。 コンテナーのポートを公開し、ホストのポートにバインドする必要があります。
コンテナーのポートを公開する
Dockerfile を開き、次の行を追加します。
EXPOSE 3000これで、Dockerfile は次のようになります。
FROM node:22-alpine WORKDIR /tmp COPY package*.json . RUN npm ci --omit=dev COPY ./app/ ./app/ EXPOSE 3000 CMD ["node","./app/hello_express.js"]
コンテナーのポートをホストのポートにバインドする
ポートバインディングは次の 2 つの方法で実行できます。
Dockerfile を実行すると、WebStorm により作成される実行 / デバッグ構成内で。 この場合は、コンテナーを再起動する必要があります
実行中のコンテナー内。
実行 / デバッグ構成でポートをバインドする
上記のように Dockerfile を実行すると、WebStormは Dockerfile型の 一時的な実行 / デバッグ構成をデフォルト名 Dockerfileで作成します。 この設定は、使用した Dockerfile の設定に基づいており、ポートバインディングに関する情報は含まれていません。
メインツールバーの ウィジェットを実行する で、自動生成された Dockerfile 実行構成を選択し、
をクリックして、 を選択します。

開いた 実行 / デバッグ構成 ダイアログで、左側のペインで Dockerfile 実行構成を選択し、ツールバーの
をクリックします。

右側のペインで、 オプションを変更 をクリックし、 バインドポート を選択します。

バインドポート フィールドで、
をクリックし、開いた ポートバインディング ダイアログで
をクリックします。
コンテナーポート フィールドで、アプリケーションがコンテナー内で稼働しているポートを指定してください。この例では
3000です。ホストポート フィールドで、コンテナーの外部からアプリケーションにアクセスできるポート (例:
3001) を指定します。
OK をクリックすると、ダイアログが閉じて、 バインドポート フィールドでポートバインディングが指定されている 実行 / デバッグ構成 ダイアログに戻ります。

実行中のコンテナーのポートをバインドする
上記の説明に従ってアプリケーションを実行します。
ダッシュボード タブで、 ポート エリアの 追加 をクリックし、コンテナーポートを指定します。例では
3000です。
オプションを変更 をクリックし、 ホストポート の横にチェックを入れ、追加されたフィールドにホストポートを指定します。 この例では、
3001とします。
ポートバインディングをどのように指定したかに関係なく、アプリケーションを http ://localhost:30001 で開くことができるようになりました。

例 2: 複雑なフォルダー構造を持つ Node.js Express アプリケーションを Docker 化する
この例では、より複雑なフォルダー構造を持つ Express アプリケーションを使用します。
Node.js Express アプリケーションを作成する
Welcome 画面で 新規プロジェクト をクリックするか、メインメニューから を選択してください。
開いたダイアログで、左側のペインで Express を選択します。
アプリケーションの場所と名前(例:
node_express_docker)を指定します。使用するローカル Node.js ランタイムを指定します。 推奨インストールを承認するか、リストから別のものを選択するか、まだマシンに Node.js がインストールされていない場合は ダウンロード をクリックしてください。 詳しくは 新しい Node.js アプリケーションを作成するを参照してください。

ビューエンジン および スタイルシートエンジン のデフォルト設定を受け入れます。
作成 をクリックしてください。
WebStormはシンプルな Express アプリケーションを生成し、 package.json に記載された依存関係をインストールします。
アプリケーションをローカルで実行する
自動生成されたアプリケーションが動作することを確認するために、まずはローカルで実行してみましょう。 WebStorm によって、 Node.jsタイプの bin/www実行 / デバッグ構成も生成されています。
ツールバーの 実行 ウィジェットから bin/www 実行 / デバッグ構成を選択し、その横にある
をクリックします。

実行 ツールウィンドウが開き、アプリケーションの出力が表示されます。

ブラウザーで
http://localhost:3000を開きます。 ページにウェルカムメッセージが表示されます。
ブラウザーを開かずに、コンソールでアプリケーションからのレスポンスを取得できるように、コードを少し変更してみましょう。 そのためには、 bin/www を開き、たとえば
onListening()関数内に次の行を追加します。console.log("Hello world");アプリケーションを再実行すると、 実行 ツールウィンドウは次のようになります。

Dockerfile を作成する
プロジェクト ツールウィンドウで、プロジェクト名を右クリックし、 新規 をポイントして、 ファイル をクリックします。
新規ファイル… ダイアログで、 Dockerfile と入力し、 Enter を押します。
次のコードを新しい Dockerfile に貼り付けます:
FROM node:22-alpine WORKDIR /tmp COPY package*.json . RUN npm ci --omit=dev COPY ./bin/ ./bin/ COPY ./public/ ./public/ COPY ./routes/ ./routes/ COPY ./views/ ./views/ COPY ./app.js . CMD ["npm","start"]ご覧のとおり、ここではローカルフォルダーを段階的に個別にコピーします。
Dockerfile に
EXPOSE 3000を追加してコンテナーポートを公開しましょう。FROM node:22-alpine WORKDIR /tmp COPY package*.json . RUN npm ci --omit=dev COPY ./bin/ ./bin/ COPY ./public/ ./public/ COPY ./routes/ ./routes/ COPY ./views/ ./views/ COPY ./app.js . EXPOSE 3000 CMD ["npm","start"]
アプリケーションをデプロイして実行する
アプリケーションをデプロイして実行するには、
ガターアイコンをクリックし、 実行 を選択してから 'Docker' で実行する を選択します。 これで、アプリケーションはコンテナー内で実行されます。

バインドポート
アプリケーションを Docker コンテナーの外部からアクセスできるようにするには、コンテナーポート (この例では 3000) をホスト上のポートにバインドする必要があります。
上記のように、実行中のコンテナー内または Dockerfile 実行 / デバッグ構成内でこれを実行できます。
ダッシュボード タブで、 ポート エリアの 追加 をクリックし、コンテナーポートを指定します。例では
3000です。
オプションを変更 をクリックし、 ホストポート の横にチェックを入れ、追加されたフィールドにホストポートを指定します。 この例では、
3001とします。
ポートバインディングをどのように指定したかに関係なく、アプリケーションを http://localhost :30001 で開くことができるようになりました。
