优化 Apache Airflow 官方 docker 图片

Optimizing Apache Airflow official docker image

我正在使用 Apache Airflow official image

我使用的 SparkSubmitOperator 需要同时安装 Java 和 apache-airflow-providers-apache-spark,所以我的 Dockerfile 看起来像这样:

FROM apache/airflow:2.2.3-python3.9
ENV PYTHONPATH "${PYTHONPATH}:${AIRFLOW_HOME}"
USER root
RUN apt-get update \
  && apt-get install -y --no-install-recommends \
         openjdk-11-jre-headless \
  && apt-get autoremove -yqq --purge \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*
USER airflow
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
COPY ./requirements/requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
ADD dags dags/

requirements.txt

apache-airflow[jdbc,statsd]==2.2.3
apache-airflow-providers-apache-spark==2.1.0

添加以上两项会显着增加图像大小(增加一倍以上 - ~650MB)。

  1. 我的 Dockerfile 外观优化了吗?这里有什么可以改进的吗?
  2. 查看基本映像,我看到了一些我不需要的包(例如 apache-airflow-providers-googleapache-airflow-providers-celery 等)。为什么这些提供程序是内置的?有瘦一点的图吗?

您可以按照自定义图像的说明进行操作。您基本上可以使用 Dockerfile 或 Airflow 和 Airflow 源代码构建自己的映像,您可以:

  • 只安装你需要的
  • 使用 Airflow 的 multi-stage 方法删除您不需要的所有“build-essential”内容

您可以在此处查看所有详细信息和大量示例: https://airflow.apache.org/docs/docker-stack/build.html#customizing-the-image

你也可以看看我在2020年Airflow Summit上关于Airflow Image的演讲(细节改变了,但Airflow Image背后的方法保持不变):https://youtu.be/wDr3Y7q2XoI