NO IMAGE

【React】DockerでReact開発環境を作る

NO IMAGE

ここではDockerを使って、コンテナ上にReactの開発環境を構築した方法と注意点を紹介します。React自体の説明は省くので、詳しくは公式チュートリアル等をご覧あれ。

構築に当たっては、「DockerでReact+TypeScript環境を作ってみた~formatterを添えて~ | Logical Studio Blog」を参考にしました。

セットアップ~create-react-appまで

  • setup_docker.sh: docker 導入用
#!/bin/sh

echo "Dockerインストール"
# 参考(<https://docs.docker.com/install/linux/docker-ce/ubuntu/)>
sudo apt-get -y remove docker docker-engine docker.io containerd runc
sudo apt-get -y update

# 公開鍵の追加
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys "公開鍵"
sudo apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
sudo curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] <https://download.docker.com/linux/ubuntu> $(lsb_release -cs) stable"
sudo apt-get -y update
sudo apt-get -y install docker-ce docker-ce-cli containerd.io
sudo apt-cache madison docker-ce

echo "Dockerデーモン起動"
sudo systemctl start docker

echo "Dockerデーモンの自動起動設定の有効化"
sudo systemctl enable docker

echo "Docker Composeインストール"
# 参考(<https://docs.docker.com/compose/install/)>
sudo apt-get -y update
sudo curl -L <https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname> -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

echo "Docker非sudo対応"
sudo groupadd docker
sudo systemctl restart docker
sudo gpasswd -a $USER docker

echo "inotifyの監視ファイル数上限値を増加させる"
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

echo "Docker非sudo対応の反映のためにシステム再起動"
sudo reboot
  • docker-compose.yml
version: "3.8" #docker composerのバージョンの指定
services:
  front:
    build: ./ #buildするdockerfileの位置
    container_name: node #作成するdockerコンテナの名前
    working_dir: /home/front #docker内に入った時の初期パスの指定
    ports:
      - 3000:3000 #コンテナにバインドするポートの指定(左:自分のPCポート、右:dookerコンテナのポート)
    tty: true #コンテナが勝手に終了しないための設定
    stdin_open: true #標準入出力とエラー出力をコンテナに結びつける設定
    environment:
      - CHOKIDAR_USEPOLLING=true #ホットリロードを行う設定
  • Dockerfile:参考記事からちょっとアレンジ
FROM node:16.14.0-buster
ENV NODE_VERSION 14.18.1

ARG HOME_DIR=/home/front
WORKDIR ${HOME_DIR}

COPY ./front ${HOME_DIR}

EXPOSE 3000

# コンテナが勝手に終了してしまわないよう設定
ENV CI=true

これでコンテナを立ち上げてみます。

$ docker-compose build
...
Successfully tagged sample-react-1_front:latest

$ docker-compose up -d
Creating network "sample-react-1_default" with the default driver
Creating node ... done

コンテナの中に入ってcreate-react-app。

$ docker exec -it node bash
root@97121bf2f357:/home/front# ls
root@97121bf2f357:/home/front# npx create-react-app . --template typescript --use-npm
...

We suggest that you begin by typing:

  cd /home/front
  npm start

Happy hacking!

ここでの注意点(そして、まだよくわかっていないところ)は、docker-compose.ymlのvolumesでローカルにマウントしようとするとsh: 1: create-react-app: Permission deniedのエラーが出る点です。本当はローカルに置いたDockerfile等と合わせてgit管理したかったものの、今回はコンテナ上のReactソースとローカルのDocker設定ファイルはリポジトリを分けました。

コンテナに接続して作業する

今回はMicrosoftが出しているVScodeの拡張機能、Remote -Containersを使ってコンテナに接続しました。以下のように、コンテナのところを右クリックして出てくるメニューの上から3番目、”Attach Visual Studio Code”をクリックすることでコンテナにVScodeで接続できます。

レッツ接続。

コンテナ上の開発ディレクトリに入ったら、npm startでサーバを起動します。docker-compose.ymlで、Dockerコンテナの3000ポートはホストの3000ポートとフォワーディング設定していたので、このサーバにはホスト側でブラウザを立ち上げ、localhost:3000のURLで接続できます。

$ npm start
reactマークがぐーるぐる

参考