我有一个基本上有这样结构的项目:(*)
my_project/
├── server/
│ ├── node_modules/
│ └── server.js
├── src/
├── node_modules/
├── Dockerfile
└── {multiple important config files for webpack and typescript etc}.json
我使用npm run build
构建项目。这会在dist/
文件夹中创建一个src/
文件夹。
这是我的package.json
:
"scripts": {
"prebuild": "npm run install:client && npm run install:server",
"build": "webpack",
"install:client": "npm install",
"install:server": "cd server/ && npm install"
}
最终项目只需要这样:(**)
my_project/
├── server/
│ ├── node_modules/
│ └── server.js
└── dist/
├── webapp/
└── assets/
现在我想用此创建一个泊坞窗图像。
我现在正在使用Dockerfile
。它看起来像这样:
FROM node:boron
WORKDIR /usr/src/app
COPY package.json .
COPY . .
RUN npm run build
EXPOSE 9090
CMD [ "node", "server/server.js" ]
但根据我的理解,它会复制我目录中的所有内容,然后创建dist/
文件夹,最终的docker图像包含以下所有内容:(***)
my_project/
├── server/
│ ├── node_modules/
│ └── server.js
├── src/
├── node_modules/
├── Dockerfile
├── {multiple important config files for webpack and typescript etc}.json
└── dist/
├── webapp/
└── assets/
如何将Docker镜像配置为仅包含(**)
中的内容答案 0 :(得分:1)
运行npm run build
会创建dist文件夹,这就是你想要的。之后,您可以通过将以下内容添加到docker文件中来删除图像中不需要的内容
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文件夹