创建搬运工容器只包含Web应用程序和服务器

问题描述:

我基本上具有这样的结构的项目:(*)创建搬运工容器只包含Web应用程序和服务器

my_project/ 
    ├── server/ 
    │ ├── node_modules/ 
    │ └── server.js 
    ├── src/ 
    ├── node_modules/ 
    ├── Dockerfile 
    └── {multiple important config files for webpack and typescript etc}.json 

我建立与npm run build项目。这会从src/文件夹创建一个dist/文件夹。

这是我package.json(**)

my_project/ 
    ├── server/ 
    │ ├── node_modules/ 
    │ └── server.js 
    └── dist/ 
     ├── webapp/ 
     └── assets/ 

现在我想离开这个创造一个码头工人形象:

"scripts": { 
    "prebuild": "npm run install:client && npm run install:server", 
    "build": "webpack", 
    "install:client": "npm install", 
    "install:server": "cd server/ && npm install" 
} 

最后的项目只有这需要。

我有一个Dockerfile现在正在工作。它看起来像这样:

FROM node:boron 
WORKDIR /usr/src/app 
COPY package.json . 
COPY . . 
RUN npm run build 
EXPOSE 9090 
CMD [ "node", "server/server.js" ] 

但是从我的理解,它会将我的一切都在我的目录,然后创建dist/文件夹,并最终搬运工图像包含了这一切:(***)

如何配置泊坞窗图像只含有

运行npm run build将创建dist文件夹的东西(**)这是你想要的。之后,你可以删除你不加入从图像所需要的东西,下面的泊坞窗文件

FROM node:boron 
WORKDIR /usr/src/app 
COPY package.json . 
COPY . . 
RUN npm run build && /bin/bash -c "find . -not -name 'server' -not -name 'dist' -delete" 
EXPOSE 9090 
CMD [ "node", "server/server.js" ] 

命令/bin/bash -c "find . -not -name 'server' -not -name 'dist' -delete"将只保留在服务器和dist文件夹

+0

对不起,它不工作我得到'步骤5/7:RUN npm run build && rm -rf!(server | dist) --->在e6db783f4fa0中运行 /bin/sh:1:语法错误:“(”unexpected 命令'/ bin/sh -c npm run build && rm -rf!(server | dist)'返回一个非零代码:2' – petur

+1

@petur更新了答案 – yamenk

+0

Sweet!实际上它是使用'RUN npm run build && rm -rf解决的!“(服务器| DIS T)“' – petur