如何正确地删除以前提交的图像,以便从头开始构build

经过一番尝试和玩,我有一个Node.JS项目,我想打包。 这是我的dockerfile:

FROM node:latest MAINTAINER me <ma@me.me> COPY ./backend-codebase /app RUN /bin/bash -c 'cd /app; npm install' EXPOSE 80 ENV NODE_ENV=production CMD [ "sh", "-c", "cd /app; npm run start" ] 

在构build之前,我删除了之前我已经完成的所有图像:

 docker rmi $(docker images -q) -f 

一切都build立和运作,但是当我推动它时,我意识到尺寸对于我的小应用来说太大了。 所以我试图深入了解它:

 Matteos-MBP-2: matteo$ docker history 98e2a25bffe7 IMAGE CREATED CREATED BY SIZE COMMENT 98e2a25bffe7 28 seconds ago /bin/sh -c #(nop) CMD ["sh" "-c" "cd /app; n 0 B 9d2ee235ec5d 28 seconds ago /bin/sh -c #(nop) ENV NODE_ENV=production 0 B f80a1e12748f 29 seconds ago /bin/sh -c #(nop) EXPOSE 80/tcp 0 B c8353dfcd198 30 seconds ago /bin/sh -c /bin/bash -c 'cd /app; npm install 0 B e286e75eb2d9 40 seconds ago /bin/sh -c #(nop) COPY dir:601eb26de2e2876ab1 18.93 MB 2e81fb2f03ab 44 seconds ago /bin/sh -c #(nop) MAINTAINER Me Me 0 B 7c4d899628d5 21 hours ago /bin/sh -c #(nop) CMD ["node"] 0 B <missing> 21 hours ago /bin/sh -c curl -SLO "https://nodejs.org/dist 47.39 MB <missing> 21 hours ago /bin/sh -c #(nop) ENV NODE_VERSION=7.4.0 0 B <missing> 2 weeks ago /bin/sh -c #(nop) ENV NPM_CONFIG_LOGLEVEL=in 0 B <missing> 2 weeks ago /bin/sh -c set -ex && for key in 9554F0 108.3 kB <missing> 2 weeks ago /bin/sh -c groupadd --gid 1000 node && user 335.1 kB <missing> 3 weeks ago /bin/sh -c apt-get update && apt-get install 322.6 MB <missing> 3 weeks ago /bin/sh -c apt-get update && apt-get install 122.6 MB <missing> 3 weeks ago /bin/sh -c apt-get update && apt-get install 44.31 MB <missing> 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B <missing> 3 weeks ago /bin/sh -c #(nop) ADD file:1d214d2782eaccc743 123.1 MB 

在这里是:先前的一些提交仍然存在,这些提交与docker在我还在玩的时候产生的一些旧提交有关(请参阅apt-get?)。 当我推动它的时候,它试图以某种方式推动它,虽然它说在外面的“失踪”,我删除了它们。 我怎样才能在build设之前清理板岩,以便重新开始并基于我的下一个提交节点:最新? 谢谢

您的docker rmi可能有错误。 -f需要在要删除的图像ID之前出现:

 docker rmi -f $(docker images -q) 

这就是说,你的历史看起来非常好。 你用来build造你的容器的源图像不会被重build,它们会被拉下来,并且会有上个build造时间,几个小时和几个星期前的历史。


从下面的评论,似乎有一些不相信,7c4d899628d5以下的所有层是从节点图像。 这是对我自己的本地环境的testing:

 $ docker pull node:latest latest: Pulling from library/node 75a822cd7888: Already exists 57de64c72267: Already exists 4306be1e8943: Already exists 871436ab7225: Pull complete 0110c26a367a: Pull complete 1f04fe713f1b: Pull complete 723bac39028e: Pull complete Digest: sha256:08d77f1984cf79739ba7c987636cb871fd69745754200e5891a0c7ee2d9965b0 Status: Downloaded newer image for node:latest $ docker history node:latest IMAGE CREATED CREATED BY SIZE COMMENT 7c4d899628d5 23 hours ago /bin/sh -c #(nop) CMD ["node"] 0 B <missing> 23 hours ago /bin/sh -c curl -SLO "https://nodejs.org/dist 47.39 MB <missing> 23 hours ago /bin/sh -c #(nop) ENV NODE_VERSION=7.4.0 0 B <missing> 2 weeks ago /bin/sh -c #(nop) ENV NPM_CONFIG_LOGLEVEL=in 0 B <missing> 2 weeks ago /bin/sh -c set -ex && for key in 9554F0 108.3 kB <missing> 2 weeks ago /bin/sh -c groupadd --gid 1000 node && user 335.1 kB <missing> 3 weeks ago /bin/sh -c apt-get update && apt-get install 322.6 MB <missing> 3 weeks ago /bin/sh -c apt-get update && apt-get install 122.6 MB <missing> 3 weeks ago /bin/sh -c apt-get update && apt-get install 44.31 MB <missing> 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B <missing> 3 weeks ago /bin/sh -c #(nop) ADD file:1d214d2782eaccc743 123.1 MB 

你可以find一个非常详细的答案,解释为什么你在一些图层的docker history输出中看到<missing> ,而不是其他的,在这里:

https://stackoverflow.com/a/35312577/3738611

在这里find答案中的大部分信息:

http://www.windsock.io/explaining-docker-image-ids/