1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Dockerで作るReact環境

Last updated at Posted at 2023-11-19

Reactの勉強のついでにDockerで環境構築もしたので共有

実行環境

Docker Desktop 24.0.2
MacOS 14.1.1
React 18.2.0

必要なファイルを作成

今回必要になるのは、Dockerfile, .dockerignore, docker-compose.ymlの3つ。
touchコマンドでファイル名を波括弧でくくると、複数ファイルが同時に作れるのは知らなかった。。。

touch {Dockerfile,.dockerignore,docker-compose.yml}

Dockerfile

まずはDockerFileを作成します。これが無いとどうにもならん。
今回はステージ1と2に分けてマルチステージビルドしています。
不必要なファイルを排除して、イメージサイズを軽量化するためです。

# Stage1
# dockerhubを参照して、最新のnodeのイメージを使用。ステージ2ではbuilderという名前で使用する。
FROM node:21-alpine AS builder
# 後続のコマンドが実行されるディレクトリをコンテナ内の/appに設定
WORKDIR /app
# ローカルのpackage.jsonとpackage-lock.jsonをコンテナの作業ディレクトリにコピー
COPY package.json package-lock.json ./
# Node.jsのOpenSSL関連の問題を回避するための環境変数を設定。
# 詳細→https://builtin.com/software-engineering-perspectives/err-ossl-evp-unsupported
ENV NODE_OPTIONS=--openssl-legacy-provider
# package.jsonに定義された依存関係をインストール
RUN npm install
# 全てのソースコードをコンテナ内にコピー
COPY . ./
# アプリケーションのビルド
RUN npm run build

# Stage2
FROM nginx:alpine
# ステージ1でビルドしたソースをNginxのディレクトリにコピー
COPY --from=builder /app/build /usr/share/nginx/html
# listenするポートを設定
EXPOSE 80
# Nginx起動
CMD ["nginx", "-g", "daemon off;"]

.dockerignore

不要なファイルがdockerイメージに含まれないよう、以下のディレクトリとファイルを指定する。

node_modules
build
.git
.env

Dockerイメージのビルド

ターミナルで以下のコマンドを実行して、イメージをビルドする。

docker build -t test-react-app .

Dockerコンテナの実行

以下のコマンドを実行してコンテナを実行する。
今回は、ローカルの8080ポートをコンテナの80ポートにマッピングしています。

docker run -p 8080:80 test-react-app

いざ確認!

localhost:8080にアクセスすれば、アプリの稼働確認ができるはず。
私のはこんな感じ。(openweathermapというAPIを使って天気予報アプリを作っている途中)
スクリーンショット 0005-11-19 21.42.16.png

1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?