docker容器镜像瘦身的3个窍门

瘦身一—合并dockerfile语句

  • 每个RUN语句、COPY语句、ADD语句都会创建一个新层
  • 如果是使用的是git仓库的代码,可以考虑把历史提交合并成一个
使用 &&
FROM ubuntu
RUN apt-get update && apt-get install vim

瘦身二—使用Docker多阶段构建将层合并为一

查看docker构建的历史记录:
docker history node-vanilla

使用多阶段构建
  • 之前的dockerfile:
    ==会自动生成5层==
    这个Dockerfile文件中有一个COPY和一个RUN语句。在我们的预期中,在基础镜像上应该至少有两层
FROM node:8

EXPOSE 3000

WORKDIR /app
COPY package.json index.js ./
RUN npm install

CMD ["npm", "start"]
  • 改造以后的dockerfile:
    ==会自动生成3层==
    Dockerfile的第一部分创建了三个层。接着这些层被合并复制到第二个阶段中。然后又在这个镜像之上添加了两层,最终变成三个层。
FROM node:8 as build

WORKDIR /app
COPY package.json index.js ./
RUN npm install

FROM node:8

COPY --from=build /app /
EXPOSE 3000
CMD ["index.js"]

瘦身三—使用Distroless移除容器中的所有累赘

  • 目前的镜像不仅含有Node.js,还含有yarn、npm、bash以及大量其他二进制文件。同时,它是基于Ubuntu的。因此拥有一个完整的操作系统以及所有的二进制文件和实用程序
  • ==Distroless镜像==只包含应用程序及其运行时依赖。不包含包管理器、Shell以及其他标准Linux发行版中能找到的其他程序。
使用Distroless
FROM node:8 as build

WORKDIR /app
COPY package.json index.js ./
RUN npm install

FROM gcr.io/distroless/nodejs

COPY --from=build /app /
EXPOSE 3000
CMD ["index.js"]
使用alpine作为更小的基础镜像
  • alpine基础镜像是基于muslc的,muslc占用空间更小,以安全为核心,牺牲了速度
  • ubuntu、centos、debian都是基于glibc的,速度快。相对于apline,安全比较差
FROM node:8 as build

WORKDIR /app
COPY package.json index.js ./
RUN npm install

FROM node:8-alpine

COPY --from=build /app /
EXPOSE 3000
CMD ["npm", "start"]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值