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/airflow
或apache/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.8
和apache/airflow:slim-2.9.0-python-3.8
映像檔,因此雖然此變更可能具有破壞性,但切換到先前的行為非常容易。
PIP_USER
標誌已移除,並由指向~/.local
的VIRTUAL_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
將
libxmlsec1
和libxmlsec1-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 * 新增對
.piprc
和pip.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.2
和2.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 後端以用於
worker
和flower
命令,而不是僅用於scheduler
和celery
如果請求升級,則從 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.2
和2.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 至
bash
或python
如果
airflow
命令指定為run
命令的第一個參數,則移除該命令
- 2.0.0
基於 Debian Buster 的映像檔的初始版本
發布映像檔後的變更¶
有時,我們的映像檔需要使用較新的 Dockerfiles
或約束重新產生。當發現問題或我們的相依性發布了破壞性變更,導致已發布的映像檔失效,並且重新產生映像檔使其再次可用時,就會發生這種情況。雖然我們不能保證在這種情況下 100% 向後相容性,但我們至少在此處記錄下來,以便受影響的使用者可以找到變更的原因。
日期 |
受影響的映像檔 |
可能具有破壞性的變更 |
原因 |
拉取請求/Issue 的連結 |
---|---|---|---|---|
2024 年 8 月 2 日 |
2.9.3 |
|
FAB 提供者登出在 2.9.3 中無法運作 |
|
2024 年 3 月 12 日 |
2.8.3 |
|
這兩個相依性都導致了破壞性變更 |
https://github.com/apache/airflow/pull/37748 https://github.com/apache/airflow/pull/37701 |
2023 年 12 月 16 日 |
所有 2..* |
|
在金鑰過期慘敗後,MySQL 儲存庫已移除 |
|
2022 年 6 月 17 日 |
2.2.5 2.3.0-2.3.2 |
|
Flask App Builder 與 Authlib >= 1.0.0 不相容 |
|
2022 年 1 月 18 日 |
所有 2.2.*, 2.1.* |
|
MySQL 在 2022 年 1 月 17 日變更了金鑰以簽署其套件 |