Kuby-core: buildx ์‚ฌ์šฉ

์— ๋งŒ๋“  2021๋…„ 12์›” 13์ผ  ยท  6์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: getkuby/kuby-core

docker build ๋ฅผ docker buildx build ๋กœ ํ˜ธ์ถœํ•˜๋Š” ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ๊ทธ๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์˜๋„๋Š” ๋‹ค์Œ ์œ ํ˜•์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

https://github.com/fluxcd/image-reflector-controller/blob/62c06ea58cd14072fde2c9ada7c6970dedf580e5/.github/workflows/build.yaml#L57 -L59

๊ทธ๋Ÿฐ ๋‹ค์Œ Docker ๋นŒ๋“œ ๋ ˆ์ด์–ด๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์บ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  --cache-to ๋ฐ --cache-from ์˜ต์…˜์€ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๋‹ค๋ฅธ ๋งŽ์€ ์˜ต์…˜๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Docker Buildx์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณผ๊ฑฐ์— ์ €๋Š” Dockerfile ๋‚ด๋ถ€์˜ ๋ฒˆ๋“ค๋Ÿฌ์— ๋Œ€ํ•œ ์บ์‹œ ๋ณผ๋ฅจ์„ ์„ฑ๊ณต์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•˜์—ฌ Gemfile ๋ฐ Gemfile.lock์„ ๋ณ€๊ฒฝํ•ด๋„ ์ด๋ฏธ์ง€์˜ ๋นŒ๋“œ ์‹œ๊ฐ„ ์ข…์†์„ฑ์„ ์™„์ „ํžˆ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  ์บ์‹œ์—์„œ ๋นŒ๋“œํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ข…์†์„ฑ๋งŒ ๋‹ค์‹œ ๊ณ„์‚ฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ํ‹ˆ์ƒˆ ์ตœ์ ํ™”์ด์ง€๋งŒ buildx์—์„œ๋งŒ ์ž˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œํ‚ท ๋„๊ตฌ ์„ธํŠธ๋Š” ์ด์ œ IMHO์—์„œ ๊ฝค ํ‘œ์ค€์ด ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. buildx๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ Kuby ๋นŒ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค!

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‚˜์ค‘์— ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ์‹œ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 0.15.0์ด ๊ฒฌ๊ณ ํ•˜๊ฒŒ ๋ฆด๋ฆฌ์Šค ๋œ ์ง€๊ธˆ์€ ๋” ์‰ฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œํŽธ, GitHub Actions์˜ ์ž‘๋™ํ•˜๋Š” ์˜ˆ๊ฐ€ WIP์ด์ง€๋งŒ ํ˜„์žฌ ๋งค์šฐ ์ž˜ ๋ณด์ž…๋‹ˆ๋‹ค. https://github.com/kingdonb/kuby_test

์ด ๋งˆ์ง€๋ง‰ ์œ„์น˜์—์„œ ์บ์‹ฑ์„ ์ ์ ˆํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๊ณ  ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋ฉด kuby-core์— ๋‹ค์‹œ ๊ธฐ์—ฌํ•˜๊ฑฐ๋‚˜ getkuby ํ”„๋กœ์ ํŠธ์˜ ์–ด๋”˜๊ฐ€์— ์‚ด๊ธฐ ์œ„ํ•ด ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๊ณ  ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค ์ค€๋น„๊ฐ€ ๊ฑฐ์˜ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ข‹์Šต๋‹ˆ๋‹ค. docker build ๊ฐ€ docker buildx ์˜ ๋ณ„์นญ์ผ ๊ฒฝ์šฐ Kuby๊ฐ€ ํŠน๋ณ„ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๋นŒ๋”๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  6 ๋Œ“๊ธ€

์ด๋ด!

๊ธฐ๋ณธ ๋นŒ๋” ๋กœ ์„ค์ •ํ•˜๋ฉด ์ง€๊ธˆ ๋ฐ”๋กœ buildx๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ buildx ๋ฐ ํ•ด๋‹น ์บ์‹ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” Github ์ž‘์—…์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

https://evilmartians.com/chronicles/kubing-rails-stressless-kubernetes-deployments-with-kuby#deploying -continuously-with-kuby-and-github-actions๋„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์บ์‹ฑ์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— --only ํ”Œ๋ž˜๊ทธ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์ฐพ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค! ์—ฌ๊ธฐ์—์„œ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ ๋นŒ๋“œ ์œ ํ˜•์— ๋Œ€ํ•œ ๋ฒ”์œ„๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

ํŽธ๋ฆฌํ•œ ์ฐธ์กฐ๋ฅผ ์ œ๊ณตํ•ด์ฃผ์…”์„œ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘ ์ง€๊ธˆ ํŒ”๋กœ์šฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!

setup-buildx-action( install: true )์˜ ๊ธฐ๋ณธ ๋นŒ๋” ๊ธฐ๋Šฅ๋„ ํ™•์‹คํžˆ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! ๋ฐฉ๊ธˆ 10์ดˆ ์ด๋‚ด์— ์•ฑ ์ด๋ฏธ์ง€ ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ๊ฒช๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ RAILS_MASTER_KEY๊ฐ€ ์ œ๋Œ€๋กœ ๋‚ด๋ณด๋‚ด์ง€์ง€ ์•Š๋Š” ๊ณณ์—์„œ ํšŒ๊ท€๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ์†Œ์Šค๋ฅผ ์ฝ์–ด๋ณด๊ณ  ์•Œ์•„๋‚ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์ปค๋ฐ‹์—์„œ์ฒ˜๋Ÿผ install: true ์˜ build ๋ฉ”์„œ๋“œ๊ฐ€ $# buildx lib/kuby/docker/cli.rb ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  --cache-to ๊ณผ ๊ฐ™์€ buildx ๊ตฌ์„ฑ์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- ๋‹ค์Œ์— *docker-args ๋ฐฐ์—ด ๐Ÿ‘ ๋”ฐ๋ผ์„œ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, kuby-core๊ฐ€ buildx์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฌธ์„œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ kuby์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

https://github.com/kingdonb/kuby_test/commit/d74bf51e04253359b0d54aae7ddd6723ea6fd41d#diff-e2ad06bfd6b3aefc2d5f4fe8f60e0015b16947abc1

buildx๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ •๋ง ๋ฉ‹์ง‘๋‹ˆ๋‹ค. buildx ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ฐพ์•„์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ  Just Workโ„ข๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๋Š” ์ธ์ƒ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค docker/setup-buildx-action@v1 ์•ก์…˜์ด ํ•˜๋Š” ์ผ์ด ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? buildx๋Š” deb/rpm ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ด ์„ค์น˜๋œ Docker Desktop ๋ฐ ์ตœ์‹  ๋ฒ„์ „๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋ฏ€๋กœ Kuby๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. env var๋ฅผ ํ†ตํ•ด ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด docker buildx build ํ˜ธ์ถœ์ด ํ•„์š”ํ•˜์ง€ ์•Š์„๊นŒ์š”? Kuby๊ฐ€ ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์ •์ƒ docker build ์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค(GitHub Action์˜ install: true ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค): https://docs.docker.com/buildx/working-with-buildx/#set -buildx-as-the-default- ๊ฑด์ถ•์—…์ž

์ข‹์Šต๋‹ˆ๋‹ค. docker build ๊ฐ€ docker buildx ์˜ ๋ณ„์นญ์ผ ๊ฒฝ์šฐ Kuby๊ฐ€ ํŠน๋ณ„ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๋นŒ๋”๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰