Docker-镜像优化

BackGround

Docker如果最后的镜像很大,所以是需要优化的。

  1. 安装不必要的软件包会增加攻击面,从而增加安全风险。
  2. 镜像传输需要更多时间。
  3. 部署大镜像需要更多时间。

优化方法

优化一:合并RUN

原始Docker

FROM hub.c.163.com/netease_comb/centos:7                                                                                                                                       
MAINTAINER netease

# 安装常用软件
RUN yum install -y wget
RUN yum install -y curl
RUN yum install -y vim

# 设置工作目录
WORKDIR /app

# 其他配置和命令

# 容器启动时运行的命令

优化Docker

FROM hub.c.163.com/netease_comb/centos:7                                                                                                                                       
MAINTAINER netease

# 安装常用软件
RUN yum install -y wget && \
yum install -y curl && \
yum install -y vim

# 设置工作目录
WORKDIR /app

# 其他配置和命令

# 容器启动时运行的命令

效果

优化二:使用较小的基础镜像

减小 docker 镜像大小最明显的方法是使用较小的基础镜像。

如果希望为 python 应用程序创建镜像,请考虑使用 python:3.9-slim 镜像而不是 python:3.9。

python:3.9 的大小约为 1.3 GB,而 python:3.9-slim 的大小仅为 1 GB 左右。

您可以使用 alpine 版本进一步减少镜像。alpine 镜像是专门为作为容器运行而设计的,而且体积非常小。python:3.9-alpine 镜像只有 49 MB

优化三:使用多阶段构建来减小大小

优化四:apt 安装中使用 –no-install-recommends 标志

优化前

FROM ubuntu:latest
RUN apt update -y && \
apt install unzip -y --no-install-recommends && \
apt install curl --no-install-recommends -y && \
apt install python3 -y --no-install-recommends

优化后

FROM ubuntu:latest
RUN apt update -y && \
apt install unzip -y --no-install-recommends && \
apt install curl --no-install-recommends -y && \
apt install python3 -y --no-install-recommends

优化五:在 apt install 命令后添加 rm -rf /var/lib/apt/lists/

优化前

FROM ubuntu:latest
RUN apt update -y && \
apt install unzip -y --no-install-recommends && \
apt install curl --no-install-recommends -y && \
apt install python3 -y --no-install-recommends

优化后

FROM ubuntu:latest
RUN apt update -y && \
apt install unzip -y --no-install-recommends && \
apt install curl --no-install-recommends -y && \
apt install python3 -y --no-install-recommends && \
rm -rf /var/lib/apt/lists/*

优化六:使用 .dockerignore 文件

ignorethisfile.txt
logs/
ignorethisfolder/
.git
.cache
*.md

优化七:在 RUN 之后放置 COPY

优化前

                                                                                                                                 FROM ubuntu:20.04           
COPY file /home/ubuntu
RUN apt update -y && \
apt install unzip -y --no-install-recommends && \
apt install curl --no-install-recommends -y && \
apt install python3 -y --no-install-recommends && \
rm -rf /var/lib/apt/lists/*

优化后

                                                                                                                             FROM ubuntu:20.04           

RUN apt update -y && \
apt install unzip -y --no-install-recommends && \
apt install curl --no-install-recommends -y && \
apt install python3 -y --no-install-recommends && \
rm -rf /var/lib/apt/lists/*
COPY file /home/ubuntu

优化八:使用工具

  • docker-squash
  • Dive
  • fromlatest.io