1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker + Next.js + TypeScript + Prisma + MySQL環境構築

Posted at

はじめに

Docker + Next.js + TypeScript + Prisma + MySQLで環境構築したので、備忘録

バージョン
node : v22.13.0
イメージのバージョンは適宜変更して下さい。

ディレクトリ構成

.
├── docker-compose.yml
├── src
└── web
    └── Dockerfile

Dockerfile

FROM node

WORKDIR /app

# 先に依存関係を解決することでキャッシュでnpm installが毎回走らないようになる。
# コード全体COPYのあとでは、通常ソースコードに変更があった際もキャッシュを利用せず、npm installが走ってしまう。
# つまり、package*.json以外の変更でnpm installを走らせないようにするため、ビルド時間が短縮される。
COPY src/package*.json ./ 

RUN npm install

COPY src .

docker-compose.yml

docker-compose.yml
services:
  db: #サービス名
    # build: Dockerfileからビルドする際の相対パスを設定
    image: mysql:5.7 # イメージ名:タグ
    volumes: # データをコンテナの外に保存するための設定
      - ./mysql/data:/var/lib/mysql # ホストディレクトリ : コンテナ内ディレクトリ
    environment: # 環境変数
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: sample_db
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    ports: 
      - "3306:3306" # ホストマシンのポート番号:コンテナのポート番号
    # depends_on: サービス間の依存関係を定義
    # command: サービスコンテナが起動したときに実行するコマンド

  web:
    build: 
      context: . # 親ディレクトリをコンテキストに
      dockerfile: ./web/Dockerfile # webフォルダ内のDockerfileを使用
    ports:
      - "3000:3000"
    command: sh -c "npm run dev" # npm run dev 実行
    volumes:
      - ./src:/app
      - /app/node_modules 

ルートディレクトリでプロジェクトを作成

$ npx create-next-app@latest
Need to install the following packages:
create-next-app@15.2.3
Ok to proceed? (y) y

✔ What is your project named? … src
✔ Would you like to use TypeScript? … No / Yes
✔ Would you like to use ESLint? … No / Yes
✔ Would you like to use Tailwind CSS? … No / Yes
✔ Would you like your code inside a `src/` directory? … No / Yes
✔ Would you like to use App Router? (recommended) … No / Yes
✔ Would you like to use Turbopack for `next dev`? … No / Yes
✔ Would you like to customize the import alias (`@/*` by default)? … No / Yes
✔ What import alias would you like configured? … @/*

コンテナ起動

$ docker compose up -d

コンテナ内でprismaインストール

$ docker exec -it [コンテナ名] bash

prismaインストール

app# npm install prisma --save-dev

prisma初期化

app# npx prisma init

src内にenvファイルを作成

.env
DATABASE_URL="mysql://root:password@db:3306/sample_db"

src\prisma\schema.prisma

src\prisma\schema.prisma
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
}



npx prisma db push

これでUserテーブルが作成されます。

$ npx prisma db push

あとは良しなにしてください。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?