Я пытался добавить поддержку для вызова docker build
как docker buildx build
, но я боюсь, что это может быть немного сложнее, чем это
Я намерен добавить такие параметры:
Затем мы можем кэшировать слои сборки Docker более эффективным способом. В любом случае параметры --cache-to
и --cache-from
доступны только в Docker Buildx, как и многие другие параметры, которые я, возможно, хотел бы использовать.
В прошлом я успешно включал тома кеша для сборщика внутри Dockerfile, так что изменения в Gemfile и Gemfile.lock не приводили к полному пересчету зависимостей времени сборки образа, а вместо этого строились из кеша, чтобы были пересчитаны только новые зависимости.
Хотя это, очевидно, нишевая оптимизация, есть и другие более распространенные варианты использования, с которыми можно хорошо справиться только с помощью buildx. ИМХО, набор инструментов buildkit становится довольно стандартным. Я был бы рад, если бы можно было вызывать сборку Kuby таким образом, чтобы использовать buildx!
Я мог бы попробовать реализовать это позже, это может быть проще сейчас, когда 0.15.0 полностью выпущен. Тем временем есть работающий пример GitHub Actions, который находится в стадии разработки, но в настоящее время выглядит неплохо: https://github.com/kingdonb/kuby_test .
С правильно настроенным кэшированием в этом последнем месте и несколькими другими изменениями, я думаю, что это почти готово пометить и сделать из него пример для вклада обратно в kuby-core или жить где-нибудь в проекте getkuby 👍
Привет!
Можно использовать buildx прямо сейчас, если вы установите его как сборщик по умолчанию .
Вот пример действия Github, использующего buildx и его возможности кэширования: https://github.com/anycable/anycable_rails_demo/pull/25/files#diff -28802fbf11c83a2eee09623fb192785e7ca92a3f40602a517c011b947a1822d3R28-R44.
Я просто искал что-то вроде флага --only
, так как у меня были проблемы с настройкой кэширования! У меня возникла идея, что мне нужно разделить области для каждого типа сборки, как я вижу, вы сделали здесь.
Большое спасибо за полезные ссылки 👍 Теперь я слежу за ними, чтобы увидеть, помогут ли они мне пересечь линию!
Мне также определенно не хватало функции по умолчанию setup-buildx-action ( install: true
)
Кажется, теперь это работает! Я только что видел, как сборка образа приложения была завершена менее чем за 10 секунд. Есть и другие проблемы, которые у меня есть сейчас, возможно, регрессия, которую я обнаружил, когда RAILS_MASTER_KEY не экспортируется должным образом, но я собираюсь пойти и прочитать источник, чтобы выяснить это сейчас.
Если я использую install: true
как в этом коммите, то метод build
из lib/kuby/docker/cli.rb
вызывает buildx
, и я могу передавать конструкции buildx, такие как --cache-to
после --
, чтобы получить их в массиве *docker-args
👍, чтобы это можно было закрыть, за исключением того, что kuby-core может документировать, как его можно использовать с buildx, это строго не проблема куби
С примером в:
https://github.com/kingdonb/kuby_test/commit/d74bf51e04253359b0d54aae7ddd6723ea6fd41d#diff -e2ad06bfd6b3aefc2d5f4fe8f60e0015b16947abc16764adef02e4339ac07a42R17-R20
Я могу использовать buildx, поэтому этот вопрос можно закрыть.
Это действительно круто, спасибо, что разобрались с buildx! У меня сложилось впечатление, что вы можете установить переменную среды, и она будет Just Work™, это то, что делает это действие docker/setup-buildx-action@v1
? Кажется, что buildx поставляется с Docker Desktop и более новыми версиями, установленными через пакеты deb/rpm, поэтому мне интересно, может ли Kuby просто использовать его по умолчанию. Однако, если это настраивается с помощью env var, может быть, вызов docker buildx build
не нужен? Может быть, Kuby сможет обнаружить это и вернуться к нормальному docker build
?
Да, это возможно (и именно это делает install: true
в GitHub Action): https://docs.docker.com/buildx/working-with-buildx/#set -buildx-as-the-default- строитель
Хорошо, если docker build
— это просто псевдоним для docker buildx
, то я не вижу необходимости в том, чтобы Kuby делал что-то особенное. Пользователь должен сам настроить конструктор, который ему нужен.
Самый полезный комментарий
Хорошо, если
docker build
— это просто псевдоним дляdocker buildx
, то я не вижу необходимости в том, чтобы Kuby делал что-то особенное. Пользователь должен сам настроить конструктор, который ему нужен.