まずはNestJSをインストール yarnのバージョンが古いので上げる Dockerfileを作成する Dockerイメージを作成する Dockerコンテナを立ち上げて実行する 動作確認 応用:マルチステージビルド 関連記事
まずはNestJSをインストール
https://docs.nestjs.com/first-steps
上記に従って、以下のコマンドでプロジェクトを作成する。
$ npm i -g @nestjs/cli
$ nest new nestjs-sample
✨ We will scaffold your app in a few seconds..
✔ Which package manager would you ❤️ to use? yarn
CREATE nestjs-sample/.prettierrc (51 bytes)
CREATE nestjs-sample/README.md (5036 bytes)
CREATE nestjs-sample/eslint.config.mjs (836 bytes)
CREATE nestjs-sample/nest-cli.json (171 bytes)
CREATE nestjs-sample/package.json (1984 bytes)
CREATE nestjs-sample/tsconfig.build.json (97 bytes)
CREATE nestjs-sample/tsconfig.json (677 bytes)
CREATE nestjs-sample/src/app.controller.ts (274 bytes)
CREATE nestjs-sample/src/app.module.ts (249 bytes)
CREATE nestjs-sample/src/app.service.ts (142 bytes)
CREATE nestjs-sample/src/main.ts (228 bytes)
CREATE nestjs-sample/src/app.controller.spec.ts (617 bytes)
CREATE nestjs-sample/test/jest-e2e.json (183 bytes)
CREATE nestjs-sample/test/app.e2e-spec.ts (674 bytes)
✔ Installation in progress... ☕
🚀 Successfully created project nestjs-sample
👉 Get started with the following commands:
$ cd nestjs-sample
$ yarn run start
Thanks for installing Nest 🙏
Please consider donating to our open collective
to help us maintain this package.
🍷 Donate: https://opencollective.com/nest
※筆者はnpmではなくyarnを利用しているため、npmコマンドを利用する人は今後読み替えていただきたい
とりあえずサーバーを立ち上げ、動作確認をする。
$ yarn run start
localhost:3000
にアクセスして「Hello, World」が表示されていれば問題ない。
yarnのバージョンが古いので上げる
初期状態では、以下のように1系になっているはず。
$ yarn -v
1.22.22
以下のドキュメントに従って、バージョンを4系にアップデートする。
$ yarn set version stable
➤ YN0000: Done in 0s 8ms
$ yarn -v
4.9.2
Dockerfileを作成する
プロジェクトのルートディレクトリと同じ場所に、Dockerfile
を作成する。
Dockerfileに記載する内容の参考として、 Documentation | NestJS - A progressive Node.js framework にも記載があるのでこちらも見てみると良い。
公式ドキュメントからの変更点は2点。
- nodeのバージョンは22を使う
- パッケージのインストールとビルドコマンドをyarnを使ったものに変更
# node22を使う
FROM node:22
# 作業ディレクトリを定義
WORKDIR /usr/src/app
# yarnは「package-lock.json」の代わりに「yarn.lock」
COPY package.json yarn.lock ./
# corepack enableをしないと、yarnの1系が使われてしまうため
RUN corepack enable && \
yarn install --immutable
# 残りのソースコードなどを全部コピー
# このときに不要なファイルは.dockerignoreしておく
COPY . .
# ビルドコマンド実行
RUN yarn build
# コンテナが公開するポートを明記
EXPOSE 3000
# 実行コマンドは「yarn start」よりもこちらを推奨
CMD ["node", "dist/main"]
Dockerイメージを作成する
docker build -t nestjs-api:1.0 .
Dockerコンテナを立ち上げて実行する
$ docker container run -it --rm --name "nestjs-sample" -p 3000:3000 nestjs-sample:1.0
[Nest] 1 - 08/03/2025, 5:07:07 AM LOG [NestFactory] Starting Nest application...
[Nest] 1 - 08/03/2025, 5:07:07 AM LOG [InstanceLoader] AppModule dependencies initialized +15ms
[Nest] 1 - 08/03/2025, 5:07:07 AM LOG [RoutesResolver] AppController {/}: +3ms
[Nest] 1 - 08/03/2025, 5:07:07 AM LOG [RouterExplorer] Mapped {/, GET} route +1ms
[Nest] 1 - 08/03/2025, 5:07:07 AM LOG [NestApplication] Nest application successfully started +1ms
■オプションの説明
オプション | 説明 |
---|---|
-it | コンソールに結果を出力する |
—rm | コマンド実行完了後にコンテナを自動削除 |
—name | コンテナ名を指定する |
-p | コンテナの3000ポートとホストマシンの3000ポートをつなげる |
動作確認
ホストマシン上で localhost:3000
でアクセスできることが確認できる。

応用:マルチステージビルド
実際のアプリケーションでは、必要最低限の成果物のみを用いてDockerイメージを生成したい。
そのためには Multi-stage を活用するとDockerイメージを軽量化することができる。
# ビルド用イメージ
# Use the official Node.js image as the base image
FROM node:22-alpine AS builder
# Set the working directory inside the container
WORKDIR /usr/src/app
# 不要なものを.dockerignoreして全部コピーするのが楽でおすすめ
COPY . .
# Install the application dependencies
RUN corepack enable && \
yarn install --immutable
# Build the NestJS application
RUN yarn build
# 実行用イメージ
FROM node:22-alpine
WORKDIR /usr/src/app
# ビルドの成果物のみコピー
COPY /usr/src/app/dist ./dist
COPY /usr/src/app/node_modules ./node_modules
# Expose the application port
EXPOSE 3000
# Command to run the application
ENTRYPOINT ["node", "dist/main"]
関連記事