第一步:我创建了一个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:**然后,我想在另一个“反应”应用中使用此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;"]
Step4:现在,我构建并运行了在步骤3中生成的docker映像。
问题:
似乎节点应用未在新创建的Docker容器上运行。 如果我“ ssh”到docker容器中,则看不到任何正在运行的节点服务器。 我也找不到在该容器的step1中创建的WORKDIR(/ usr / src / app)。
我做错了什么? 请让我知道是否可以进一步澄清。
答案 0 :(得分:1)
您正在执行多阶段Docker构建。您正在使用Node.js(下载依赖项和最小化构建)构建应用程序,并将其复制并在Nginx Web服务器上运行。
答案 1 :(得分:1)
Nodejs服务器可以位于其自己的独立容器中,我认为您已经完成了。客户端实际上是例如的网络服务器。 nginx,apache等将为您的React应用构建提供服务。最后,您将运行2个容器:1个用于nodejs服务器,1个用于nginx Web服务器。
要将您的应用程序的构建放入此nginx Web服务器,您将使用多阶段构建。在第一个阶段中,您将构建您的react应用程序,在第二个阶段中,您将使用nginx图像并将反应构建从第一阶段复制到nginx图像的html文件夹中。