🎉
Docker × Next.js × TypeScriptの開発環境構築
前準備
docker composeが必要です。前もってインストールをお願いします。
プロジェクト用のディレクトリを作成します。
どこでも良いです。好きなところに作ってください。
$ mkdir nextjs-docker-app
$ cd nextjs-docker-app
Dockerの設定
Dockerfileを作成します。
場所は、infra
というディレクトリにしました。
$ mkdir infra
$ cd infra
$ touch Dockerfile
Dockerfileは、下記のようにしました。
FROM node:18.16.0-alpine
WORKDIR /opt/app
nodeのバージョンは、2023/05/07
時点でLTSである、18.16.0を指定しています。
node.js
$ cd ../
docker composeの設定
docker-compose.ymlファイルを作成します。
$ touch docker-compose.yml
docker-compose.ymlの中身は下記のようにしました。
version: '3'
services:
app:
build: ./infra/
volumes:
- ./src:/opt/app
ports:
- '3000:3000'
Next.jsアプリケーションを作成
$ docker-compose run --rm app yarn create next-app . --ts
作成中に、下記のような項目を聞かれます。
✔ Would you like to use ESLint with this project? … No / Yes
✔ Would you like to use Tailwind CSS with this project? … No / Yes
✔ Would you like to use `src/` directory with this project? … No / Yes
✔ Use App Router (recommended)? … No / Yes
✔ Would you like to customize the default import alias? … No / Yes
それぞれ、
ESLintを使いますか?
TailWind CSSを使いますか?
ディレクトリはsrc/にしますか?
App Routerを使いますか?
デフォルトのimportエイリアスをカスタマイズしますか?
っていう質問ですが、基本全部YesでOKです。
その後、Success! Created app at /opt/app
と表示されればOKです!
実行した際に、下記のようなエラーが出た場合
error execa@x.x.x: The engine "node" is incompatible with this module. Expected version "<Supported Versions>". Got "<Version in use>"
error Found incompatible module.
info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.
nodeのバージョンを、<Supported Versions>
部分で指定されているバージョンの範囲内になるように変更します。
- Dockerfileの
FROM
部分を、バージョンに合わせて適宜修正します。 - src/ディレクトリが作成されているので、削除します。
- もう一度コマンドを実行します。
サーバを建てる
コンテナを起動したときに、自動で開発用のサーバーを起動できるようにします。
Dockerfileに直接書くこともできますが、別途ファイルを用意することにしました。
$ cd src
$ touch setup.sh
setup.sh
の中身は下記のようにしました。
set -eu
yarn && yarn dev
このファイルを、Dockerfileで呼び出すようにします。
FROM node:18.16.0-alpine
WORKDIR /opt/app
ENTRYPOINT ["sh", "./setup.sh"]
ビルド
$ docker-compose build
$ docker-compose up -d
http://localhost:3000 にアクセスして、NEXT.jsの画面が表示されればOKです!
かっこいい。
Discussion