【Docker】インストールからコンテナ実行までの手順【Next.js】
開発で必要不可欠となったDocker。
導入方法(インストールからコンテナ実行まで)を備忘録として記事にします。
今回は、Next.js(TypeScript)で作ったプロジェクトに対して、Dockerを導入します。
導入手順
- Dockerをインストールする
- Dockerfileの作成
- Dockerイメージのビルド
- Dockerコンテナの実行
本手順を実行する際、VSCodeとWSL(WSL2)を利用しています。
1.Dockerをインストールする
Dockerがインストールされていない場合、Docker Desktopをダウンロードします。
インストール後、ターミナルで以下を実行し、Dockerが正常にインストールされていることを確認します。
docker --version
2.Dockerfileの作成
プロジェクトのルートディレクトリにDockerfileを作成します。
以下のように yarn または npm で書きます。
yarn
# ベースイメージの指定
FROM node:【任意のバージョン】
# 作業ディレクトリを設定
WORKDIR /app
# パッケージ.jsonとyarn.lockをコピー
COPY package.json yarn.lock ./
# 依存関係のインストール
RUN yarn install
# 残りのファイルをコピー
COPY . .
# TypeScriptのコンパイル
RUN yarn build
# アプリケーションを実行
CMD ["yarn", "start"]
npm
# ベースイメージの指定
FROM node:14
# 作業ディレクトリの設定
WORKDIR /app
# 依存ファイルのコピー
COPY package.json package-lock.json ./
# 依存関係のインストール
RUN npm install
# アプリケーションのソースコードをコピー
COPY . .
# アプリケーションのビルド
RUN npm run build
# アプリケーションの実行
CMD ["npm", "start"]
Dockerfileの説明
念のため上記ファイルの中身で何が行われているかを説明します。
ベースイメージの指定
FROM命令でベースとなるイメージを指定します。
Node.jsのバージョンを指定し、Next.jsアプリケーションを実行環境を定義します。
作業ディレクトリの設定
WORKDIR命令でコンテナ内の作業ディレクトリを指定します。
依存ファイルのコピー
COPY命令で、package.jsonとyarn.lock(またはpackage-lock.json)をコンテナにコピーします。
依存関係のインストール
RUN命令で、yarn install(またはnpm install)を実行し、プロジェクトの依存関係をインストールします。
アプリケーションのソースコードをコピー
プロジェクトの残りのファイル(ソースコードなど)をコンテナにコピーします。
後述しますが、.dockerignoreファイルを使用して、不要なファイル(例: node_modulesなど)を除外することもできます。
アプリケーションのビルド
プロジェクトのビルドを実行します。
アプリケーションの実行
CMD命令でアプリケーションを実行します。
3.Dockerイメージのビルド
ターミナルでDockerfileがあるディレクトリで以下を実行します。
docker build -t 【イメージ名】:【タグ】 【.】
【イメージ名】と【タグ】は任意で設定できます。
【.】は、Dockerビルドコンテキストのパスを指定します。
4.Dockerイメージの確認
ビルドが完了したら、以下のコマンドを使用してビルドされたイメージを確認できます。
docker images
5.Dockerコンテナの実行
ビルドしたイメージからコンテナを実行するには、以下のコマンドを使用します。
docker run -p 3000:3000 【イメージ名】:【タグ】
-p 3000:3000 のオプションは、ホストのポート3000、コンテナのポート3000 を指定します。
他にも-e オプション等で環境変数を渡すことも可能です。
上記コマンドを実行後、ブラウザから http://localhost:3000/ で動作を確認できます。
また、
6.Dockerコンテナの確認
実行中のコンテナを確認するには、以下のコマンドを使用します。
docker ps
実行中のすべてのコンテナとそのID、イメージ名、作成からの経過時間、ステータスなどの情報を表示されます。
7.Dockerコンテナの停止
実行中のコンテナを停止するには、以下のコマンドを使用します。
docker stop 【コンテナIDまたは名前】
(補足).dockerignore ファイルの作成
プロジェクトのルートディレクトリに .dockerignore ファイルを作成。
.dockerignore に無視したいファイルやディレクトリのパターンを書きます。(.gitignoreみたいなもの)
node_modules/
.next/
.env
.git/
.gitignore
.dockerignore
Dockerfile
LICENSE
*.md
まとめ
上記内容でDockerの基本的な設定できたと思います。
Discussion