🥝
Docker × Nuxt3 開発環境構築
環境
- macOS Sonoma Version 14.6
- Docker Desktop for Mac
1. Node.jsのコンテナ起動
1-1. Dockerfile
Dockerfile
FROM node:22.9.0-alpine3.19
# working directory の指定
WORKDIR /app
# 必要なパッケージのインストール
RUN apk update \
&& apk add --no-cache bash
1-2. compose.yaml
compose.yaml
services:
nuxt:
build: .
volumes:
# コンテナ内からホスト側のファイルを参照できるようにする
- .:/app
ports:
# ホスト側の3000番ポートをコンテナ内の3000番ポートにマッピング
# localhost:3000でアクセスするために必要
- 3000:3000
tty: true
1-3. コンテナ起動
-
build して upする
terminal$ docker compose build && docker compose up -d
-
upしたかどうかの確認
terminal$ docker compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS frontend-nuxt-1 frontend-nuxt "docker-entrypoint.s…" nuxt 8 seconds ago Up 7 seconds 0.0.0.0:3000->3000/tcp
2. Nuxt起動
1-2. nuxtのインストール
-
起動中のコンテナ内のbashを起動する
terminal$ docker compose exec nuxt bash e70e3d0ecdab:/app#
-
nuxtインストール
- 公式ドキュメント
- カレントディレクトリでインストールするためには
--force
が必要でしたコンテナ内terminal# npx nuxi init . --force Need to install the following packages: nuxi@3.14.0 Ok to proceed? (y) y ✔ Which package manager would you like to use? npm ◐ Installing dependencies... << 省略 >> ✨ Nuxt project has been created with the v3 template. Next steps: › Start development server with npm run dev
2-2. nuxt起動
-
npm run dev
でnuxtの起動ができるようになっていますコンテナ内terminal# npm run dev > dev > nuxt dev Nuxt 3.13.2 with Nitro 2.9.7 6:54:14 AM 6:54:14 AM ➜ Local: http://localhost:3000/ ➜ Network: use --host to expose ➜ DevTools: press Shift + Alt + D in the browser (v1.6.0) 6:54:15 AM ✔ Vite client built in 14ms 6:54:16 AM ✔ Vite server built in 251ms 6:54:16 AM ✔ Nuxt Nitro server built in 416 ms nitro 6:54:16 AM ℹ Vite client warmed up in 0ms 6:54:16 AM ℹ Vite server warmed up in 433ms
-
http://localhost:3000/
にアクセスしてnuxtの画面が出ればOK
3. 開発しやすいように調整
3-1. ホットリロード
-
デフォルトではホットリロードになっていないので、設定を変更します
-
参考nuxt.config.ts
// https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({ compatibilityDate: '2024-04-03', devtools: { enabled: true }, // ↓ 以下を追加 vite: { server: { watch: { usePolling: true } }, }, })
-
参考
-
app.vueを変更して保存すると、ブラウザの表示も更新されることを確認してみる
-
app.vue(最初のNuxtの画面を出しているファイル)を適当に編集
app.vue<template> <div> やっほー <NuxtRouteAnnouncer /> <NuxtWelcome /> </div> </template>
- ブラウザの表示も自動で更新される
-
3-2. コンテナ起動時にnuxtサーバーも起動
-
compose.yaml で
command
を追加しますcompose.yamlservices: nuxt: build: . volumes: # コンテナ内からホスト側のファイルを参照できるようにする - .:/app ports: # ホスト側の3000番ポートをコンテナ内の3000番ポートにマッピング # localhost:3000でアクセスするために必要 - 3000:3000 # 起動時のコマンドを指定 command: npm run dev tty: true
-
docker compose up
後に自動でnuxtが起動するようになります
Discussion