誰かがdockerでcreate-react-appを使用した経験があるかどうか疑問に思っていました。私はそれを次のようなDockerfileでセットアップすることができました:
from node
RUN mkdir /src
WORKDIR /src
ADD package.json /src/package.json
RUN npm install
EXPOSE 3000
CMD [ "npm", "start" ]
そして、次のようなdocker-composeファイルを使用しました:
app:
volumes:
- "./app:/src"
ports:
- "3000:3000"
- "35729:35729"
build: ./app
これにより、コンテナーを起動してアプリを表示できました。ただし、マウントされたボリュームにファイルを保存するときにlivereloadが機能せず、webpackがsrcディレクトリにいくつかの.json.gzipファイルを作成しました。
これを正しく機能させるための提案はありますか?
ええ、aholbreichが言ったように、私は自分のマシンでローカルにnpm install
/npm start
を開発のために使用します。それはとても簡単だからです。おそらくdocker-compose
、ボリュームのマウントなどでも可能ですが、セットアップするのは少し面倒かもしれません。
デプロイメントの場合、Dockerfileを非常に簡単に使用できます。これが私が使用しているDockerfileの例です:
FROM node:6.9
# Create app directory
RUN mkdir -p /src/app
WORKDIR /src/app
# to make npm test run only once non-interactively
ENV CI=true
# Install app dependencies
COPY package.json /src/app/
RUN npm install && \
npm install -g pushstate-server
# Bundle app source
COPY . /src/app
# Build and optimize react app
RUN npm run build
EXPOSE 9000
# defined in package.json
CMD [ "npm", "run", "start:prod" ]
package.jsonにstart:prod
オプションを追加する必要があります:
"scripts": {
"start": "react-scripts start",
"start:prod": "pushstate-server build",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
},
CIサービスでテストを実行するには、次のようにします。
docker run <image> npm test
物事が期待どおりに機能することを確認するために、このdockerコンテナーをローカルで実行することを妨げるものは何もありません。
私は最近、hello-docker-reactという小さなプロジェクトを作成しました。
これは、docker-compose、create-react-app、yarn、ノードイメージ、および小さなエントリポイントスクリプトで作成されています。
ライブリロードは問題なく動作し、問題はまだ発見されていません。
ここにこれのための良いガイドがあります https://mherman.org/blog/dockerizing-a-react-app/
開発用
# base image
FROM node:9.6.1
# set working directory
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
# add `/usr/src/app/node_modules/.bin` to $PATH
ENV PATH /usr/src/app/node_modules/.bin:$PATH
# install and cache app dependencies
COPY package.json /usr/src/app/package.json
RUN npm install --silent
RUN npm install [email protected] -g --silent
# start app
CMD ["npm", "start"]
生産用
# build environment
FROM node:9.6.1 as builder
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
ENV PATH /usr/src/app/node_modules/.bin:$PATH
COPY package.json /usr/src/app/package.json
RUN npm install --silent
RUN npm install [email protected] -g --silent
COPY . /usr/src/app
RUN npm run build
# production environment
FROM nginx:1.13.9-Alpine
COPY --from=builder /usr/src/app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Create-react-appを使用した開発でdockerを使用しているときに、.envファイルにCHOKIDAR_USEPOLLING=1
を追加することでwebpackDevServer構成をオーバーライドできることがわかりました。これにより、ファイル監視が再び機能します。ホストのブラウザページも更新されます。私が発見した唯一のことは、それが自動的にウェブページを開かないことです。
tty: true
をサービスに追加して、元のコンソール出力をターミナルに戻すこともできます。ログ内のコンテナ名のプレフィックスを削除するには、docker-compose up -d
を実行した後、次のように実行できます。
docker-compose logs -f --tail=100 client | cut -f2 -d \"|\""