当サイトは、アフィリエイト広告を利用しています
Reactの開発環境をDockerを使って構築し
VSCodeからコンテナ開発を行う方法をまとめる
VSCodeとDockerを使ったReactの開発環境構築時の
Dockerコンテナの作成は
の2パターンで行うことができる。
また開発環境内のReactのプロジェクトを
dockerのどこで永続化するかについても
の2パターンがある
今回は、上記の方法のうち
で行っていく。
コンテナで作った場合、ホストOSから分離されているため
ローカルマシンの設定に影響されずに開発することができる
またコンテナ化しておくことによって環境を統一できるので
コンテナを使えば、他の開発者が開発する時に同じ環境で開発ができるため。
開発したいときはコンテナ作って、いらなくなったらコンテナを
破棄すればいいだけなので、個人的にはローカル環境が汚れないのがありがたい。
VSCodeの拡張機能DevContainersからコンテナ作成するよりも
docker-composeコマンドで作った方が早いから。
後、慣れているのもあります。
つまり、docker-composeコマンドで作ったコンテナに
VScodeからアタッチする形になります。
正直、これはコンテナを作る方法をVScodeで作るか
dockerコマンド作るかだけの話なのでやりやすい方でいいです。
VSCodeの拡張機能DevContainersからコンテナ作成する
やり方については下記記事でまとめています。
ホストのファイルとコンテナのファイルを同期する
バインドマウントで永続化すると、すごく遅くなるため。
コンテナの名前付きボリュームでプロジェクトを永続化できれば
問題ない考えました。
名前付きボリュームにあるプロジェクトはgitにあげるため
特にデータ消える心配もない。
※リモートリポジトリにプッシュする前にボリュームを
削除したらさすがに消えますが。。
名前付きボリュームを含めたdockerのボリュームついては
下記記事でまとめています。
下記の環境で行う
インストール方法については下記記事で 紹介しています
コンテナ構築をdocker-composeを使って構築し
プロジェクトを含むworkspaceを名前付きボリュームで永続化させる
名前付きボリュームでプロジェクトを永続化させる場合は
の一つの手順でできる
ホスト側にプロジェクトはなく
コンテナ内だけにある状態になる。
注意としては、コンテナを削除してもDockerのボリュームがある限り
プロジェクトは消えないが、ボリュームを削除すると消える。
まずはreact環境コンテナを作成するため
下記のような構成にする
.|-- .env|-- Dockerfile|-- docker-compose.yml`-- vscode_ex_install.sh
React開発環境コンテナの
設定をする
環境変数を保持させるためのファイル
プロジェクト名を保持させる
※プロジェクト名は任意
# .envファイルPROJECT_NAME=sample-react-project
React開発環境コンテナのimageを作るためのDockerfileを作成する
# イメージFROM node:21-alpine# パッケージ最新化とインストールRUN apk update && apk add git curl# docker-composeからの引数を受け取るARG PROJECT_NAME# コンテナにフォルダ作成RUN mkdir -p /workspace/docker# workspaceディレクトリに移動WORKDIR /workspace# reactプロジェクト生成RUN npx create-react-app@latest ${PROJECT_NAME} --template typescript# reactプロジェクトに移動WORKDIR /workspace/${PROJECT_NAME}# reactプロジェクト内にdocker関連ファイルをコピーRUN mkdir -p /workspace/${PROJECT_NAME}/dockerCOPY ./ /workspace/${PROJECT_NAME}/docker# git初期化RUN git init
Reactプロジェクト内にdocker関連ファイルをコピーしているのは
docker関連ファイルをgithub等のリモートリポジトリに
退避させるため。
最後に「git init」を実行して、Reactプロジェクトをgit管理する。
コンテナはdocker-composeを使って作成する
version: "3"services:react:container_name: "react"# Dockerfileをビルドbuild:context: .dockerfile: Dockerfile# docekrfileに引数を渡すargs:PROJECT_NAME: ${PROJECT_NAME}ports:- 3000:3000volumes:# 名前付きボリューム- react-volume:/workspace# 環境変数読み込みenv_file:- .envtty: true# 名前付きボリュームvolumes:react-volume:
コンテナにVScode拡張機能を一括インストールするための
スクリプトを作成する
#!/bin/bash# 拡張機能のIDリストextensions=("zhang-renyang.vscode-react""mhutchie.git-graph")# 各拡張機能をインストールfor extension in "${extensions[@]}"; docode --install-extension $extensiondone
コンテナをdocker composeで作成した場合
VScodeから開いても、VScode拡張機能はインストールされないので
必要な拡張機能を一括でインストールできるスクリプトを作成しておく
詳しくは下記記事参照
またVScode拡張機能のDevContainersからコンテナを作る場合は
devcontainer.jsonにインストールしたい拡張機能を記載することで、コンテナ作成時に
自動でインストールさせることもできる
こちらに関しては下記で紹介してます。
どちらを使うかは好みで。。
docker-compose.ymlがあるディレクトリに移動して
React開発環境コンテナ作成する
$ docker compose up -d
コンテナと名前付きボリュームが
作成できているか確認する
$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES120f9dbc9966 react_container_dev-react "docker-entrypoint.s…" 6 minutes ago Up 5 minutes 0.0.0.0:3000->3000/tcp react$ docker volume lsDRIVER VOLUME NAMElocal react-volume
コンテナ作成ができたので
VScodeからコンテナにアタッチする
コンテナのウィンドウが開く
フォルダが開かれていないので作成したReactプロジェクトの
フォルダを開く
コンテナ構築後、Reactプロジェクトをgithubやgitlabのリモートリポジトリに
pushしておく。
そうしておけば、もし誤ってコンテナだけでなく、
名前付きボリュームを削除してしまったとしても
コンテナのworkspace配下にリモートリポジトリからReactプロジェクトをcloneすれば
復元できる。
コンテナにReactプロジェクトを作成できたので
動作確認する
VScodeのターミナルで「yarn start」を
実行する
$ yarn startCompiled successfully!You can now view sample-react-project in the browser.Local: http://localhost:3000On Your Network: http://172.18.0.2:3000Note that the development build is not optimized.To create a production build, use npm run build.webpack compiled successfullyNo issues found.
となるので、ホストのブラウザから
「http://localhost:3000」
にアクセスするとReactの画面がみれる
上記の
You can now view sample-react-project in the browser.Local: http://localhost:3000On Your Network: http://172.18.0.2:3000Note that the development build is not optimized.
の部分でVScodeのターミナル上でリンククリックで
アクセスしようとしても開けないので注意。
これだと「http://0.0.0.0:3000/ 」にアクセスしてしまうことに
なるので開けない。
docker-compose.ymlのportでホストのlocalhost:3000とコンテナの3000の
ポートを紐づけているのでホストのブラウザからは
「http://localhost:3000」でアクセスしないと開けない。
コンテナを削除しても、一緒にボリュームは削除されない。
そのため名前付きボリュームにプロジェクトが残っているので
問題ない。
docker-compose.ymlで指定している名前付きボリューム(react-volume)内に
データが存在する場合は、コンテナは名前付きボリュームの値で
上書きされるので、初期化はされない。
詳しくは下記記事でまとめています。
Reactの開発環境をDockerコンテナで構築してみた。
コンテナ構築するのはローカル環境を汚さないし、
終わったら削除できるので便利だ。
以前にNext.jsのコンテナ環境を作ったでの
その知識を応用して今回はReactプロジェクトを作ってみた感じ.
なので、基本的な流れは同じになる。
Next.jsのコンテナ開発環境構築については下記です。
また当環境でデバッグをするときの設定に関しては下記記事でまとめています
Dockerについては下記書籍がかなり参考になりました