🐼

Docker✖️Next.js14の環境構築

2023/12/22に公開

今記事の目標

Next.jsを動かすDockerfileとdocker-compose.ymlを作成していきたいと思います。

環境について

  • Next.js 14.0.1
  • Typescript 5
  • Node.js 21
  • macOS Sonoma 14.1.1
  • Docker Desktop 4.18.0

Dockerfileを作成する

プロジェクトフォルダを作成する

今回作業していくフォルダを作成します。
私の場合は~/develop配下で作業をしていきたいので以下のようにしてプロジェクトフォルダを作成し、プロジェクトフォルダ配下に移動します。

% mkdir ~/develop/share-favplace-front
% cd ~/develop/share-favplace-front

プロジェクトフォルダ配下にDockerfileを作成する

下記コマンドでDockerfileを作成します。

share-favplace-front % touch Dockerfile

Dockerfileの編集

Dockerfileを編集していきます。

share-favplace-front/Dockerfile
FROM node:21-bullseye-slim

ARG WORKDIR
ARG API_URL

ENV HOME=/${WORKDIR} \
    LANG=C.UTF-8 \
    TZ=Asia/Tokyo \
    HOST=0.0.0.0 \
    API_URL=${API_URL}

WORKDIR ${HOME}

FROM <ベースイメージ>

使用するイメージを指定します。今回はnode:21-bullseye-slimのイメージを指定しています。

ARG <変数名>

Dockerfile内で使用する変数名を指定します。
「docker-compose.yml」内のargsでセットした値がここに入ります。

ENV <変数名=値>

Dockerイメージで使用する環境変数を指定します。
ENVを使って設定した環境変数は、イメージからコンテナへ渡されます。
コンテナへ渡されると、コンテナ内で起動したアプリケーションで参照することができます。

WORKDIR <ディレクトリパス>

コンテナ内の作業ディレクトリを指定します。

COPY <ローカルのファイルパス> <Dockerのファイルパス>

ローカルファイル(自分のPC上にあるファイル)をDcoker環境にコピーする命令です。

COPY. ./

カレントフォルダ(Dockerfileがあるフォルダ)配下をDocker環境のWORKDIR(/app)配下にコピーするという命令になります。

./はWORKDIRからの相対パスを指定しており、絶対パスの/appと記述するのと同じことです。

以上で、Next.js起動するためのDockerfileを作成できました。

docker-compose.ymlを作成する

下記コマンドでdocker-compose.ymlを作成します。

share-favplace-front % touch docker-compose.yml

docker-compose.ymlの編集

docker-compose.ymlを編集していきます。

share-favplace-front/docker-compose.yml
services:
  front:
    build:
      context: .
      args:
        WORKDIR: ${WORKDIR}
        API_URL: "http://localhost:${API_PORT}/"
    container_name: share-favplace-front
    command: sh -c "npm run dev"
    volumes:
      - .:/${WORKDIR}
    ports:
      - "${FRONT_PORT}:${FRONT_PORT}"
    networks:
      - front

networks:
  front:
    external: false

今回は1つのコンテナを作成します。

front
Next.jsを動かすフロント用のコンテナです。

項目説明

それぞれの項目の詳細については以下を参照してください。
https://zenn.dev/pandaman/articles/0baaaa211a9ead

以上で、Next.js起動するためのdocker-compose.ymlを作成できました。

まとめ

Next.js起動するためのDockerfileとdocker-compose.ymlを作成しました。
この環境にNext.jsのアプリケーションを作成することで、下記コマンドでアプリケーションを起動することができます。

docker-compose up -d

Next.jsのアプリケーション作成については以下を参照してください。
https://nextjs-ja-translation-docs.vercel.app/docs/getting-started

Discussion