减小容器镜像的三板斧
# 两个 通过 && 把两个 <span style="color: #008080">RUN<span style="color: #000000"> 指令合并为一个,
这样只会创建一个镜像层,从而减小最终镜像的尺寸<span style="color: #008080">FROM<span style="color: #000000"> ubuntu<span style="color: #008080">RUN apt-get update && apt-get install vim
const express = require('express'=app.get('/',(req,res) => res.send('Hello World!'<span style="color: #000000">))
app.listen( 3000,() =><span style="color: #000000"> {console.log( Example app listening on port </span>3000!<span style="color: #000000"> )})
{
"name": "hello-world","version": "1.0.0","main": "index.js","dependencies": {
"express": "^4.16.2"
},"scripts": {
"start": "node index.js"
}
}
node:8
<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"]
$ docker build -t node--p : -ti -- --init node-demo
$ docker history node-demo
node:8<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">FROM node:8 <span style="color: #008080">COPY<span style="color: #000000"> --from=build /app /
$ docker build --no-cache -t node-demo-multi . -f Dockerfile.multi
$ docker history node-demo-multi
$ docker images| node-demo
node:8<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">FROM<span style="color: #000000"> gcr.io/distroless/nodejs <span style="color: #008080">COPY<span style="color: #000000"> --from=build /app /
$ docker build --no-cache -t node-demo- . -f Dockerfile.-p : -ti -- --init node-demo-
只有 76.7M!这确实太不可思议了,在吃惊之于让我们回归理性,看看 distroless 究竟是如何把镜像做的这么小?我想先用 docker exec 命令进入容器内部看看情况,结果是我无法用下面的命令进入到容器内部: $ docker exec -it
$ docker exec -it
node:8<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">FROM node:8<span style="color: #000000">-alpine <span style="color: #008080">COPY<span style="color: #000000"> --from=build /app /
$ docker build --no-cache -t node-demo-alpine . --p : -ti -- --init node-demo-alpine
只有 69.7M,比使用 distroless 项目创建的镜像还要小!能用 docker exec 命令进入容器吗?让我们运行一个命名的容器试试: $ docker run -p : -d --name democon --init node-demo--it democon
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |