这样只会创建一个镜像层,
从而减小最终镜像的尺寸
<span style="color: #008080">FROM<span style="color: #000000"> ubuntu<span style="color: #008080">RUN apt-get update && apt-get install vim
》)来减小容器镜像的尺寸,并且还可以使用 multi-stage 技术结合不同的父镜像来极大的减小最终的镜像的尺寸。有没有很心动呢?接下来就让我们通过 demo 演示笔者砍掉镜像虚膘的三板斧!
app.listen(
3000,() =><span style="color: #000000"> {console.log(
Example app listening on port </span>3000!<span style="color: #000000">
)})
<span style="color: #008080">EXPOSE
3000<span style="color: #008080">WORKDIR<span style="color: #000000"> /app
<span style="color: #008080">COPY<span style="color: #000000"> package.json index.js ./
<span style="color: #008080">RUN<span style="color: #000000"> npm install
<span style="color: #008080">CMD ["npm","start"]
》):
<span style="color: #008080">COPY<span style="color: #000000"> package.json index.js ./
<span style="color: #008080">RUN<span style="color: #000000"> npm install
<span style="color: #008080">FROM node:8
<span style="color: #008080">COPY<span style="color: #000000"> --from=build /app /
<span style="color: #008080">EXPOSE 3000
<span style="color: #008080">CMD ["npm","start"]
》。
<span style="color: #008080">COPY<span style="color: #000000"> package.json index.js ./
<span style="color: #008080">RUN<span style="color: #000000"> npm install
<span style="color: #008080">FROM<span style="color: #000000"> gcr.io/distroless/nodejs
<span style="color: #008080">COPY<span style="color: #000000"> --from=build /app /
<span style="color: #008080">EXPOSE 3000
<span style="color: #008080">CMD ["index.js"]
只有 76.7M!这确实太不可思议了,在吃惊之于让我们回归理性,看看 distroless 究竟是如何把镜像做的这么小?我想先用 docker exec 命令进入容器内部看看情况,结果是我无法用下面的命令进入到容器内部:
》一文中的镜像大小)!
<span style="color: #008080">COPY<span style="color: #000000"> package.json index.js ./
<span style="color: #008080">RUN<span style="color: #000000"> npm install
<span style="color: #008080">FROM node:8<span style="color: #000000">-alpine
<span style="color: #008080">COPY<span style="color: #000000"> --from=build /app /
<span style="color: #008080">EXPOSE 3000
<span style="color: #008080">CMD ["npm","start"]
只有 69.7M,比使用 distroless 项目创建的镜像还要小!能用 docker exec 命令进入容器吗?让我们运行一个命名的容器试试: