Docker環境でNext.jsアプリケーションを作るメモ|VScode「DevContainer」を使う
2023/7/2
2023/7/8
Docker環境でNext.jsアプリを作る方法を簡単にメモしていきます。
また今回はVS Codeの「Dev Container」を使って、Docker環境で開発を行います。
目次
1)アプリのディレクトリを作成する
$ mkdir YOUR_PROJECT_NAME
2)Dockerfile等を準備する
Next.jsのアプリを作成する前に、Dockerの設定に必要なファイルを3つ作成しておきます。
- .devcontainer/devcontainer.json
- .devcontainer/Dockerfile
- Dockerfile
.devcontainer/devcontainer.json
{
"name": "YOUR_CONTAINER_NAME", // コンテナ名
"dockerFile": "Dockerfile", // Dockerfileのパス
"appPort": 3000, // アプリケーションのポート番号
"extensions": [
"dbaeumer.vscode-eslint", // ESLint
"esbenp.prettier-vscode", // Prettier
"dsznajder.es7-react-js-snippets", // React
"GitHub.copilot", // GitHub Copilot
],
"settings": {
"terminal.integrated.defaultProfile.linux": "/bin/bash", // コンテナ内のターミナルをbashに設定
},
"remoteUser": "YOUR_USER_NAME", // コンテナ内のユーザー名
"forwardPorts": [3000], // localhost:XXXX でアクセスできるポート番号
}
.devcontainer/Dockerfile
# -----------------------------------
# ベースイメージの指定
# -----------------------------------
FROM node:18-bullseye-slim
ENV SHELL /bin/bash
# -----------------------------------
# ディレクトリの設定
# -----------------------------------
# 作業ディレクトリの指定
WORKDIR /app
# `package.json`と`package-lock.json`をコピー
COPY package*.json ./
# 依存関係のインストール(`package-lock.json`を参照してインストールされる)
RUN if [ -f "package.json" ]; then \
if [ -f "package-lock.json" ]; then \
npm ci; \
else \
npm install; \
fi \
fi
# すべてのファイルを作業ディレクトリにコピー
COPY . .
# -----------------------------------
# ユーザーの設定
# -----------------------------------
# ユーザーとグループの追加
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
# ユーザーを nextjs に変更
USER nextjs
# -----------------------------------
# ポートの公開
EXPOSE 3000
# -----------------------------------
# 開発サーバーの起動(コンテナ作成/起動時)
CMD ["npm", "run", "dev"]
Dockerfile
# ベースイメージの指定 (node:18-bullseye-slim)
FROM node:18-bullseye-slim AS base
# 依存関係ライブラリ等のインストール (必要なときのみ)
FROM base AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
# RUN apk add --no-cache libc6-compat
WORKDIR /app
# 選択したパッケージマネージャに基づいて依存関係をインストール
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
RUN \
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then npm ci; \
elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
else echo "Lockfile not found." && exit 1; \
fi
# Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
# Uncomment the following line in case you want to disable telemetry during the build.
# ENV NEXT_TELEMETRY_DISABLED 1
# RUN yarn build
# If using npm comment out above and use below instead
RUN npm run build
# Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app
ENV NODE_ENV production
# Uncomment the following line in case you want to disable telemetry during runtime.
# ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
# ポートの設定
EXPOSE 3000
ENV PORT 3000
CMD ["node", "server.js"]
3)コンテナに入って開発を始める

左下の「コンテナで再度開く」を押すと、Dockerコンテナ内で作業ができるようになります。
(Docker Desctopが起動されている必要があります。)
4)Next.jsのアプリを作成する
$ npx create-next-app@latest
まとめ
VS codeの拡張機能「Dev Container」を使用して、Docker環境でNext.jsのアプリケーションを作成する方法をまとめました。
最近の記事

音楽生成AI「Suno」の使い方まとめ!作詞作曲が簡単にできる?
簡単に曲が作れるAIということでよく聞く「Suno(Chirp)」についてまとめました。
目次「Suno」とはテキストからさまざまな音声を生成する「Bark」歌詞から曲を生成する「Chirp」...
2023/11/24
2023/11/24

【Open AI】APIの料金まとめ|GPT・DALL·E・Whisperなど
Open AIのAPI(一部)の料金をまとめました。
参考のために日本円は「1ドル150円」で換算をしています。
目次Text generation: テキスト生成Assistants ...
2023/11/22
2023/11/22

【Next.js】Assistants APIの基本的なコードまとめ。
Open AIの「Assistants API」をNext.jsで使用する時の基本的なコードをまとめました。
目次Open AIのAPIセットアップ基本の使い方Threads: スレッドを作る...
2023/11/21
2023/11/21

【Next.js】Open AIのAPIでファイルをアップロードする方法。
今回は、Next.jsサイトからOpen AIのAPI(Upload file)で、ファイルをアップロードする方法を実装するのに時間がかかったのでその過程と最終コードをまとめます。(Vercelにデ...
2023/11/21
2023/11/22

「生成系AIのWEBプロダクトTOP50」をまとめてみる。
Andreessen Horowitzが出している記事で紹介されている「AIプロダクトの月間訪問者数ランキングTOP50」のサービスをまとめました。
目次ChatGPTcharacter.ai...
2023/10/3
2023/10/3

【Next.js 13】NextAuth+FireStoreにユーザー情報を保存する。
今回は、以下の3つをNext.js 13で実装するためのメモです。
Googleアカウントでログインできる
アカウント、セッション情報をFirestoreに保存する
サーバーサイ...
2023/7/12
2023/7/12