前言
- 本篇来学习下多阶段构建和镜像瘦身
多阶段构建
- –from=上阶段别名
# 第一构建阶段:将仅用于生成 requirements.txt 文件 FROM tiangolo/uvicorn-gunicorn:python3.9 as requirements-stage # 将当前工作目录设置为 /tmp WORKDIR /tmp # 生成 requirements.txt RUN touch requirements.txt # 第二构建阶段,在这往后的任何内容都将保留在最终容器映像中 FROM python:3.9 # 将当前工作目录设置为 /code WORKDIR /code # --from=上一个阶段别名,这里是requirements-stage COPY --from=requirements-stage /tmp/requirements.txt /code/requirements.txt RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
镜像瘦身
- 选择最小的基础镜像。
- 合并 RUN 环节的所有指令,少生成一些镜像层。
# 开发期间,逐层验证 RUN xxx RUN aaa \ aaa \ vvv \ # 生产环境合并写 RUN xxx \ aaa \ aaa\ vvv
- RUN 期间可能安装其它程序会生成临时缓存,要自行删除
- 使用 .dockerignore 文件,排除上下文中无需参与构建的资源。
- 合理使用多阶段构建。
- 合理使用构建缓存加速构建,但是有时也会有坑,开发的时候建议还是 docker build -t xxx --no-cache --force-rm . 来构建镜像。