0
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 3 years have passed since last update.

【Docker】Productionではマルチステージビルドが必要な理由 no.35

Posted at

パンプキン カフェ (12).png

今回の記事は前回の記事の続きである。

Reactによるアプリの開発の流れの最終段階。

Production Phaseにおいては、Dockerfile.dev ではなく、Dockerfileを書くことになる。

このProductionのためのDockerfileには『FROM』が2つ以上書かれ、2つのステージに分けてDocker Imageが作られることになる。(マルチステージビルドと呼ばれる)

今回の記事では

  • なぜProduction(本番)ではマルチステージビルドが必要になるのか
  • Production用のサーバーで人気なnginxの概要

を書いていく

#npm run start とnpm run buildの違い

npm run startではDevelopment用のサーバーも実行されていた
npm run start.png

それがProduction Phaseに移り、npm run buildを実行するとDevelopment Phaseの時に実行されていたDevelopment用のサーバーがなくなる。

npm run build は、Development Phaseの時に複数のファイルに分かれていたHTML CSS Javascriptなどを1つのファイルにして吐き出すことになる。その時にWebサーバーは用意されない。

2.png

##なぜnpm run buildではサーバーが実行されないのか

Development phaseにおいてはソースコードを書き換えたり、その書き換えたソースコードをreloadしてくれるサーバーが必要であった。

それが、Production phaseではソースコードを書き換えることが無いのでDevelopmentの時とは違うサーバーが必要。

Productionの段階で必要なサーバーは

ブラウザーからのリクエストに反応して、ReactアプリケーションのコードやHTMLコードなどをレンダリングしてくれるだけの機能を持ったWebサーバー。

このProductionのためのWebサーバーで最も人気のあるものの1つが『nginx』になる。

1.png

では、『npm run build』のコマンドを実行するためにベースのイメージにnodeを使ったのに、サーバーはnginxで実行するというのを可能にするにはどのようにDockerfileを書けばいいだろうか?

FROM nodealpine.png

npm run buildを実行するために、ベースイメージにnode:alpineを使ったContainerをさらに、nginxのイメージを使ってWebサーバーを作るにはどうしたら良いのだろうか?

#マルチステージビルドのDockerfile
ステージを分けてDockerfileを書くことで上記の問題を解決する事ができる

2021-07-29_15-52-20.png

buildステージによって、HTML CSS JavaScriptコードからbuildファイルを作る

runステージによって、nginxのwebサーバーを実行させる。

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