创建仅包含webapp和服务器的docker容器

时间:2017-09-27 09:40:50

标签: node.js docker webpack dockerfile

我有一个基本上有这样结构的项目:(*)

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镜像配置为仅包含(**)

中的内容

1 个答案:

答案 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文件夹