在React容器中使用一个NodeJs docker映像

在React容器中使用一个NodeJs docker映像,docker,dockerfile,Docker,Dockerfile,步骤1:我已经创建了一个NodeJS应用程序的本地docker映像。 以下是此应用程序的dockerfile- FROM node:8 # Create app directory WORKDIR /usr/src/app # Install app dependencies # A wildcard is used to ensure both package.json AND package-lock.json are copied # where available (npm@5+)

步骤1:我已经创建了一个NodeJS应用程序的本地docker映像。 以下是此应用程序的dockerfile-

FROM node:8

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

# Bundle app source
COPY . .

#EXPOSE 8080
CMD [ "npm", "start" ]
**步骤2:*然后我为这个节点应用程序构建了一个docker映像。这是build命令的输出-

C:\Users\shibathethinker\Documents\GitHub\NodeProjects\API_Proxy_ABN>docker build -t api-proxy .
Sending build context to Docker daemon  8.637MB
Step 1/6 : FROM node:8
 ---> 0bf36d7ccc1e
Step 2/6 : WORKDIR /usr/src/app
 ---> Running in 7187d65639f1
Removing intermediate container 7187d65639f1
 ---> 0e34dc93439c
Step 3/6 : COPY package*.json ./
 ---> 47c0d0ca8c77
Step 4/6 : RUN npm install
 ---> Running in d7e5163371df
npm WARN api_proxy@1.0.0 No repository field.

added 98 packages from 91 contributors and audited 194 packages in 8.598s
found 0 vulnerabilities

Removing intermediate container d7e5163371df
 ---> 72da705ae792
Step 5/6 : COPY . .
 ---> 0293df6aa27d
Step 6/6 : CMD [ "npm", "start" ]
 ---> Running in 251e98c0a0ae
Removing intermediate container 251e98c0a0ae
 ---> a92d8a95b8cd
Successfully built a92d8a95b8cd
Successfully tagged api-proxy:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
**步骤3:*然后,我想在另一个“React”应用程序中使用此docker图像。 这是应用程序的Dockerfile-

 FROM   api-proxy:latest
WORKDIR /app
RUN npm install
CMD [ "npm", "start" ]

# stage: 2 — the production environment
FROM nginx:alpine
#COPY —from=react-build /app/build /usr/share/nginx/html
#COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY /build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
第四步:现在我构建并运行了第三步生成的docker图像

问题:

节点应用程序似乎未在新创建的docker容器上运行。 如果我将“ssh”插入docker容器,我看不到任何节点服务器在那里运行。 我也无法在此容器中找到step1中创建的WORKDIR(/usr/src/app)

我做错了什么?
请让我知道我是否可以进一步澄清。

您正在进行多阶段docker构建。您正在使用nodejs(下载依赖项和缩小构建)构建应用程序,并在nginx web服务器上复制和运行它

您正在进行多阶段docker构建。您正在使用nodejs(下载依赖项和缩小构建)构建应用程序,并在nginx web服务器上复制和运行它

Nodejs服务器可以放在自己的独立容器中,我想您已经这样做了。客户端实际上是一个Web服务器,例如nginx、apache等,用于构建react应用程序。最后,您将有2个正在运行的容器:1个用于nodejs服务器,1个用于nginxWebServer


要将react应用程序的构建放入此nginx Web服务器,您将使用多阶段构建。在第一个阶段,您将构建react应用程序,在第二个阶段,您将使用nginx映像,并将react构建从第一个阶段复制到nginx映像的html文件夹中。

Nodejs服务器可以位于其自己的独立容器中,我认为您已经完成了这一操作。客户端实际上是一个Web服务器,例如nginx、apache等,用于构建react应用程序。最后,您将有2个正在运行的容器:1个用于nodejs服务器,1个用于nginxWebServer


要将react应用程序的构建放入此nginx Web服务器,您将使用多阶段构建。在第一阶段中,您将构建react应用程序,在第二阶段中,您将使用nginx映像,并将react构建从第一阶段复制到nginx映像的html文件夹中。

那么,它有什么问题?我知道我正在做一个多阶段的docker构建,因为你正在使用多阶段构建,一旦你得到最终构建的映像,它将只有最后一个映像的内容。在您的例子中,您是在npm安装到nginx映像之后从nodejs docker映像复制构建工件。您构建的最终图像将在/nginx/html文件夹中包含用于web主机的nginx和缩小代码。因此,如果我在docker文件中使用COPY-FROM命令,并从stag1复制到stage-2,它会工作吗?一旦您使用COPY-FROM命令,它将构建文件夹从nodejs映像复制到nginx映像,nginx将承载您的应用程序。那么,它有什么问题呢?我知道我正在做一个多阶段的docker构建,因为你正在使用多阶段构建,一旦你得到最终构建的映像,它将只有最后一个映像的内容。在您的例子中,您是在npm安装到nginx映像之后从nodejs docker映像复制构建工件。您构建的最终映像将在/nginx/html文件夹中为web Hostings包含nginx和缩小的代码。因此,如果我在docker文件中使用COPY-FROM命令并从stag1复制到stage 2,它会工作吗?一旦您使用COPY-FROM命令,它会将构建文件夹从nodejs映像复制到nginx映像,nginx将承载您的应用程序。