有没有一种方法可以避免使用Docker推送node_modules?
我有一个node_modules文件夹是120MB + ,我想知道如果我们可以以某种方式只推动node_modules文件夹,如果它已经改变?
这是我的docker文件现在看起来像:
FROM node:6.2.0 # Create app directory RUN mkdir -p /usr/src/app WORKDIR /usr/src/app # Install app dependencies COPY package.json /usr/src/app/ RUN npm install # Bundle app source COPY . /usr/src/app CMD export NODE_ENV=production EXPOSE 80:7000 # EXPOSE 7000 CMD [ "npm", "start" ]
所以我想要做的只是推动node_modules文件夹,如果它已经改变! 我不介意手动指定node_modules文件夹何时更改,是否通过传递一个标志和使用if语句来做到这一点,我不知道?
用例:
- 我只修改了我的应用程序代码,并没有添加任何新的软件包。
- 我添加了一些包,并要求推送node_modules文件夹。
编辑:
所以我尝试了下面的一些逻辑引入的docker文件
http://bitjudo.com/blog/2014/03/13/building-efficient-dockerfiles-node-dot-js/
当我运行docker built -t <name> .
与下面的Dockerfile然后gcloud docker -- push <url>
它仍然会尝试推我的整个目录到registry?
FROM node:6.2.0 ADD package.json /tmp/package.json RUN cd /tmp && npm install # Create app directory RUN mkdir -p /usr/src/app && cp -a /tmp/node_modules /usr/src/app/ WORKDIR /usr/src/app # Install app dependencies # COPY package.json /usr/src/app/ # RUN npm install # Bundle app source ADD . /usr/src/app CMD export NODE_ENV=production EXPOSE 80:7000 # EXPOSE 7000 CMD [ "npm", "start" ]
运行gcloud docker -- push etc...
输出gcloud docker -- push etc...
:
f614bb7269f3: Pushed 658140f06d81: Layer already exists be42b5584cbf: Layer already exists d70c0d3ee1a2: Layer already exists 5f70bf18a086: Layer already exists d0b030d94fc0: Layer already exists 42d0ce0ecf27: Layer already exists 6ec10d9b4afb: Layer already exists a80b5871b282: Layer already exists d2c5e3a8d3d3: Layer already exists 4dcab49015d4: Layer already exists
f614bb7269f3总是被推,我不明白为什么(新的到Docker)。 它试图推动我的应用程序在整个目录!?
有任何想法吗?
这篇博客文章解释了如何通过创build一个可以被caching的图层caching你的图像的后续版本,只要package.json文件没有改变 – http://bitjudo.com/blog/2014/03/ 13 /build筑效率-dockerfiles节点-点- JS /
这是一个链接到要点代码段 – https://gist.github.com/dweinstein/9468644
在我的组织中为我们的节点应用程序创造了奇迹。
- 将本地目录挂载到不作为VOLUME公开的Docker容器path中
- NodeJS与Docker:ENOENT:没有这样的文件或目录,打开“/app/folder/example.key”
- Docker在第一行之后停止
- 如何在不创build新映像的情况下升级Docker镜像?
- 执行Docker Run并检查参数是否为空
- 如何创build一个MongoDB泊坞窗并保存数据库的configuration?
- 如何在openshift / jenkins-1-centos7docker集装箱中启用系统服务?
- Postgres / Postgis Dockerfile容器无法绑定IPv6套接字错误
- 当构buildDockerfile时,linux source命令不起作用