Node.js 如何使用Docker构建和运行生产NodeJS express服务器

Node.js 如何使用Docker构建和运行生产NodeJS express服务器,node.js,docker,express,Node.js,Docker,Express,我有一个用expressnodejs框架编写的服务器。目前它有一个app.js,如下所示: // app.js const express = require('express'); const connectDB = require('./config/db'); var cors = require('cors'); // routes const books = require('./routes/api/books'); const app = express(); // Con

我有一个用
express
nodejs框架编写的服务器。目前它有一个
app.js
,如下所示:

// app.js

const express = require('express');
const connectDB = require('./config/db');
var cors = require('cors');

// routes
const books = require('./routes/api/books');

const app = express();

// Connect Database
connectDB();

// cors
app.use(cors({ origin: true, credentials: true }));

// Init Middleware
app.use(express.json({ extended: false }));

app.get('/', (req, res) => res.send('Hello world!'));

app.get('/health-check',(req,res)=> {
    res.send ("OK");
});

// use Routes
app.use('/api/books', books);

// const port = process.env.PORT || 8080;
const port = 8080;

app.listen(port, () => console.log(`Server running on port ${port}`));

我使用以下命令运行上述服务器:

npm run app
我如何使其成为生产级构建并运行它

我可以用下面的
Dockerfile
来做吗

FROM node:13.12.0-alpine as build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . ./
RUN npm run build

# production env
FROM nginx:stable-alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 8080
CMD ["nginx", "-g", "daemon off;"]

你错过了一些东西。您的node/express在8080上运行,您将文件放在nginx(/usr/share/nginx/html)中,并在端口80上公开它们。您需要连接这两个端口。我要做的是创建一个只包含Node/Express应用程序的容器。然后是一个docker容器(在docker compose中)将端口(8080)发布到其他端口(8090?)。我将Nginx保留在主机上,并使用Nginx作为代理(将8090映射到子域)。这意味着我们不能像为
reatjs
应用程序那样构建
express
应用程序?不,你不能。React应用程序(在构建之后)只是一个静态网站。(除非像NextJS这样的服务器端渲染)。Express应用程序是一个动态的NodeJS环境。