fix(compose): устранена гонка сборки общих образов
- Зачем: - make up иногда падал, когда несколько служб параллельно экспортировали один тег образа. - Что: - сборка образов Airflow и Superset закреплена за службами инициализации. - зависимые службы только используют готовый образ, решение описано в ADR 0001. - Проверка: - make config-test. - docker compose --progress plain build superset superset-init airflow-scheduler airflow-init. - два запуска make up прошли экспорт трёх уникальных тегов без image already exists.
This commit is contained in:
1 parent
5946175efa
commit
1f203c974d
2 files changed
+14
-4
No files matched your search
+7
-4
@@ -50,8 +50,6 @@ x-world-starting-days: &world-starting-days "8"
|
|||||||
|
|
||||||
x-airflow-common: &airflow-common
|
x-airflow-common: &airflow-common
|
||||||
image: clickstream-airflow:local
|
image: clickstream-airflow:local
|
||||||
build:
|
|
||||||
context: ./infra/airflow
|
|
||||||
environment:
|
environment:
|
||||||
AIRFLOW__CORE__EXECUTOR: LocalExecutor
|
AIRFLOW__CORE__EXECUTOR: LocalExecutor
|
||||||
AIRFLOW__CORE__PARALLELISM: "4"
|
AIRFLOW__CORE__PARALLELISM: "4"
|
||||||
@@ -105,8 +103,6 @@ x-generator-common: &generator-common
|
|||||||
|
|
||||||
x-superset-common: &superset-common
|
x-superset-common: &superset-common
|
||||||
image: clickstream-superset:local
|
image: clickstream-superset:local
|
||||||
build:
|
|
||||||
context: ./infra/superset
|
|
||||||
environment:
|
environment:
|
||||||
SUPERSET_CONFIG_PATH: /app/pythonpath/superset_config.py
|
SUPERSET_CONFIG_PATH: /app/pythonpath/superset_config.py
|
||||||
SUPERSET_SECRET_KEY: ${SUPERSET_SECRET_KEY:?Скопируйте .env.example в .env}
|
SUPERSET_SECRET_KEY: ${SUPERSET_SECRET_KEY:?Скопируйте .env.example в .env}
|
||||||
@@ -257,6 +253,10 @@ services:
|
|||||||
|
|
||||||
airflow-init:
|
airflow-init:
|
||||||
<<: *airflow-common
|
<<: *airflow-common
|
||||||
|
# Общий образ собирает один владелец. Остальные службы зависят от init и
|
||||||
|
# не запускают параллельный экспорт того же тега через Buildx.
|
||||||
|
build:
|
||||||
|
context: ./infra/airflow
|
||||||
user: "0:0"
|
user: "0:0"
|
||||||
restart: "no"
|
restart: "no"
|
||||||
depends_on:
|
depends_on:
|
||||||
@@ -340,6 +340,9 @@ services:
|
|||||||
|
|
||||||
superset-init:
|
superset-init:
|
||||||
<<: *superset-common
|
<<: *superset-common
|
||||||
|
# Superset использует тот же образ после успешной подготовки.
|
||||||
|
build:
|
||||||
|
context: ./infra/superset
|
||||||
restart: "no"
|
restart: "no"
|
||||||
healthcheck:
|
healthcheck:
|
||||||
disable: true
|
disable: true
|
||||||
|
|||||||
@@ -16,6 +16,13 @@
|
|||||||
возвращает единицу — поведение проверено при исполнении #37. Зависимость
|
возвращает единицу — поведение проверено при исполнении #37. Зависимость
|
||||||
включает результат подготовки в общий граф ожидания.
|
включает результат подготовки в общий граф ожидания.
|
||||||
|
|
||||||
|
Каждый общий локальный образ собирает одна служба: `airflow-init` владеет
|
||||||
|
сборкой образа Airflow, `superset-init` — образа Superset. Зависимые процессы
|
||||||
|
только используют готовый образ. `docker compose up --build` собирает образы
|
||||||
|
до запуска контейнеров; повторять `build` у каждого процесса не нужно, а
|
||||||
|
Buildx 0.30.1 при параллельном экспорте одного тега иногда отвечает
|
||||||
|
`image already exists`.
|
||||||
|
|
||||||
Для входа выбран SimpleAuthManager. У него нет команды создания пользователя,
|
Для входа выбран SimpleAuthManager. У него нет команды создания пользователя,
|
||||||
поэтому `airflow-init` записывает пароль администратора из окружения в
|
поэтому `airflow-init` записывает пароль администратора из окружения в
|
||||||
JSON-файл отдельного тома `airflow_auth`. Новый именованный том принадлежит
|
JSON-файл отдельного тома `airflow_auth`. Новый именованный том принадлежит
|
||||||
|
|||||||
Reference in new issue
Block a user