【问题标题】:Using one NodeJs docker image inside React Container在 React Container 中使用一个 NodeJs docker 镜像
【发布时间】:2019-09-13 06:08:50
【问题描述】:

第 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 步:**然后我为这个 Node 应用程序构建了一个 docker 镜像。这是构建命令输出 -

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;"]

第 4 步:现在我构建并运行了第 3 步生成的 docker 映像。

问题:

看起来节点应用程序没有在新创建的 docker 容器上运行。 如果我 'ssh' 进入 docker 容器,我看不到任何节点服务器在那里运行。 我也找不到在此容器中的 step1 中创建的 WORKDIR (/usr/src/app)。

我做错了什么? 如果我可以进一步澄清,请告诉我。

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

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

    【讨论】:

    • 那么它有什么问题呢?我知道我正在做一个多阶段的 docker build
    • 当您使用多阶段构建时,一旦您获得最终构建的图像,它将只有最后一个图像的内容。在您的情况下,您是在 npm install 之后将构建工件从 nodejs docker 镜像复制到 nginx 镜像中。您构建的最终图像将在 /nginx/html 文件夹中包含用于 Web 托管的 nginx 和缩小代码
    • 那么如果我在 docker 文件中使用 COPY FROM 命令并从 stag1 复制到 stage 2 会起作用吗?
    • 使用 Copy From 命令后,它会将构建文件夹从 nodejs 映像复制到 nginx 映像,然后 nginx 将托管您的应用程序。
    【解决方案2】:

    Nodejs 服务器可以在它自己的独立容器中,我想你已经做到了。客户端实际上是一个网络服务器,例如nginx、apache 等将为您的 react 应用程序的构建提供服务。最后,您将运行 2 个容器:1 个用于 nodejs 服务器,1 个用于 nginx 网络服务器。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      • 2021-11-25
      • 2018-10-31
      • 2020-11-20
      相关资源
      最近更新 更多