Dockerfile 變更日誌

Dockerfile 在功能和向後相容性方面,並未嚴格遵循 Apache Airflow 的 SemVer 方法。雖然 Airflow 程式碼嚴格遵循此方法,但 Dockerfile 實際上是為使用者提供一種使用標準容器方法方便地打包 Airflow 的方式,因此有時建置過程或映像檔的進入點會有一些變更,需要稍微調整其使用或建置方式。

以下變更日誌描述了 Airflow 團隊發布的每個 docker 映像檔版本中引入的變更。

注意

以下變更日誌僅關於在 Airflow DockerHub 發布的便捷生產映像檔。在那裡發布的映像檔通常是使用與 Airflow 一起發布的 Dockerfile 建置的。但是,您可以隨時從 Airflow 取得最新發布的 Dockerfile,並使用它為 Airflow 2 系列中的任何 Airflow 版本建置映像檔。不能保證它能運作,但如果可以,那麼您可以使用該映像檔中的最新功能來為先前的 Airflow 版本建置映像檔。

Airflow 2.10

  • 映像檔不再支援 Debian-Bullseye(11)。映像檔基於 Debian-Bookworm (12)。

Airflow 2.9

  • “latest” 映像檔(即使用 apache/airflowapache/airflow:slim-latest 時的預設 Airflow 映像檔)現在使用最新的支援 Python 版本。先前它使用的是 “default” Python 版本,在 Airflow 2.8 時為 Python 3.8。隨著為 Airflow 2.9.0 發布的 Airflow 參考映像檔,映像檔將使用 Python 3.12,因為這是 Airflow 2.9 系列的最新支援版本。使用者可以使用 Python 3.8,方法是分別使用 apache/airflow:2.9.0-python3.8apache/airflow:slim-2.9.0-python-3.8 映像檔,因此雖然此變更可能具有破壞性,但切換到先前的行為非常容易。

  • PIP_USER 標誌已移除,並由指向 ~/.localVIRTUAL_ENV 取代,Airflow 安裝在此處。這產生的效果是,Airflow 安裝被視為常規虛擬環境,但與常規虛擬環境不同,~/.local 目錄被視為 系統 層級,當 worker 使用 --system-site-packages 標誌動態建立虛擬環境時,Airflow 安裝和所有套件也會出現在新的虛擬環境中。當您不使用此標誌時,它們不會被複製到那裡,這是一種向後相容的行為,與設定 PIP_USER 相同。

  • 映像檔包含最新的 uv 二進位檔(發布時的最新版本)- 它是 pip 的新型更快替代品。雖然映像檔仍然預設使用 pip,但您可以使用 uv 安裝套件,並且 - 實驗性地 - 您也可以使用 --arg AIRFLOW_USE_UV=true 建置自訂映像檔,這將使用 uv 執行安裝。這是實驗性支援,因為 uv 速度非常快,但也是 Python 生態系統中非常新的功能。

  • 用於安裝映像檔的約束現在可在 “${HOME}/constraints.txt” 中找到 - 您可以使用它們在映像檔中安裝其他套件,而無需找出您應該使用哪些約束。

  • 映像檔新增了 libev 程式庫到映像檔中,因為 Python 3.12 的 cassandra 驅動程式需要它,而且 libev 也將在其他 Python 版本中使用,作為 cassandra 驅動程式處理事件的更穩健、更快速的方式。

Airflow 2.8

  • 2.8.3

    • gosu 二進位檔已從映像檔中移除。對於依賴 gosu 在容器中變更使用者的使用者來說,這是一個可能具有破壞性的變更。gosu 二進位檔被移除,因為它是安全漏洞的來源,因為它連結到較舊的 Go 標準程式庫。

    • smtp 提供者現在包含在映像檔中預設安裝的提供者清單中。

  • 2.8.1

    • 修正了 MySQL 用戶端程式庫中的差異。在 2.8.0 中,如果未指定 INSTALL_MYSQL_CLIENT_TYPE 建置引數在建置自訂 X86 映像檔期間,預設情況下,套件將使用 MariaDB 程式庫編譯,但 MySQL 程式庫已安裝在最終映像檔中。

  • 2.8.0

    • libxmlsec1libxmlsec1-dev 程式庫新增至開發 PROD 映像檔,並將 libxmlsec1 程式庫新增至執行階段 PROD 映像檔,因為 python3-saml 程式庫需要它。

    • 映像檔在 2.8.0 中基於 Debian Bookworm,而不是 Debian Bullseye。這可能會在建置自訂映像檔時造成一些問題。建議您確保您的系統層級相依性適用於 Debian Bookworm。雖然 Airflow 2.8.0 的所有參考映像檔都是在 Debian Bookworm 上建置的,但仍然可以在 2.8.0 中建置已棄用的自訂 Debian Bullseye 基底映像檔,方法是遵循

    • 預設情況下,映像檔現在已安裝 “MariaDB” 用戶端。先前的映像檔已安裝 “MySQL” 用戶端。MariaDB 用戶端是 “MySQL” 用戶端的直接替代品,並且與 MySQL 相容。對於在其映像檔中使用 MySQL 用戶端的使用者來說,這可能是一個破壞性變更,但這些應該是非常特定的情況,絕大多數使用者不應看到任何差異。使用者仍然可以透過設定 INSTALL_MYSQL_CLIENT_TYPE=mysql 建置引數並建置自訂 X86 映像檔來使用 MySQL 用戶端。ARM 映像檔始終使用 MariaDB 用戶端,此引數將被忽略。“mysql” apt 儲存庫已從 /etc/apt/sources.list.d/ 中移除,如果您想在擴充映像檔時從此儲存庫安裝任何內容,您需要在您的 Dockerfile 中手動新增正確的金鑰和儲存庫,方法是遵循 MySQL APT 儲存庫使用快速指南 中的說明。

Airflow 2.7

  • 2.7.3

    • 新增實驗性功能,用於在透過 INSTALL_MYSQL_CLIENT_TYPE 建置引數建置自訂映像檔期間選取 MySQL 用戶端程式庫的類型。mysql 用於從 Oracle APT 儲存庫 安裝 MySQL 用戶端程式庫,mariadb 用於從 MariaDB 儲存庫 安裝 MariaDB 用戶端程式庫。MySQL 用戶端程式庫的選取僅在 AMD64 (x86_64) 上可用,對於 ARM docker 映像檔,它將始終安裝 MariaDB 用戶端。

    • 映像檔中的 Docker CLI 版本已升級至 24.0.6 版本。

    • 已啟用本機建置的 PIP 快取,以加速本機自訂映像檔建置

  • 2.7.0

    • 截至目前,Python 社群已不再支援 Python 3.7。因此,要使用 Airflow 2.7.0,您必須確保您的 Python 版本為 3.8、3.9、3.10 或 3.11。

Airflow 2.6

  • 2.6.3

    • libgeos-dev 程式庫新增至執行階段 PROD 映像檔,因為 ARM 映像檔上的 BigQuery 程式庫需要它

  • 2.6.0

    • 預設安裝 Snowflake 提供者

    • ARM 實驗性映像檔新增了透過 MariaDB 用戶端程式庫對 MySQL 的支援。

Airflow 2.5

  • 2.5.1

    • ARM 實驗性映像檔新增了對 MSSQL 的支援

  • 2.5.0

    • docker CLI 二進位檔現在預設新增至映像檔(在 PATH 上可用)。使用的是 20.10.9 版本。

Airflow 2.4

  • 2.4.0

    • 當您透過 ADDITIONAL_PIP_INSTALL_FLAGS 建置引數建置映像檔時,您可以指定其他 pip install 標誌。

    • 已移除對 Debian Buster 的支援,包括建置自訂映像檔的可能性,因為 Debian Buster 已達到生命週期終止。

Airflow 2.3

  • 2.3.0

    • Airflow 2.3 Dockerfile 現在針對快取和 “獨立” 進行了更好的最佳化,這表示您可以將 Dockerfile 複製到任何資料夾並開始建置自訂映像檔。但是,這需要 Buildkit 建置映像檔,因為我們開始使用僅在 Buildkit 中可用的功能。這可以透過將 DOCKER_BUILDKIT=1 設定為環境變數,或透過安裝 buildx 外掛程式 並執行 docker buildx build 命令來完成。

    • 透過 MariaDB 用戶端程式庫在 ARM 上實驗性地支援 MySQL

    • 新增 Python 3.10 支援

    • 切換到基於 Debian Bullseye 的映像檔。Debian Buster 已棄用,僅適用於自訂映像檔建置。

    • 新增多平台支援 (AMD64/ARM64) 以容納 MacOS M1 使用者

    • 統一了控制是否從內容檔案安裝套件和 Airflow 的建置參數

    • 已移除 INSTALL_FROM_PYPI 引數 - 現在會自動偵測。

    • INSTALL_FROM_DOCKER_CONTEXT_FILES 引數已變更為 INSTALL_PACKAGES_FROM_CONTEXT

Airflow 2.2

  • 2.2.4 * 新增對 .piprcpip.conf 自訂的支援 * 新增 ArtifactHub 標籤以更好地發現映像檔 * 將預設 Python 映像檔更新為 3.7 * 使用 Buildkit 建置映像檔(可選) * 修正 Azure 上使用 文字 檔案 忙碌中 錯誤建置映像檔的問題

  • 2.2.3 * 無變更

  • 2.2.2 * 無變更

  • 2.2.1 * 解決 libstdcpp TLS 錯誤的問題

  • 2.2.0 * 從 Airflow 映像檔中移除 AIRFLOW_GID (5000)(對於使用它的使用者來說,可能是破壞性變更) * 為快速入門 docker compose 新增警告 * 修正 celery worker 的暖關機(訊號傳播) * 將 Oauth 程式庫新增至 PROD 映像檔 * 新增 Python 3.9 支援

Airflow 2.1

  • MySQL 在 2022 年 2 月 17 日變更了金鑰以簽署其套件。這導致所有發布的映像檔在擴充時失敗。因此,在 2021 年 2 月 18 日,我們重新發布了所有 2.22.1 映像檔,其中包含具有新簽署金鑰的最新版本 Dockerfile

    由於此原因,某些 2.1 映像檔的行為發生了細微的變更(更多詳細資訊如下)詳細的 issue here

注意

以下變更在 2022 年 2 月 18 日映像檔重新整理之前有效。由於所有映像檔都在 2 月 18 日使用與 2.1.4 相同的 Dockerfile 重新整理,因此變更 2.1.1 -> 2.1.3 實際上已應用於 2.1.* 系列中的所有映像檔。重新整理的映像檔也新增了這些修正程式

  • 在 2022 年 2 月 18 日重新整理的所有 2.1.* 映像檔版本都應用了這些修正程式: * 修正 Azure 上使用 文字 檔案 忙碌中 錯誤建置映像檔的問題 * 解決 libstdcpp TLS 錯誤的問題 * 從 Airflow 映像檔中移除 AIRFLOW_GID (5000)(對於使用它的使用者來說,可能是破壞性變更) * 為快速入門 docker compose 新增警告 * 將 Oauth 程式庫新增至 PROD 映像檔

原始映像檔變更日誌(在 2022 年 2 月 18 日重新整理之前)

  • 2.1.4
    • 解決 libstdcpp TLS 錯誤的問題

    • 修正了連線 URL 中連接埠號碼的偵測

    • 改善快速入門-docker compose 的警告

    • 修正 celery worker 的暖關機(訊號傳播)

  • 2.1.3
    • 修正了自動建立使用者的功能,以使用非棄用的 create user 而不是 user_create

    • 移除等待 celery 後端以用於 workerflower 命令,而不是僅用於 schedulercelery

    • 如果請求升級,則從 Airflow 1.10 中移除已棄用的 airflow upgradedb 命令

    • 新增 Python 3.9 支援

  • 2.1.2
    • 無變更

  • 2.1.1
    • 修正缺少預設命令的失敗問題(在未傳遞任何命令時失敗)

    • 新增 _PIP_ADDITIONAL_REQUIREMENTS 開發功能

  • 2.1.0
    • 取消設定預設 PIP_USER 變數 - 這導致 PythonVirtualEnv 失敗

Airflow 2.0

  • MySQL 在 2022 年 2 月 17 日變更了金鑰以簽署其套件。這導致所有發布的映像檔在擴充時失敗。因此,在 2021 年 2 月 18 日,我們重新發布了所有 2.22.1 映像檔,其中包含具有新簽署金鑰的最新版本 Dockerfile

    由於此原因,2.0.2 映像檔的行為沒有變更。詳細的 issue here 。僅重新產生了 2.0.2 映像檔,因為 2.0.1 和 2.0.0 版本很少使用,並且不太可能有人想要擴充這些映像檔。擴充 2.0.1 和 2.0.0 映像檔將導致 “金鑰遺失” 失敗。

  • 2.0.2
    • root 使用者設定正確的 PYTHONPATH。允許以 root 身分執行映像檔

    • 如果已棄用的 5000 群組 ID 用於 airflow 使用者執行映像檔時發出警告(對於 OpenShift 相容性,應為 0)。如果群組 5000 與任何其他使用者一起使用時失敗(無論如何它都無法運作,但會出現難以理解的錯誤)

    • 預設將 umask 設定為 002,以便您實際上可以變更用於執行映像檔的使用者 ID(OpenShift 相容性所需)

    • 如果 CONNECTION_CHECK_MAX_COUNT 等於 0,則略過檢查資料庫和 celery 後端

  • 2.0.1
    • 檢查資料庫可用性時,避免反向 IP 查詢。這有助於解決設定錯誤的 docker 引擎上的長時間延遲問題

    • 新增自動偵測 redis 和 amqp broker 連接埠

    • 修正了 URL 中所有使用者/密碼組合的偵測 - 有助於自動偵測連接埠和測試連線能力

    • 新增在進入映像檔時自動建立管理員使用者的可能性

    • 當使用與 airflow 不同的使用者時,自動建立系統使用者。OpenShift 相容性所需

    • 如果指定為參數,則允許 exec 至 bashpython

    • 如果 airflow 命令指定為 run 命令的第一個參數,則移除該命令

  • 2.0.0
    • 基於 Debian Buster 的映像檔的初始版本

發布映像檔後的變更

有時,我們的映像檔需要使用較新的 Dockerfiles 或約束重新產生。當發現問題或我們的相依性發布了破壞性變更,導致已發布的映像檔失效,並且重新產生映像檔使其再次可用時,就會發生這種情況。雖然我們不能保證在這種情況下 100% 向後相容性,但我們至少在此處記錄下來,以便受影響的使用者可以找到變更的原因。

日期

受影響的映像檔

可能具有破壞性的變更

原因

拉取請求/Issue 的連結

2024 年 8 月 2 日

2.9.3

  • apache-airflow-providers-fab 從 1.2.1 升級到 1.2.2

FAB 提供者登出在 2.9.3 中無法運作

https://github.com/apache/airflow/issues/40922

2024 年 3 月 12 日

2.8.3

  • 映像檔已使用新的相依性重新整理(pandas < 2.2 和 SMTP 提供者 1.6.1

這兩個相依性都導致了破壞性變更

https://github.com/apache/airflow/pull/37748 https://github.com/apache/airflow/pull/37701

2023 年 12 月 16 日

所有 2..*

  • 已移除 AIRFLOW_GID 500

  • MySQL apt 儲存庫金鑰已變更。

在金鑰過期慘敗後,MySQL 儲存庫已移除

https://github.com/apache/airflow/issues/36231

2022 年 6 月 17 日

2.2.5

2.3.0-2.3.2

  • Authlib 程式庫從 1.0.1 降級到 0.15.5 版本

Flask App Builder 與 Authlib >= 1.0.0 不相容

https://github.com/apache/airflow/pull/24516

2022 年 1 月 18 日

所有 2.2.*, 2.1.*

  • 已移除 AIRFLOW_GID 500

  • MySQL apt 儲存庫金鑰已變更。

MySQL 在 2022 年 1 月 17 日變更了金鑰以簽署其套件

https://github.com/apache/airflow/pull/20912

此條目是否有幫助?