🟩
Docker+Bun+Next.js
概要
とりあえず、Docker Composeを使って Bun+Next.jsを動かすところまで。
実行環境
- macOS 14.4.1(apple silicon)
- docker desktop: 4.29.0
Bunとは
速いと噂のJavaScriptランタイム。
Nodeとか、Denoとかと同じジャンル。
Bun — A fast all-in-one JavaScript runtime
参考: https://zenn.dev/ak/articles/c21609fd3b0fdc
環境構築
- ディレクトリ構成は以下
.
├── README.md
├── compose.yaml
└── front
├── dockerfile
└── webapp
-
開発用コンテナ作成のため、以下のdockerfile, compose.ymlを作成
- 公式がDocker Hubに公開しているBunのイメージもあるが、package.jsonがある前提=開発済みのプロジェクトを動かす前提 だと思われる
- デプロイ時に公式のdistrolessコンテナを使うのが良いかと
- Containerize a Bun application with Docker | Bun Examples
-
dockerfile
- debian:bookworm-slimにbunのインストールだけをしたもの
- curlなどもインストール後は除外するので、必要であればインストールする
FROM debian:bookworm-slim as builder
RUN <<EOF
apt update
apt install -y curl unzip
curl -fsSL https://bun.sh/install | bash
EOF
FROM debian:bookworm-slim
COPY /root/.bun/bin/bun /root/.bun/bin/
ENV PATH=/root/.bun/bin:$PATH
- compose.yaml
services:
web:
build:
context: ./front
dockerfile: dockerfile
container_name: react-container
ports:
- "3000:3000"
volumes:
- ./front/webapp:/webapp
working_dir: /webapp
tty: true
- コンテナビルド&起動
docker compose up -d --build
- bunのインストール確認
docker compose exec web bash
bun --help
- Next環境構築
- コンテナ内でインストールしていく
- Getting Started: Installation | Next.js
docker compose exec web bash
bun create next-app
対話形式でプロジェクトが作成される。
プロジェクトはカレントディレクトリ、他の設定は全部Yesにしているが、お好みで。
✔ What is your project named? … .
✔ Would you like to use TypeScript? … Yes
✔ Would you like to use ESLint? … Yes
✔ Would you like to use Tailwind CSS? … Yes
✔ Would you like to use `src/` directory? … Yes # Yesでappディレクトリはsrc/appとなる
✔ Would you like to use App Router? (recommended) … Yes
✔ Would you like to customize the default import alias (@/*)? … Yes # プロジェクトルートからのパスを「@/components/button」などでimportできるようになる
✔ What import alias would you like configured? … @/*
Creating a new Next.js app in /app.
実行
docker compose exec web bun --bun run dev
- http://localhost:3000 にアクセスすると、Nextのデフォルトページが表示される
Discussion