TGViewer
Админим с Буквой Админим с Буквой @bykvaadm · 6.42K subscribers
Post #2750 943
Админим с Буквой Использование buildx со встроенным эмулятором Коллега написал небольшую статью по его ресёрчу и реализации мультиарч сборки докер контейнеров, с его согласия публикую. Как работает BuildKit имеет встроенный механизм QEMU-эмуляции, который срабатывает только…
Taskfile — пример локального запуска

images/buildkitd.toml — конфиг BuildKit-демона, нужен docker-container builder'у для доверия корпоративным TLS-сертификатам registry. Копируется внутрь builder-контейнера только при его создании, поэтому при изменении сертификатов builder нужно пересоздавать (buildx rm + buildx create).

# images/buildkitd.toml
[registry."registry.example.com"]
ca = ["/etc/ssl/certs/ca-certificates.crt"]

[registry."mirror.example.com"]
ca = ["/etc/ssl/certs/ca-certificates.crt"]


# Taskfile.yml
---
version: "3"

vars:
PLATFORMS: '{{ .PLATFORMS | default "linux/amd64" }}'

tasks:
build:
desc: "Build image"
cmds:
- task: build-docker

buildx-setup:
desc: "Ensure buildx builder is ready (embedded BuildKit QEMU, no host binfmt_misc)"
run: once
cmds:
- docker buildx rm multiarch >/dev/null 2>&1 || true
- |
docker buildx create --name multiarch --driver docker-container \
--buildkitd-config {{ .WORKPATH }}/images/buildkitd.toml --use
- docker buildx inspect --bootstrap

build-docker:
desc: "Build all alpine docker images via bake"
deps:
- buildx-setup
cmds:
- echo "Build all docker images for platforms {{ .PLATFORMS }}:"
- |
set -e
OUT_MODE="--load"
[ -n "${CI:-}" ] && OUT_MODE="--push"

case "{{ .PLATFORMS }}" in
*,*)
if [ "$OUT_MODE" = "--load" ]; then
echo "Error: multi-platform build requires --push (CI only)." >&2
exit 1
fi
;;
esac

TAG={{ .TAG }} \
ARTIFACT_VERSION={{ .ARTIFACT_VERSION }} \
CI_REGISTRY_IMAGE={{ .CI_REGISTRY_IMAGE }} \
PROXY="${PROXY}" \
PLATFORMS={{ .PLATFORMS }} \
docker buildx bake --allow="fs.read=${HOME}/.netrc" \
-f {{ .WORKPATH }}/images/docker-bake.hcl $OUT_MODE


Пример локального запуска:

# Одна платформа (по умолчанию amd64), результат — в локальном docker images
task build

# Кросс-сборка под arm64, без запуска — только собрать и проверить, что Dockerfile валиден
task build PLATFORMS=linux/arm64

# Мультиарч — требует push, локально без CI-переменной завершится с ошибкой (см. логику OUT_MODE)
task build PLATFORMS=linux/amd64,linux/arm64 # упадёт локально без CI=true — так и задумано


.gitlab-ci.yml

# .gitlab-ci.yml
build-multiarch:
stage: build
image: registry.example.com/runner:${RUNNER_VERSION}
tags:
- dind-shared
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
before_script:
- docker info
- docker login -u "$USER" -p "$PASSWORD" "<REGISTRYURL>"
script:
- task build PLATFORMS=linux/amd64,linux/arm64
  • ❤ 1
  • 🤔 1
  • 🤨 1
More from @bykvaadm
  1. Sep 24, 2026Свайбкодил docker с таким статическим systemd чтобы поиграться https://hub.docker.com/r/by…
  2. Sep 24, 2026А вот это в целом интересно (было бы, если бы вышло ДО облачного коворка у клода)
  3. Sep 24, 2026Вообще есть несколько интересных нововведений: 1) будто бы делаются какие-то шаги в сторон…
  4. Sep 24, 2026Systemd 262 выпущен с новыми функциями Выпущена версия systemd 262, включающая новые возмо…
  5. Sep 23, 2026Использование buildx со встроенным эмулятором Коллега написал небольшую статью по его ресё…
  6. Sep 23, 2026https://market.cnews.ru/news/top/2026-09-22_oblachnyj_alyans_yandeksa чота там опять воду…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →