ITエンジニア日記 ~NO SKILL, NO LIFE~

学んだ技術や、気になることをアウトプットしていきます。プログラミング, インフラ, etc...

DockerでReactの開発環境を作成してみる

前回、Reactの開発で「CodeSandBox」というオンラインエディタを使用していました。今回はDockerでReactの開発環境を作成してみます。

1. 作業ディレクト

今回は下記のようなディレクトリ構成を準備します。

react-app
├─ docker-compose.yml
└─ docker
      └─ Dockerfile_node

2. Dockerfileの準備

Reactの開発環境にはNode.jsというサーバーサイドのJavaScript環境が必要らしいので、DockerイメージにはNode.jsの公式イメージを使用します。
今回は、「Dockerfile_node」というファイル名でDockerfileを作成します。

FROM node:13.2.0-stretch

WORKDIR /usr/src/app

作業ディレクトリとして「/usr/src/app」を指定しておきます。

3. docker-compose.ymlの作成

Docker Composeは複数のコンテナをまとめて管理するためのツールです。コンテナの構成情報は「docker-compose.yml」というファイルに定義します。
今回は、コンテナはNode.jsの1つしか管理しませんが、ホストとコンテナのディレクトリ共有や、Reactの実行コマンドをまとめて管理するために「docker-compose.yml」ファイルを使用します。

version: "3.3"
services:
  node:
    build: 
      context: ./docker
      dockerfile: Dockerfile_node
    environment:
      - NODE_ENV=development
    volumes:
      - ./:/usr/src/app
    command: sh -c "cd react-sample && yarn start"
    ports:
      - "3000:3000"

version

ファイル先頭はDocker Composeのバージョンになります。

services

今回は「node」という1つのサービスのみを定義しています。

build

Dockerfileにイメージの構成を記述して、それをベースイメージに指定するときはbuildにDockerfileの情報を記述します。
contextは、Dockerfileがあるディレクトリのパスを指定しています。
dockerfileで、DockerFileのファイル名を指定します。

environment

コンテナ内の環境変数を指定します。
NODE_ENVは、実行する環境の指定ができます。「development」は開発環境であることを明記しています。

volumes

コンテナにボリュームをマウントするときに指定します。
今回は「docker-compose.yml」ファイルが存在するディレクトリに、コンテナ内の「/usr/src/app」ディレクトリをマウントします。

command

コンテナ内で実行するコマンドを指定します。

ports

コンテナが外部に対して公開するポートを指定します。

4. Dockerイメージのビルド

「docker-compose.yml」ファイルが配置されているディレクトリで、Dokcerイメージをビルドします。

docker-compose build

ビルドコマンドの実行結果は下記です。

Building node
Step 1/2 : FROM node:13.2.0-stretch
13.2.0-stretch: Pulling from library/node
844c33c7e6ea: Pull complete                                                                                             ada5d61ae65d: Pull complete                                                                                             f8427fdf4292: Pull complete                                                                                             f025bafc4ab8: Pull complete                                                                                             7a9577c07934: Pull complete                                                                                             9b4289f800f5: Pull complete                                                                                             e5b5cb6034b3: Pull complete                                                                                             77980c72a787: Pull complete                                                                                             7c5d27382edd: Pull complete                                                                                             Digest: sha256:ead25ba89fdbace5701281b1f8c35c317ed09d10ba30fcd01ded881406b84e7f
Status: Downloaded newer image for node:13.2.0-stretch
 ---> 760e12e87878
Step 2/2 : WORKDIR /usr/src/app
 ---> Running in 38caf6505065
Removing intermediate container 38caf6505065
 ---> 51727fdae0a7

Successfully built 51727fdae0a7
Successfully tagged react-app_node:latest

Dockerイメージのダウンロードと作業ディレクトリの指定が実行されます。

5. Create React App

Reactの開発環境のセットアップには「Create React App 」というものを使用するのが良いらしいです。

ja.reactjs.org

なので、以下のコマンドでCreate React Appのインストールと、開発用プロジェクトの作成を行います。

docker-compose run --rm node sh -c "npm install -g create-react-app && create-react-app react-sample"

コマンドを実行すると、インストールとプロジェクトの作成に数分かかります。
完了すると、「react-sample」というプロジェクトが作成されていることが確認できました。

f:id:masakiXX0:20191128230949j:plain
「react-sample」プロジェクト

6. コンテナの起動&Reactの実行

以下のコマンドで、「docker-compose.yml」をもとに、コンテナの起動が行われます。さらに、「docker-compose.yml」ファイルのcommandに記述されているコマンドにより、Reactが実行されます。

docker-compose up

コマンドの実行結果は下記です。

Recreating react-app_node_1 ... done                                                                                    Attaching to react-app_node_1
node_1  | yarn run v1.19.1
node_1  | $ react-scripts start
node_1  | Starting the development server...
node_1  |
node_1  | Compiled successfully!
node_1  |
node_1  | You can now view react-sample in the browser.
node_1  |
node_1  |   Local:            http://localhost:3000/
node_1  |   On Your Network:  http://172.18.0.2:3000/
node_1  |
node_1  | Note that the development build is not optimized.
node_1  | To create a production build, use yarn build.
node_1  |

Reactが起動したので、ブラウザで「http://localhost:3000/」にアクセスしてみます。
すると下記のようなサンプルのビューが表示されれば成功です。

f:id:masakiXX0:20191128231527j:plain
http://localhost:3000/

7. まとめ

Reactの開発環境をDockerで構築してみました。今回は構築だけなので、次回、勉強会で作成したプログラムを今回構築した開発環境で動かしてみようと思います。

参考

WINGSプロジェクト阿佐志保 「プログラマのためのDocker教科書 第2版」 株式会社翔泳社