我有一个使用reactjs和nodejs的示例项目,下面是文件夹结构。
movielisting
Dockerfile
client
package.json
package.lock.json
... other create-react-app folders like src..
server
index.js
我通过npm run start(客户端文件夹)和nodemon index.js(服务器文件夹)启动此项目。我所有的api都写在服务器文件夹中。我的客户端在端口3000中运行,服务器在端口4000中运行,我在如下所示的客户端的package.json中添加了代理服务器
"proxy": "http://localhost:4000"
所以我想在Dockerfile中实现的是我想通过运行此Dockerfile来启动应用程序
1) i need to create the build of client by running npm run build
2) copy to the workdir inside the container
3) copy all server folder
4) npm install for the server folder
5) proxy the application
我该怎么办?我是否需要在nodejs中编写一些代码来服务构建index.html文件
还有我如何运行Dockerfile命令来运行应用程序。
任何帮助表示赞赏!
答案 0 :(得分:1)
为了将前端和后端都构建为单个映像。您需要执行以下操作:
对于前端应用程序,需要对其进行构建以便将其用作静态文件
对于后端应用程序,它需要在容器内运行并公开公开,以便前端可以从浏览器访问它,因为使用localhost:4000
将最终调用用户的本地主机而不是容器的本地主机
最后,您需要使用supervisor之类的服务管理器,才能在单个容器中运行多个服务。您可能需要检查following
例如,您可以检查以下内容:
FROM node:10.15.1-alpine
COPY . /home/movielisting
#Prepare the client
WORKDIR /home/movielisting/client
RUN npm install --no-cache && npm run build && npm install -g serve
#Prepare the server
WORKDIR /home/movielisting/server
RUN npm install --no-cache
EXPOSE 4000
CMD [ "npm", "start", "index.js" ]
您可能需要检查以下链接: