From 1f203c974d643f6460aa58430014e5984b302aef Mon Sep 17 00:00:00 2001 From: Dmitry Dementiev Date: Fri, 28 Aug 2026 12:53:33 +0300 Subject: [PATCH 1/2] =?UTF-8?q?fix(compose):=20=D1=83=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B5=D0=BD=D0=B0=20=D0=B3=D0=BE=D0=BD=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8=20=D0=BE=D0=B1=D1=89?= =?UTF-8?q?=D0=B8=D1=85=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - 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. --- compose.yaml | 11 +++++++---- docs/adr/0001-stand-services.md | 7 +++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/compose.yaml b/compose.yaml index 60a07de..73940ef 100644 --- a/compose.yaml +++ b/compose.yaml @@ -50,8 +50,6 @@ x-world-starting-days: &world-starting-days "8" x-airflow-common: &airflow-common image: clickstream-airflow:local - build: - context: ./infra/airflow environment: AIRFLOW__CORE__EXECUTOR: LocalExecutor AIRFLOW__CORE__PARALLELISM: "4" @@ -105,8 +103,6 @@ x-generator-common: &generator-common x-superset-common: &superset-common image: clickstream-superset:local - build: - context: ./infra/superset environment: SUPERSET_CONFIG_PATH: /app/pythonpath/superset_config.py SUPERSET_SECRET_KEY: ${SUPERSET_SECRET_KEY:?Скопируйте .env.example в .env} @@ -257,6 +253,10 @@ services: airflow-init: <<: *airflow-common + # Общий образ собирает один владелец. Остальные службы зависят от init и + # не запускают параллельный экспорт того же тега через Buildx. + build: + context: ./infra/airflow user: "0:0" restart: "no" depends_on: @@ -340,6 +340,9 @@ services: superset-init: <<: *superset-common + # Superset использует тот же образ после успешной подготовки. + build: + context: ./infra/superset restart: "no" healthcheck: disable: true diff --git a/docs/adr/0001-stand-services.md b/docs/adr/0001-stand-services.md index 3a92b5c..7fdc90c 100644 --- a/docs/adr/0001-stand-services.md +++ b/docs/adr/0001-stand-services.md @@ -16,6 +16,13 @@ возвращает единицу — поведение проверено при исполнении #37. Зависимость включает результат подготовки в общий граф ожидания. +Каждый общий локальный образ собирает одна служба: `airflow-init` владеет +сборкой образа Airflow, `superset-init` — образа Superset. Зависимые процессы +только используют готовый образ. `docker compose up --build` собирает образы +до запуска контейнеров; повторять `build` у каждого процесса не нужно, а +Buildx 0.30.1 при параллельном экспорте одного тега иногда отвечает +`image already exists`. + Для входа выбран SimpleAuthManager. У него нет команды создания пользователя, поэтому `airflow-init` записывает пароль администратора из окружения в JSON-файл отдельного тома `airflow_auth`. Новый именованный том принадлежит -- 2.54.0 From cd4f9c55f591a6b1a36beba8dce4cb0a4e8fb6ad Mon Sep 17 00:00:00 2001 From: Dmitry Dementiev Date: Fri, 28 Aug 2026 13:03:47 +0300 Subject: [PATCH 2/2] =?UTF-8?q?docs(compose):=20=D0=BE=D0=B1=D1=8A=D1=8F?= =?UTF-8?q?=D1=81=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=B1=D1=89=D0=B5?= =?UTF-8?q?=D0=B9=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8=20=D1=81=D0=BE?= =?UTF-8?q?=D0=BA=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - ADR и комментарии повторяли устройство Compose и говорили о сборке безлично. - Что: - в Compose оставлен один указатель на причину решения. - ADR хранит правило общей сборки и объясняет гонку Buildx. - Проверка: - make config-test. - git diff --check. --- compose.yaml | 5 ++--- docs/adr/0001-stand-services.md | 10 +++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/compose.yaml b/compose.yaml index 73940ef..885699d 100644 --- a/compose.yaml +++ b/compose.yaml @@ -48,6 +48,8 @@ x-kafka-target: &kafka-target x-world-starting-days: &world-starting-days "8" +# Общие образы Airflow и Superset собирают службы инициализации. Причина +# отдельного build: ADR 0001. x-airflow-common: &airflow-common image: clickstream-airflow:local environment: @@ -253,8 +255,6 @@ services: airflow-init: <<: *airflow-common - # Общий образ собирает один владелец. Остальные службы зависят от init и - # не запускают параллельный экспорт того же тега через Buildx. build: context: ./infra/airflow user: "0:0" @@ -340,7 +340,6 @@ services: superset-init: <<: *superset-common - # Superset использует тот же образ после успешной подготовки. build: context: ./infra/superset restart: "no" diff --git a/docs/adr/0001-stand-services.md b/docs/adr/0001-stand-services.md index 7fdc90c..9282dc0 100644 --- a/docs/adr/0001-stand-services.md +++ b/docs/adr/0001-stand-services.md @@ -16,11 +16,11 @@ возвращает единицу — поведение проверено при исполнении #37. Зависимость включает результат подготовки в общий граф ожидания. -Каждый общий локальный образ собирает одна служба: `airflow-init` владеет -сборкой образа Airflow, `superset-init` — образа Superset. Зависимые процессы -только используют готовый образ. `docker compose up --build` собирает образы -до запуска контейнеров; повторять `build` у каждого процесса не нужно, а -Buildx 0.30.1 при параллельном экспорте одного тега иногда отвечает +У каждого общего локального образа один блок `build`. Он находится у службы +инициализации. Остальные службы зависят от неё и используют тот же `image`. +`docker compose up --build` завершает сборку до запуска контейнеров, поэтому +одного блока достаточно. В Buildx 0.30.1 одинаковые блоки у нескольких служб +запускают параллельный экспорт одного тега. Иногда сборка завершается ошибкой `image already exists`. Для входа выбран SimpleAuthManager. У него нет команды создания пользователя, -- 2.54.0