BuildKitã¡ã³ããã«ãã£ãŠæžãããã²ã¹ãæçš¿ ãšãªãã¯ã»ã·ãã¹ã.
å šäœå
- MergeOp ãš DiffOp ã¯ã ã§ãªãªãŒã¹ããã 2 ã€ã®æ°æ©èœã§ãã ãã«ãããã v0.10.ãããã®æäœã«ããããã¡ã€ã«ã·ã¹ãã ãæ§æã (MergeOp)ãããããåå² (DiffOp) ããããšã§ã³ã³ãã㌠ã€ã¡ãŒãžãã¢ã»ã³ãã«ããªããããã£ã¹ã¯äžã®ããŒã«ã«ãšãªã¢ãŒã ã¬ãžã¹ããªã®äž¡æ¹ã§éè€ããŒã¿ã®äœæãæå°éã«æããããšãã§ããŸãã
- ããŒã¿ã®éè€ãæå°éã«æãããšããã£ãã·ã¥ã®åå©çšæ§ãåäžããå€ãã®ã¯ãŒã¯ãããŒã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã ã¢ãŒãªãŒã¢ããã¿ãŒã®1ã€ã§ããNetflixã¯ã以åã¯1æé以äžããã£ãŠããéåžžã«è€éãªãã«ãããMergeOpã䜿çšããããã«å éšããŒã«ãæŽæ°ããŠããããã3åã§å®äºãããšå ±åããŸãã ãã®ä»£ããã« ã³ããŒã®ã
- ããã«ããããã®æ°ããæäœã«ããããœãããŠã§ã¢ã®äŸåé¢ä¿ãè€é㪠DAG ã§æ§é åãããŠããããã±ãŒãžãããŒãžã£ãŒã«èŠãããã¯ãŒã¯ãããŒããBuildKit ã®ãã«ãæã«ã¯ããã«ããã©ãŒãã³ã¹ãé«ããç°¡åã«è¡šçŸã§ããããã«ãªããŸãã
- MergeOp ãš DiffOp ã¯ãä»ã® BuildKit æ©èœãšåæ§ã«ãé«ã¬ãã«ã®ããŒã«ãšã€ã³ã¿ãŒãã§ã€ã¹ã察象ãšããäœã¬ãã«ã®ããªããã£ãã§ãã ãããã¯éåžžã«æ°ãããã®ã§ããããããã®ãµããŒãã¯ãã§ã«æ¬¡ã®å Žæã«ååšããŸãã
-
- æ°ãã 'ã³ã㌠âãªã³ã¯' ãµããŒããããŠãããã©ã° ããã«ãŒãã¡ã€ã«, ãã®åã®ããã°æçš¿ã§èª¬æããããã«ããã¯ãå éšã§ MergeOp ã䜿çšããŸã
- HLB ãã㊠çåã©ã¡ããããŒãž+å·®åæäœããµããŒãããããã«ãªããŸãã
ãã®æçš¿ã§ã¯ãMergeOpãšDiffOpããœãããŠã§ã¢ã®äŸåé¢ä¿ã®ç¥èããšã³ã³ãŒãããã®ã«ã©ã®ããã«åœ¹ç«ã€ãã玹ä»ããBuildKitããã£ãã·ã¥ã®åå©çšæ§ãæå€§åããããã€ãã®è峿·±ãæ°ãããŠãŒã¹ã±ãŒã¹ãè§£ãæŸã¡ãŸãã
ãã«ããããã¯ã©ãã·ã¥ã³ãŒã¹
æ°æ©èœã«é£ã³èŸŒãåã«ãBuildKitãšLLBã®ç°¡åãªã¯ã©ãã·ã¥ã³ãŒã¹ãåè¬ããŸãããã
ãã¡ã€ã« ã·ã¹ãã DAG ãœã«ããŒ
ãã«ããããã¯åºæ¬çã« æåéå·¡åã°ã©ã (DAG) DAG å ã®åé ç¹ã 1 ã€ä»¥äžã®ãã¡ã€ã« ã·ã¹ãã ã®ã»ããã«å¯ŸããŠå®è¡ãããæäœã衚ããœã«ããŒã åé ç¹æäœã¯ãä»ã®é ç¹ã®ãã¡ã€ã« ã·ã¹ãã ãå ¥åãšããŠåãå ¥ããç¬èªã® 1 ã€ä»¥äžã®ãã¡ã€ã« ã·ã¹ãã ãåºåã§ããŸãã ãããã®å ¥åãšåºåã«ãã£ãŠãDAG ã®ãšããžãäœæãããŸãã
DAG ãè§£æããå ŽåãBuildKit ã¯ãã£ãã·ã¥ã䞊ååãããã³ãã®ä»ã®æé©åã䜿çšããŠãè§£æã® "ã¿ãŒã²ãã" é ç¹ã«ãã£ãŠåºåããããã¡ã€ã« ã·ã¹ãã ãå¯èœãªéãå¹ççã«èšç®ããŸãã å¿ èŠã«å¿ããŠãã¿ãŒã²ããé ç¹ã®çµæãããŸããŸãªæ¹æ³ (ã³ã³ãã㌠ã€ã¡ãŒãžãã¬ãžã¹ããªã«ããã·ã¥ãããªã©) ã§ãšã¯ã¹ããŒãããããã¯ã©ã€ã¢ã³ãã®ã³ã³ãã¥ãŒã¿ãŒäžã«ããŒã«ã«ã«äœæããããã£ã¬ã¯ããªãšããŠãšã¯ã¹ããŒããããã§ããŸãã
LLB DAG
DAG 㯠LLB ã®åœ¢åŒã§ BuildKit ã«æäŸãããããã¯é«ã¬ãã«ã®ãã«ã仿§ã "ã³ã³ãã€ã«" ã§ãããã®ãšããŠèšèšãããäœã¬ãã«èšèªã§ãã ããã¯ãã¢ã»ã³ããªèšèªã®ãããªåäžã®ã¿ãŒã²ããã«ã³ã³ãã€ã«å¯èœãªç°ãªãããã°ã©ãã³ã°èšèªã®æ°ãåæ ããŠããŸãã LLBã«ã³ã³ãã€ã«ãããããŒã«ãšèšèªã®äŸãããã€ã瀺ããŸãã ããã«ãŒãã¡ã€ã«, HLB, ã¢ãŒã¹ãã¡ã€ã«ãã㊠çå (倿ãã ãã¥ãŒ LLBã«)ã
éèŠãªã®ã¯ãããã«ãããBuildKitã¯ãã£ãã·ã¥ããšã¯ã¹ããŒããªã©ã®äžè¬çãªæ©èœãæé©åã«éäžã§ããããšã§ãã ããé«ãã¬ãã«ã®ããŒã«ã¯ãè»èŒªãåçºæãã代ããã«ããããã®ã¡ã«ããºã ãæŽ»çšã§ããŸãã
äŸ: Dockerfile to LLB DAG
ãŸããæ¬¡ã®ç¹ãèæ
®ããŠãã ãã ããã«ãŒãã¡ã€ã«:
ãŽã©ã³ãã:1.17-é«å±±3.15 ãŽããã«ãšã㊠å®è¡ã¯ golang.org/x/tools/gopls@latest ãã€ã³ã¹ããŒã«ããŸããŽã©ã³ãã:1.17-é«å±±3.15 ãŽã€ã³ããŒããšã㊠å®è¡ã¯ golang.org/x/tools/cmd/goimports@latest ãã€ã³ã¹ããŒã«ããŸãé«å±±ãã:3.15APKãå®è¡ãã远å --æŽæ°-ãã£ãã·ã¥ãªãã®ããªãã COPY --from=gopls /go/bin/gopls /usr/local/bin/gopls COPY --from=goimports /go/bin/goimports /usr/local/bin/goimports
ãããååŸããŠãLLB DAGã«ç°¡åã«ã³ã³ãã€ã«ã§ããŸãã

ããã§ã¯ãããã€ãã®ç°ãªãã¿ã€ãã®é ç¹ã衚瀺ãããåã¿ã€ãã¯ãã¡ã€ã«ã·ã¹ãã ãäœæãŸãã¯å€æŽããããã®ç°ãªãçš®é¡ã®æäœã衚ããŸãã
- ãœãŒã¹ãªã é ç¹ã¯ãã³ã³ããã€ã¡ãŒãžãGitãªããžããªãªã©ã®å€éšãœãŒã¹ããæ°ãããã¡ã€ã«ã·ã¹ãã ãã€ã³ããŒãããŸãã ãããã¯å ¥åãæãããéåžžã¯LLBã°ã©ãã®ãæ ¹ãã圢æããŸãã
- ãšã¯ã»ã³ãã é ç¹ã¯ãå ¥åãã¡ã€ã«ã·ã¹ãã äžã§ã³ãã³ããå®è¡ãããã¡ã€ã«ã·ã¹ãã ãšå ãããã倿ŽãåºåããŸãã ãŸããç°ãªãå Žæã«ããŠã³ããããè€æ°ã®å ¥åãã¡ã€ã«ã·ã¹ãã ãåãå ¥ãã倿Žãããåãã¡ã€ã«ã·ã¹ãã ãåå¥ã«åºåããããšãã§ããŸãã
- CopyOp é ç¹ã¯ãæå®ããããã¡ã€ã«ãšãã£ã¬ã¯ããªã®ã»ããããããå ¥åé ç¹ (ãœãŒã¹) ããå¥ã®å ¥åé ç¹ (ã¿ãŒã²ãã) ã®äžã«ã³ããŒããããã¡ã€ã«ã·ã¹ãã ãåºåããŸãã æè¡çã«ã¯ãã³ããŒã¯äžè¬ç㪠FileOp é ç¹ã®ãµãã¿ã€ãã§ãã ããŸããŸãªåºæ¬çãªãã¡ã€ã«æäœããµããŒãããŠããŸãããããããããããããã«ããã§ã¯ CopyOp ãšåŒã³ãŸãã
éèŠãªãã€ã³ã
ãããŸã§ã«åŠãã ããšã¯æ¬¡ã®ãšããã§ãã
- BuildKit ã¯ããã¡ã€ã« ã·ã¹ãã æäœã® DAG ã解決ããŸã
- BuildKit ã¯ããããã®è§£æã®çµæãã³ã³ããã€ã¡ãŒãžãªã©ãããŸããŸãªåœ¢åŒã§ãšã¯ã¹ããŒãããããšããµããŒãããŠããŸã
- LLBãéããŠãBuildKitã¯çŸåšã®ããŸããŸãªé«ã¬ãã«ã®ãã«ã仿§èšèªã®åºç€ãšãªãããšãã§ããŸã
åé¡:ç·åœ¢ã³ããŒãã§ãŒã³
å€ãã®ãã«ãã·ã¹ãã ãšèšèªãLLBã«ã³ã³ãã€ã«ããã倧ããªæåãåããŸããããMerge+DiffãŸã§ãã·ã¹ãã ã®1ã€ã®ã¯ã©ã¹ã¯ãå¿ èŠãªã ãå¹ççã«ãµããŒãããããšãå°é£ã§ããã
é©ãã¹ãããšã«ããã®ã¯ã©ã¹ã®ã·ã¹ãã ã§ã¯ããœãããŠã§ã¢ã®äŸåé¢ä¿ã衚ãããã« DAG ãå€çšããŸãã ããã«ã¯ãå€ãã®éè€ããæšç§»çãªäŸåé¢ä¿ãæã€ãœãããŠã§ã¢ãšã©ã€ãã©ãªãæ§ç¯ããŠãããŠãŒã¶ãŒãå«ãŸããŸãã ãã®ä»ã®äŸãšããŠã¯ãLinuxãã£ã¹ããªãã¥ãŒã·ã§ã³ãããã°ã©ãã³ã°èšèªã§äœ¿çšãããããã±ãŒãžãããŒãžã£ãŒãå«ãŸããŸãã
衚é¢çã«ã¯ãBuildKit 㯠DAG ã䜿çšããŠãã«ãã衚ãããããœãããŠã§ã¢äŸåé¢ä¿ã® DAG ã®ã¢ããªã³ã°ã«åé¡ããã£ãã®ã¯å¥åŠã§ãã ãããã®åé¡ãäœã§ãããã確èªããããã«ãäŸã調ã¹ãŠã¿ãŸãããã
ãã®äŸã§ã¯ã次ã®äŸåé¢ä¿ DAG ãæã€ãœãŒã¹ãããœãããŠã§ã¢ãæ§ç¯ããããšãäžå¿ã«å±éããŸãã

ãã® DAG ã¯ãŸã LLB ã§ã¯ãªãããšã«æ³šæããŠãã ããã ãã®äŸåé¢ä¿ DAG ã¯ãåé ç¹ã®ãœãããŠã§ã¢ãæ§ç¯ããããã«å¿
èŠãªãã®ã瀺ãã ãã§ãåãšããžã¯æ§ç¯æã®äŸåé¢ä¿ã§ãã ããšãã°ã ããŒã« ãã€ããªã®ã¿ãå¿
èŠ åº ãããŠã ããŒã« ãã«ãããã©ã€ãã©ãªã§ããã ã㺠ãã€ããªã®ããŒãº åº, ããŒã«ãã㊠ã㌠ã©ã€ãã©ãªã
ããã LLB DAG ã«å€æããŠã ããŒ, ããŒã«ãã㊠ã㺠ãã€ã㪠â ãã«ããããã®ãã³ã³ããã€ã¡ãŒãžãšããŠãšã¯ã¹ããŒãããŸãã ã³ã³ããã€ã¡ãŒãžã«ã¯ãããã®ãã€ããªã®ã¿ãå«ããéçã©ã€ãã©ãªãã¡ã€ã«ã®ãããªæéã®ã¿ã®äŸåé¢ä¿ãæ§ç¯ããããšã¯ã§ããŸããã
ããããããããããã«ãããã€ãã®ã·ã§ãŒãã«ããã䜿çšããŠããŸãã ãããã£ãŠã次ã®ãããªè€æ°ã®äŸåé¢ä¿ããã³ãã«ããŠããŸã ãªãã·ãŒãGCCãããã³å
éšã®ãœãŒã¹ã³ãŒã åº éçã©ã€ãã©ãªã®ã°ã«ãŒããåäžã®é ç¹ã«çµåããŸãã å®éã«ã¯ããããã®äŸåé¢ä¿ãå¥ã
ã®é ç¹éã§åå²ã§ããŸãããè€éããå¢ããŸãã
ã³ã㌠ãã§ãŒã³ã䜿çšãã DAG ã®æ§ç¯
ãŸããåã¿ãŒã²ããé ç¹ (ããŒ, ããŒã«ãã㊠ããº)ãããããã¹ãŠçµã¿åãããåã«ãåå¥ã«LLBã«å
¥ããŸãã ãããããããšã«ã foo bar åçŽãªäŸåé¢ä¿æ§é ããããŸãã

åã°ã©ãã®æçµçãªã³ããŒæäœã¯åé¢ããŸã /bin/foo ãã㊠/ãã³/ã㌠㫠æ»ãããã¯åãªã空ã®ãã¡ã€ã«ã·ã¹ãã ã§ãã éã«èšãã° ã㺠ããå°ãè€éã§ã:

ããã§ã¯ã ã㌠ãã㊠ããŒã« libs ã¯äŸåé¢ä¿ãå
±æããªããããå¥ã
ã®ã¹ãããã«çµã¿èŸŒãŸããŸãã ããã«ãããBuildKit ã¯ããããã®ãã«ãã¹ãããã䞊ååããçµæãåå¥ã«ãã£ãã·ã¥ã§ããŸãã
ãããã® ExecOp ã®çµæã¯ãCopyOp ãä»ããŠåäžã®ãã«ãäŸåé¢ä¿ã¯ããŒãžã£ã«çµåããããã¡ã€ã«ã·ã¹ãã ãäœæãããŸãã lib/ ãã£ã¬ã¯ããªã«ã¯äž¡æ¹ãå«ãŸããŠããŸã ã㌠ãã㊠ããŒã« ã©ã€ãã©ãªã
æåŸã«ããã¹ãŠã1ã€ã®LLBã°ã©ãã«çµåããŸãããã

ããã§ãè§£æã®ããã«LLBãBuildKitã«éä¿¡ããçµæãã¬ãžã¹ããªã³ã³ããã€ã¡ãŒãžãšããŠãšã¯ã¹ããŒãããããšããŸãã CopyOps ã®æåŸã®ãã§ãŒã³ããæžãåºãããç»åã®ã¬ã€ã€ãŒã«ãªããŸãã ããã¯ãã€ã¡ãŒãž ãããã§ã¹ããšå ±ã«ã¬ãžã¹ããªã«ããã·ã¥ãããŸãã
åã BuildKit ã€ã³ã¹ã¿ã³ã¹ã§è§£æãå床å®è¡ãããšãBuildKit ã®ãã£ãã·ã¥æ©èœã®ãããã§ãå®éã®äœæ¥ãäžèŠã§ããããšãããããŸãã
- è§£æäžããã³åé ç¹ã®å®è¡åã«ãBuildKit ã¯é ç¹å ¥åãæè¿å€æŽããããã©ããã確èªããŸãã ããã§ãªãå ŽåãBuildKit ã¯ãã£ãã·ã¥ãããçµæã䜿çšããåå®è¡ãåé¿ããŸãã
- çµæãã³ã³ãã㌠ã€ã¡ãŒãžãšããŠãšã¯ã¹ããŒãããå ŽåãBuildKit ã¯ããŸã ååšããªãã¬ã€ã€ãŒãã¬ãžã¹ããªã«ããã·ã¥ããã ãã§æžã¿ãŸãã ã¬ãžã¹ããªã«ã¯ä»¥åã®ãã«ãã®ã¬ã€ã€ãŒãæ¢ã«å«ãŸããŠãããããããã·ã¥ã¯å¿ èŠãããŸããã
ã«ã¹ã±ãŒããã£ãã·ã¥ã®ç¡å¹å
ããã¯ãã¹ãŠè¯ããã¥ãŒã¹ã§ãããåé¡ããããŸãã ãããã¯ã©ãããæ¥ãã®ã§ãã? ãã«ããåå®è¡ããå Žåã«äœãèµ·ããããèããŠã¿ãŸãããã ããŒã« ã©ã€ãã©ãªã®ãã«ãã ãã®å Žåãæ°ãããã©ã°ã䜿çšããŠãã«ãããŠãããšä»®å®ããŸãã
ããã§ããBuildKit ã¯ããã£ãã·ã¥ãããçµæãååŸããåã«ãLLBé ç¹ã®äŸåé¢ä¿ã倿Žããããã©ããã確èªããŸãã 倿Žã«ãã£ãŠãã£ãã·ã¥ãç¡å¹ã«ãªããåå®è¡ã匷å¶ãããåå«ã®é ç¹ã«ã«ã¹ã±ãŒããããŸãã

ããã§ã¯ããã£ãã·ã¥ç¡å¹åãããé ç¹ã â . ããã§ã®ããã€ãã®ç¡å¹åã¯å®å šã«è«ççã§ã:
- ãšã°ãŒã¯ãã£ããªãã¯ã
ããŒã«å®çŸ©ã倿Žããããããlibsããã£ãã·ã¥ã§ããŸããããã«ããã©ã°=äœãæ°ãããã®é ç¹å®çŸ©ã«è¿œå ããŸãã - ãã«ã
barãã ExecOp ã¯ãäŸåé¢ä¿ã©ã€ãã©ãªãç¡å¹ã§ãããããç¡å¹ã§ããå¿ èŠããããŸãã
äžæ¹ãLLBã®äºæããªãç¡å¹åã!?ïžã§âããŒã¯ããŸããã
- ã®ã³ããŒ
ããŒã®ãã«ãã®äžã§äŸåé¢ä¿ã®ã¯ããŒãžã£ãäœæããããã«å¿ èŠãªã©ã€ãã©ãª/ãã³/ããºã¯ç¡å¹ã«ãªããŸãã ããã¯ããã®ã³ããŒã®å®å ãããŒã«libs â ãã£ãã·ã¥äŸåé¢ä¿ãäœæããŸãã ããã¯ãç§ãã¡ãããŒãããŠããŒã«ã©ã€ãã©ãªã¯å®éã«ã¯äŸåé¢ä¿ãå ±æããŸããã CopyOp ã¯åå®è¡ããå¿ èŠããããŸãããæçµçã«ã¯ä»¥åãšåãã¬ã€ã€ãŒãäœæãããŸãã - æçµçãªç»åã¬ã€ã€ãŒãžã®ã³ããŒ
/bin/fooããåæ§ã®çç±ã§ç¡å¹ã§ãã æçµçãªã€ã¡ãŒãžã¯ãäŸåé¢ä¿ãå ±æããã³ã³ããŒãã³ãããªãå Žåã§ããCopyOps ã®ç·åœ¢ãã§ãŒã³ãšããŠæ§ç¯ãããŸãã ãã§ãŒã³ã®åŸã«æ¥ã/bin/barã®ã§/bin/fooããããã®ã«ã¹ã±ãŒãç¡å¹åã¯ããã«åœ±é¿ãäžããŸãã
ãããã®ããããªåé¡ã¯ãã³ããŒé åºãåãæ¿ããããšã§æè¡çã«ä¿®æ£ã§ããŸãã ããããããã¯ã·ããããã ãã§ã ããŒã« ããªãã®ããã®libã®ç¡å¹å ã㌠ã©ã€ãã©ãªã ãããã®äžèŠãªç¡å¹åã«ã¯ã³ã¹ããããããŸãã
- BuildKit ã¯ã³ããŒãããŒã«ã«ã§å床å®è¡ããå¿ èŠããããããæéãšãã£ã¹ã¯å®¹éãæ¶è²»ãããŸãã
- LLBã®çµæãã³ã³ããã¬ã€ã€ãŒãšããŠãšã¯ã¹ããŒãããå ŽåãBuildKitã¯åã¬ã€ã€ãŒã®å å®¹ãæ±ºå®ããããããtarballã«åå§çž®ããããã«ããæžåœã«åããŸã.ããã¯ãã¬ã€ã€ãŒã倿Žããå¿ èŠããªãå Žåã§ãçºçããéåžžã¯ä»¥åãšãŸã£ããåãã³ã³ãã³ãã«ãªããŸãã
- BuildKit ã«ã¯ãå³å¯ã«å¿ èŠãªå Žåãé€ããŠããªã¢ãŒãã¬ãžã¹ããªã¬ã€ã€ãŒãããŒã«ã«ã«ãã«ãããªãããã«ããæé©åããããŸãã ããã«ãããããŒã¿ã®ããŠã³ããŒããæå°éã«æããããŸãã ããã¯ãSourceOpã«ãã£ãŠåç §ãããç»åã¬ã€ã€ãŒã«å ããŠãBuildKitã®ãªã¢ãŒããã£ãã·ã¥ã€ã³ããŒãæ©èœãä»ããŠåç §ãããã¬ã€ã€ãŒã§åäœããŸãã ãã ããäžèŠãªã¬ã€ã€ãŒãã«ã¹ã±ãŒããã£ãã·ã¥ã®ç¡å¹åã«å·»ã蟌ãŸãããšããã®æçšæ§ã劚ããããŸãã ãã®ããã»ã¹ã«ããããããã CopyOp ã®å®å ãšããŠåŒ·å¶çã«ãã«ããŠã³ã§ããŸãã
äžèšã®åé¡ã¯å€ãã®ãŠãŒã¹ã±ãŒã¹ã«åœ±é¿ããŸãããããã©ãŒãã³ã¹ã®ããã«ããã¯ãåŒãèµ·ãããªããããå€ãã®å ŽåéèŠã§ã¯ãããŸããã å°éã®ããŒã¿ã®ã³ããŒã¯ãå€ãã®å Žåãç®ç«ã¡ãŸããã ãã ãããã®äŸã¯ããªãåºæ¬çãªãã®ã§ãã äŸåé¢ä¿ DAG ã¯ãããããã¯ããã«è€éã«ãªãããµã€ãºãšéã®äž¡æ¹ã§ããå€ãã®ãã¡ã€ã«ãå«ãŸããå¯èœæ§ããããŸãã ããã¯ããã£ãã·ã¥ã®ç¡å¹åãçã®ããã«ããã¯ã«ãªãå Žæã§ãã
éèŠãªãã€ã³ã
éåžžãæ¬¡ã®æ¹æ³ã䜿çšããŠãLLBãä»ããŠäŸåé¢ä¿DAGã®åé ç¹ãæ§ç¯ããŸãã
-
- äŸåé¢ä¿ãçµã¿åããã â æ§ç¯æã®äŸåé¢ä¿ã°ã©ããããããžãŒçã«äžŠã¹æ¿ãããã®ã¯ããŒãžã£ãå«ããã¡ã€ã«ã·ã¹ãã ãåºåãã LLB é ç¹ãäœæããŸãã CopyOpsã¯ãå¿ èŠã«å¿ããŠç¬ç«ãããã¡ã€ã«ã·ã¹ãã ãçµã¿åãããããã«äœ¿çšã§ããã³ããŒäžã«ç¢ºèªã§ããŸã ã㌠äžçªäžã®ã©ã€ãã©ãª ããŒã« libs â for ã㺠äžèšã®äŸã§ãã«ãããŸãã
- ãã«ãã®å®è¡ â æé 1 ã®é ç¹ã®é ç¹ã®äžã«é ç¹ãã«ãã ExecOp ãšããŠå®è¡ããŸãã
- ããã±ãŒãžã¢ãŒãã£ãã¡ã¯ã â å¿ èŠã«å¿ããŠãæé 2 ã§äœæãããã«ãææç©ããäŸåé¢ä¿ã¯ããŒãžã£ã®ãã¡ã€ã«ãšãã£ã¬ã¯ããªããåé¢ããŸãã ããã«ãããæç¢ºã«å®çŸ©ãããåé¢ãããããã±ãŒãžãäœæãããŸãã åé¢ã¯ CopyOp ã«ãã£ãŠãå¯èœã§ãããããã¯åã®äŸã§åãã€ããªãæçµçãªã€ã¡ãŒãžã«ã³ããŒãããšãã«æããã«ãªããŸãã
ãããã®æé ã«ã€ããŠã¯ãåŸã§åç §ããŸãã
ãã®ã¢ãããŒãã®åé¡ã¯ããœãããŠã§ã¢äŸåé¢ä¿ã® DAG ãã³ã㌠ãã§ãŒã³ã«ç·åœ¢åããããšãã«ãæé 1 ã§å€±ãããæ å ±ãå€ãããããšã§ãã 1 ã€ã®å ¥åã倿Žãããšã次ã®å ¥åã®å®å ãã£ã¬ã¯ããªãç¡å¹ã«ãªããŸãã åŸç¶ã®åå ¥åã¯ããã®ã«ã¹ã±ãŒã广ã®ç ç²ã«ãªããŸãã ããã¯ãå DAG å ¥åãç¬ç«ããŠããå¿ èŠãããã«ããããããçºçããŸãã ããã«ãããé床ã«è匱ãªãã£ãã·ã¥ãäœæããããã«ãäžãšã³ã³ããã¬ã€ã€ãŒãšããŠãšã¯ã¹ããŒãããŠããéã®äž¡æ¹ã§ããã¡ã€ã«ã·ã¹ãã ã®åå©çšãæå€§åããBuildKitã®æ©èœãæãªãããŸãã
LLBã«ã¯ããã¡ã€ã«ã·ã¹ãã ãç¬ç«ãããªããæ§æã§ããæ°ããã¿ã€ãã®æäœãå¿ èŠã§ãã ããã§ãããŒãž+å·®åã圹ç«ã¡ãŸãã
解決ç:ããŒãž+å·®åã䜿çšããã³ã³ããŒã¶ãã«ãã¡ã€ã«ã·ã¹ãã
ããŒãžãªã
MergeOp ã¯ãçžäºäŸåé¢ä¿ãäœæããã«ãã¡ã€ã«ã·ã¹ãã ãå¹ççã«ããŒãžã§ããæ°ããã¿ã€ãã® LLB é ç¹ã§ãã åé ç¹å ¥åã¯ãã¡ã€ã«ã·ã¹ãã ã§ãããåºåã¯ãã¡ã€ã«ã·ã¹ãã ã§ãããåå ¥åã¯å¥ã®å ¥åã®äžã«é©çšãããŸãã åºæ¬çãªäŸã次ã«ç€ºããŸãã

ããã§ã¯ãMergeOp åºåã«ãã®å å®¹ã®æ³šéãä»ããããŠããŸãã ãããã¯ãMergeOp ãžã®åå ¥åã®çµåãããå 容ã«ãããŸããã éè€ãããã£ã¬ã¯ããªã®å 容ã¯ããŒãžãããŸãã 2ã€ã®ãã¡ã€ã«ãåããã¹äžã«ããå Žåã¯ãåŸè ã®å ¥åã®ãã¡ã€ã«ãåªå ãããŸã(ãããã£ãŠãå ¥åã®é åºãéèŠã§ã)ã ãã®äŸã¯ãSourceOp é ç¹ãš CopyOp é ç¹ã®ããŒãžã瀺ããŠããŸãããMergeOp ã¯ä»»æã® LLB é ç¹ã®çµæãåãå ¥ããŸãã
ãœãããŠã§ã¢äŸåé¢ä¿ DAG ãæ§ç¯ããå ŽåãMergeOp ã¯åè¿°ã® "äŸåé¢ä¿ã®çµå" æé ã§åœ¹ç«ã¡ãŸãã ããã¯CopyOpã眮ãæãããã®ãŠãŒã¹ã±ãŒã¹ã§ã®äžè¬çãªèœãšã穎ãåé¿ããŸãã
MergeOp ã¯ãããã€ãã®éèŠãªæ¹æ³ã§åäœããŸãã
- å ¥åã¬ã€ã€ãŒã®åå©çš â MergeOp ã®çµæãã³ã³ãã㌠ã€ã¡ãŒãžã«å«ãŸããå Žåãåå ¥åã®ã¬ã€ã€ãŒã¯åäœæãŸãã¯æŒãã€ã¶ãããã®ã§ã¯ãªããçµåãããŸãã ããã«ããã以åã«ãšã¯ã¹ããŒãããã¬ã€ã€ãŒãæå€§éã«åå©çšã§ããŸãã
- æ æ° â MergeOpã¯é å»¶ããŠå®è£ ãããŠãããããããŒãžããããã¡ã€ã«ã·ã¹ãã ã®ãã£ã¹ã¯äžã®è¡šçŸã¯ãå³å¯ã«å¿ èŠãªå Žåã«ã®ã¿äœæãããŸãã ããŒã«ã«äœæã¯ããã®è¡šçŸã ExecOp å ¥åã§ããå Žåã«å¿ èŠã§ãã ãã㯠ãããªã MergeOp çµæãã³ã³ãã㌠ã€ã¡ãŒãžãšããŠçŽæ¥ãšã¯ã¹ããŒããããšãã«ããŒã«ã«ã«äœæããããã«å¿ èŠã§ãã ãã®æ©èœã®å®å šãªåœ±é¿ã«ã€ããŠã¯ãåŸã®ãé å»¶ããã±ãŒãž ããŒãžãšããŠã®ã³ã³ãã㌠ã€ã¡ãŒãžãã§èª¬æããŸãã
- ããŒããªã³ã¯ã®æé©å â MergeOp çµæãããŒã«ã«ã§äœæããå¿ èŠãããå Žåã¯ããã£ã¹ã¯äžã®ãã¡ã€ã«ã·ã¹ãã ã¯ããã¡ã€ã«ãã³ããŒããã®ã§ã¯ãªããããŒããªã³ã¯ããŠããŒãžãããããªãŒãäœæããŸãã ããã«ãããç¹ã«reflinkã®æé©åããµããŒãããŠããªãext4ã®ãããªãã¡ã€ã«ã·ã¹ãã ã䜿çšããŠããå Žåã«ãããŒãžäžã«å€§ããªãã¡ã€ã«ãããã«ããã¯ã«ãªãã®ãé²ããŸãã
ããŒããªã³ã¯ã¯ããªãŒããŒã¬ã€ãšãã€ãã£ãã®2ã€ã®äž»èŠãªã¹ãããã·ã§ããããã¯ãšã³ãã䜿çšããŠããå Žåã«ã®ã¿äœ¿çšã§ããŸãã çŸåšãä»ã®ããã¯ãšã³ãã¯ãã¡ã€ã«ãã³ããŒããŠããŒãžããããã¡ã€ã«ã·ã¹ãã ãäœæããå©çšå¯èœãªå Žåã¯syscallã䜿çšããããš copy_file_range ã奜ã¿ãŸãã ãã ããä»ã®ã¹ãããã·ã§ããã®çš®é¡ estargz ãšåçã®æé©åã¯ãå°æ¥ç»å Žããå¯èœæ§ããããŸãã
代ããã«çµã¿åãããããšãã§ããã®ã«ããªããªãŒããŒã¬ã€ã¹ãããã·ã§ããã«ããŒããªã³ã¯ãå¿
èŠãªã®ãçåã«æã£ãŠããå Žå äžå±€ãã£ã¬ã¯ã㪠ãªãŒããŒã¬ã€ããŠã³ãã«ãããªãã®å¥œå¥å¿ã¯æå¹ã§ãã æ®å¿µãªããããã®ã¢ãããŒãã¯ãã£ã¬ã¯ããªãäžéæãªãããåžžã«æ©èœãããšã¯éããŸããã ãã®æ¥ç·æ¹åã«é¢é£ããGithubåé¡ã®ã³ãŒããŒã±ãŒã¹1ãš2ã§èª¬æãããŠããããã«.ããå€ãã®åŽåã§æ©èœãããããšã¯å¯èœãããããŸããããããŒããªã³ã¯ã¢ãããŒãã¯ä»ã®ãšããããç°¡åãªãŸãŸã§ãã
ãã£ããªãã
DiffOp ã¯ããã¡ã€ã«ã·ã¹ãã ãäŸåé¢ä¿ããŒã¹ããå¹ççã«åé¢ã§ããæ°ããã¿ã€ãã® LLB é ç¹ã§ãã ãäžäœããã¡ã€ã«ã·ã¹ãã ãšãäžäœããã¡ã€ã«ã·ã¹ãã ã®2ã€ã®å ¥åãåãå ¥ããŸãã æ¬¡ã«ãäžäœãšäžäœãåé¢ãããã¡ã€ã«ã·ã¹ãã ãåºåããŸãã
ãŸããDiffOp ããã¡ã€ã«ã·ã¹ãã ããã¢ã³ããŒãžãããæ¹æ³ãšèŠãªãããšãã§ããŸã â MergeOp ãšã¯éã®ãã®ã§ãã åºæ¬çãªäŸã次ã«ç€ºããŸãã

å·®åã SourceOp ããŒã¹ãšããã®ããŒã¹ã®äžã«äœæããã ExecOp ã®éã«ããããšãããããŸãã ããã«ãããåºæ¬çã« ExecOp ãäŸåé¢ä¿ããåãé¢ãããŸãã DiffOp ã®çµæã«ã¯ãExecOp äžã«è¡ããã倿Žã®ã¿ãå«ãŸããŸãã
ãœãããŠã§ã¢äŸåé¢ä¿ã® DAG ãæ§ç¯ããå ŽåãDiffOp ã¯åè¿°ã® "ããã±ãŒãžææç©" ã®æé ã§åœ¹ç«ã¡ãŸãã ãã¡ã€ã«ãåé¢ããã³ããŒãäœæããã«ãå ã®äŸåé¢ä¿ãšã¯ç¡é¢ä¿ã«ç¬èªã®ãããã±ãŒãžãã䜿çšã§ããããã«ããŸãã ãã ããDiffOp ã®ãŠãŒã¹ã±ãŒã¹ã¯ãMergeOp ã®ãŠãŒã¹ã±ãŒã¹ããããããŸãã§ãã BuildKit ã®ãŠãŒã¶ãŒã¬ã€ãã§ã¯ã ãããã®ã·ããªãªã«ã€ããŠè©³ãã説æããŠããŸãã
DiffOp 㯠MergeOp ãšåäœç¹æ§ãå ±æããŠããŸãã
- å ¥åã¬ã€ã€ãŒã®åå©çš â äžäœå ¥åããäžäœå ¥åãžã® "æ¢ç¥ã®ãã¹" ãããå ŽåãDiffOp çµæãå«ãã³ã³ãã㌠ã€ã¡ãŒãžã®ãšã¯ã¹ããŒãã§ã¯ãäžäœãšäžäœãåºåãã¬ã€ã€ãŒãåå©çšãããŸãã ãã¹ãäžæãªå Žåã§ããDiffOp ã¯äžè²«ããçµæãåºåããŸãããå ¥åã¬ã€ã€ãŒãåå©çšããããšã¯ã§ããŸããã
- æ æ° â DiffOpãé å»¶ããŠå®è£ ãããŠããŸãããã£ã¹ã¯äžã®ãã¡ã€ã«ã·ã¹ãã 衚çŸã¯ãå¿ èŠãªå Žåã«ã®ã¿äœæãããŸãã DiffOp ã®çµæãã³ã³ãã㌠ã€ã¡ãŒãžãšããŠãšã¯ã¹ããŒãããå Žåããã®å ¥åã "é å»¶è§£é€" ããå¿ èŠã¯ãããŸãã (åè¿°ã®ããã«ãäžäœãšäžäœã®éã«æ¢ç¥ã®ãã¹ããªãå Žåãé€ã)ã
- ããŒããªã³ã¯ã®æé©å â BuildKit ã¯ãMergeOp ãšåãæé©å (ããã³çŸåšã®æ³šæäºé ) ã䜿çšã㊠DiffOp çµæãããŒã«ã«ã«äœæããŸãã
äŸ:2 ã€ã®æ°ãã LLB æäœ
ããã2ã€ã®æ°ããLLBæäœãåã®ã»ã¯ã·ã§ã³ã®åé¡ãã©ã®ããã«è§£æ±ºã§ããããèŠãŠã¿ãŸãããã LLB ã䜿çšããŠäŸåé¢ä¿ DAG ã«é ç¹ãæ§ç¯ããããã®æ°ããæ¹åãããã¢ãããŒããæ¬¡ã«ç€ºããŸãã
-
- äŸåé¢ä¿ãçµã¿åããã â äŸåé¢ä¿ã MergeOp ã«æ¥ç¶ããŸã (å¿ èŠã«å¿ããŠãããããžçã«äžŠã¹æ¿ããããé åºã§)ã
- ãã«ãã®å®è¡ â ã¹ããã 1 ã§ããŒãžããããã¡ã€ã«ã·ã¹ãã ã®äžã§ ExecOp ãšããŠãã«ããå®è¡ããŸãã
- ããã±ãŒãžã¢ãŒãã£ãã¡ã¯ã â DiffOp(ãŸãã¯ãŠãŒã¶ãŒã¬ã€ãã®åçã®ææ³)ã䜿çšããŠããã«ãã¢ãŒãã£ãã¡ã¯ããç¬èªã®ç¬ç«ãããã¡ã€ã«ã·ã¹ãã ã«æœåºããŸãã ãã®åŸãDiffOp ã®åºåãä»ã® MergeOps ã«ãã©ã°ã€ã³ããããçŽæ¥ãšã¯ã¹ããŒããããã§ããŸãã
ãããã®ã«ãŒã«ã䜿çšããŠãæŽæ°ããã LLB ãæ¬¡ã«ç€ºããŸãã

ããã§ãåãšåãã·ããªãªã§ãäžèšã®LLBã®åæãã«ããå®è¡ãããã®åŸã®ãã«ãã倿ŽããããšãèããŠã¿ãŸãããã ããŒã« ã©ã€ãã©ãªïŒ

ãã®å Žåãäºæãããç¡å¹åã®ã¿ãçºçããŸãã BuildKit ã¯ãéèŠãªäŸåé¢ä¿ã®ã¿ã䜿çšããŠåãã«ãã¹ããããå®è¡ããŸãã ãã£ãã·ã¥ã®ç¡å¹åã¯ãå¿
èŠãªé ç¹ã«ã®ã¿ã«ã¹ã±ãŒããããŸãã ã®ã³ããŒã¯ãããããŸã ã㌠ã©ã€ãã©ãªãŸã㯠ã㌠ããã¯äžå¿
èŠã«ç¡å¹ã«ãªããŸãã
ããã¯ã1 ã€ã® MergeOp å ¥åãç¡å¹ã«ããŠãä»ã®å ¥åãç¡å¹ã«ãªããªããããç·åœ¢åãããã³ã㌠ãã§ãŒã³ã®åé¡ãåé¿ãããããã§ãã 1 ã€ã®å ¥åãç¡å¹ã«ãªããš MergeOp å šäœãç¡å¹ã«ãªããŸãããããŒãžããããã¡ã€ã«ã·ã¹ãã ã¯å³å¯ã«å¿ èŠãªå Žåã«ã®ã¿äœæãããŸãã
ããããã®ããŒãžãªãã¹ ããŒã« ãã㊠ã㺠äŸåé¢ä¿ã®ã¯ããŒãžã£ã¯ãExecOps ããã®äžã§å®è¡ãããŠããããããã£ã¹ã¯äžã«äœæããå¿
èŠããããŸãã 幞ããªããšã«ãããŒããªã³ã¯ã¯ããµããŒããããŠããã¹ãããã·ã§ããããã¯ãšã³ãã䜿çšãããŠããã°ããã®ããã»ã¹ãå¹ççã«ããŸãã
æçµç㪠MergeOp ã¯ãã£ã¹ã¯äžã«äœæãããŸããã ããã¯ãDiffOpã®é
å»¶å®è£
ãšçµã¿åãããããšã§ããšã¯ã¹ããŒããããç»åã¯ãã«ãã£ãŠäœæãããã¬ã€ã€ãŒã®ã¿ã§æ§æãããããšãæå³ããŸãã ã€ã³ã¹ããŒã«ãã ãšã¯ã»ãªãã¹ã äžéããŒã¿ãã¬ã€ã€ãŒãäœæããå¿
èŠã¯ãããŸããã
éèŠãªãã€ã³ã
Merge ãš Diff ã䜿çšãããšããœãããŠã§ã¢äŸåé¢ä¿ DAG ã§è¡šãããé¢ä¿ãåæ ããæ¹æ³ã§ãã¡ã€ã« ã·ã¹ãã æäœãæ§æããã³åè§£ã§ããŸãã ãã¡ã€ã«ã·ã¹ãã ã¬ã€ã€ãŒã®åå©çšãèš±å¯ããããšã§ãBuildKit ã¯ãããã®ã¬ã€ã€ãŒã®ãã£ãã·ã¥åå©çšãæå€§åã§ããŸãã ããã«ãããããã©ãŒãã³ã¹ãšåçŸæ§ãåäžããŸãã
ãã®ä»ã®ã¢ããªã±ãŒã·ã§ã³
äŸåé¢ä¿ DAG ãããå¹ççã«æ§ç¯ããããšã«å ããŠãMerge ãš Diff ã¯ä»ã«ãå€ãã®è峿·±ãå¯èœæ§ãè§£ãæŸã¡ãŸãã ããã§ã¯ãããã€ãã®æ¶ç©ºã®ãã®ãæ¢ããŸãã
ããã±ãŒãž DAG ã®ã€ã³ããŒã
å€ãã®æ¢åã®ã³ã³ããã€ã¡ãŒãžãã«ãã¯ãLinuxãã£ã¹ããªãã¥ãŒã·ã§ã³ããã±ãŒãžãããŒãžã£ãŒããExecOpãä»ããŠããã±ãŒãžãã€ã³ã¹ããŒã«ããŸã(äŸ: å®è¡ ã¢ãã, .apk, dnfãªã©)ã ãã®ããã® LLB ã¯æ¬¡ã®ããã«ãªããŸãã

åæ§ã®ãã¿ãŒã³ã¯ã次ã®ãããªèšèªããã±ãŒãžãããŒãžã£ãŒã«å
±éããŠããŸãã ãšãããŒãšã , çš®ãããã³ Go ã¢ãžã¥ãŒã«ã
ãã®ã¢ãããŒãã¯æ©èœããŸãããåã«èª¬æããã®ãšåããã£ãã·ã¥ã®åé¡ããããŸãã ãã®å Žåã1 ã€ã®ã€ã³ã¹ããŒã«ããã±ãŒãžã倿Žããããšããã®ã€ã³ã¹ããŒã«ã¹ããããç¡å¹ã«ãªããŸãã ããã±ãŒãž DAG ãéšåçã«ãã倿ŽãããŠããªãå Žåã§ããããã»ã¹å šäœãå床å®è¡ããå¿ èŠããããŸãã ããã¯ãLLBãå®éã®äŸåé¢ä¿DAGã«é¢ããç¥èããšã³ã³ãŒãããªãå¥ã®ã±ãŒã¹ã§ãããBuildKitãããŒã¿ã广çã«ãã£ãã·ã¥ããæ©èœã劚害ããŸãã
MergeOpã¯ããã§æ°ããå¯èœæ§ãè§£ãæŸã¡ãŸãã æ¬¡ã®ããšãã§ããŸãã
- å¿ èŠãªããã±ãŒãžã®äžèЧãååŸãããã¹ãŠã®æšç§»çãªäŸåé¢ä¿ãå«ãå®å šãªäŸåé¢ä¿ DAG ã«å±éããŸãã
- ExecOp ã䜿çšããŠããã±ãŒãžã®å 容ãããŠã³ããŒãããŠãåããã±ãŒãžã LLB ç¶æ ã«å€æããŸãã DiffOp ã¯ãã¢ãŒãã£ãã¡ã¯ããåé¢ããã®ã«åœ¹ç«ã€å ŽåããããŸãã ãã ããExecOp ã®å®è¡äžã«å¥ã®ããŠã³ãã䜿çšããã ãã§ååãªå ŽåããããŸãã
- MergeOp ã䜿çšããŠããããã®åã ã®ããã±ãŒãžãããããžé ã«çµåããŸãã
ãããå®è£ ãã LLB ã¯æ¬¡ã®ããã«ãªããŸãã

ãŠãŒã¶ãŒã¬ã€ãã§èª¬æãããŠããããã«ãDiffOpã®ä»£ããã«åå¥ã®ExecOpããŠã³ãã䜿çšããŠããããšã«æ³šæããŠãã ãããDiffOpã¯ãå¿ èŠã«å¿ããŠå®è¡å¯èœãªãœãªã¥ãŒã·ã§ã³ã§ãã
ããã«ãããå€ãã¢ãããŒãã«å ±éãããã£ãã·ã¥ã®åé¡ã解決ãããŸãã ããã±ãŒãžã¯ãããŒã¿ãäœæ¥ãè€è£œããããšãªãã³ã³ãã㌠ã€ã¡ãŒãžã«ã€ã³ããŒãã§ããŸãã ãããã«ç°ãªãããã±ãŒãžã»ããã§å¥ã®ãã«ããå®è¡ããå ŽåãBuildKit ã¯ä»¥åã®ãã«ãã®ããã±ãŒãžããšã«ãã£ãã·ã¥ãåå©çšã§ããŸãã
ããã«ãããã±ãŒãž DAG ã LLB ã«ã³ã³ãã€ã«ãããã®ã§ãä»»æã«æ¡åŒµã§ããŸãã ã€ã³ããŒãããããã±ãŒãžã®äžã«ç¬èªã®ãœãããŠã§ã¢ãæ§ç¯ããå Žåã¯ãäžèšã®æé ããLLBãååŸããŠç¬èªã®æäœã远å ããã®ãšåããããç°¡åã§ãã
é å»¶ããã±ãŒãžããŒãžãšããŠã®ã³ã³ããã€ã¡ãŒãž
誰ããäžèšã®ææ³ã䜿çšããŠå€§ããªããã±ãŒãž DAG ããã«ããŸãã¯ã€ã³ããŒãããDAG å ã®åã ã®ããã±ãŒãžãåäžã¬ã€ã€ãŒ ã€ã¡ãŒãžãšããŠã³ã³ãã㌠ã¬ãžã¹ããªã«ããã·ã¥ãããšããŸãã
次ã«ã誰ããã³ã³ããã€ã¡ãŒãžã«å€æãããããã±ãŒãžã®ãªã¹ããæã£ãŠãããšããŸãããã BuildKit ã䜿çšããå Žåã® "ãã«ã" ã¯ããããã®ããã±ãŒãžã®äŸåé¢ä¿ DAG ãããããžçã«äžŠã¹æ¿ãããããã MergeOp ãšçµã¿åãããããšã§æ§æãããŸãã
Â

"ãã«ã" ã¯ãå®éã®äœæ¥ãã»ãšãã©å¿ èŠãªããããåŒçšç¬Šã§å²ãŸããŠããŸãã ç»åã®é ç¹ã¯ MergeOp ã DiffOp ãšåæ§ã«é å»¶ã§ãããããLLB DAG å šäœãé å»¶ããŸãã å®éã«ã¯ããã®ãã«ã㯠ã³ã³ãã㌠ã€ã¡ãŒãžã®ãããã§ã¹ãããããŠãããã¬ãžã¹ããªã«ããã·ã¥ããŸãã å ¥åããã±ãŒãžã€ã¡ãŒãžã¯ããããã®é å»¶å®è£ ã®ãããã§ããŒã«ã«ã«ãã«ããŠã³ããå¿ èŠã¯ãããŸããã ãããã§ã¹ããããã·ã¥ããåŸã誰ã§ãã¬ãžã¹ããªãããã®ã€ã¡ãŒãžãååŸããä»ã®ã€ã¡ãŒãžã®å Žåãšåæ§ã«ãéžæããã³ã³ãã㌠ã©ã³ã¿ã€ã ã䜿çšããŠå®è¡ã§ããŸãã
ãã®ã·ããªãªã§ã¯ãã³ã³ãã㌠ã€ã¡ãŒãž ã¬ãžã¹ããªã¯ããã±ãŒãž ãã£ãã·ã¥ã«ãªãã"ãã«ã" ã¯ããããã§ã¹ããšããŠã¬ãžã¹ããªã«ããã·ã¥ããããç¹å®ã®ã€ã¡ãŒãžã«ååšããå¿ èŠãããããã±ãŒãžã®å®£èšã«ãããŸããã
ããã€ãã®ã¬ã³ã
ããã¯ãã¹ãŠããªããããã§ã! ãã ããããã€ãã®æ³šæç¹ããããŸãã
- ããã±ãŒãžãããŒãžã£ãŒã¯ãå€ãã®å Žåãããã±ãŒãžã®ã€ã³ã¹ããŒã«äžã«ã¹ã¯ãªãããå®è¡ããããã¯ããµããŒãããŸãã å€ãã®å Žåãã³ã³ãã㌠ã€ã¡ãŒãžã®ãã«ãã«å¯ŸããŠãããã®ã¹ã¯ãªãããç¡å¹ã«ããããšãã§ããŸãã å³å¯ã«å¿ èŠãªå Žåã¯ãMergeOps äžã§ ExecOps ã䜿çšããŠãã€ã§ã衚çŸã§ããŸãã ãã ããããã«ãããããŒãžããããã¡ã€ã«ã·ã¹ãã ãããŒã«ã«ã«äœæããå¿ èŠããããããããã©ãŒãã³ã¹ã®æé©åã軜æžãããŸãã
- ã€ã¡ãŒãžã®ãšã¯ã¹ããŒãåŸã«ã©ã³ã¿ã€ã ããã±ãŒãžãããŒãžã£ãŒãå¿ èŠãªå ŽåãLLBã«ã¯ããã±ãŒãžããŒã¿ããŒã¹ãå«ãã¬ã€ã€ãŒãããŒãžããæ¹æ³ãå¿ èŠã§ãã ããšãã°ãããã¯å®è¡ããå Žåã«å¿ èŠã§ã ã¢ãã ã³ãã³ãã Debian ããŒã¹ã®ã€ã¡ãŒãžã§äœ¿ã â éçºç°å¢ã®äžã§åœ¹ã«ç«ã€ãããããŸããã
- ããã±ãŒãž DAG ã LLB ã«å€æããã«ã¯ãããã±ãŒãž ãããŒãžã£ãŒã®ã¡ã¿ããŒã¿ ããŒã¿ããŒã¹ã«ããã°ã©ã ã§ã¢ã¯ã»ã¹ããå¿ èŠããããŸãã ããã¯å£ã§èšãã»ã©ç°¡åã§ã¯ãããŸããã CLI åºåã®è§£æãã©ã€ãã©ãª ãµããŒãã®äœ¿çšãªã©ãè€æ°ã®ãªãã·ã§ã³ããããã±ãŒã¹ãã€ã±ãŒã¹ã§è©äŸ¡ããå¿ èŠããããŸãã
Â
ãããã®åé¡ã¯ã©ããã·ã§ãŒã¹ããããŒã§ã¯ãããŸããããäžèšã®ãŠãŒã¹ã±ãŒã¹ã§MergeãšDiffãå©çšããªããããŒã«ãäœæãã人ã¯ãããããèŠããŠããå¿ èŠããããŸãã
æè¬ïŒ
ç§ã® Merge+Diff ãžã®é¢å¿ã¯ãBuildKit ã䜿çšããŠè€éãªããã±ãŒãž DAG ãæ§ç¯ããããšããç§èªèº«ã®è©Šã¿ã«ç±æ¥ããŠããŸãã ããããä»ã®BuildKitãŠãŒã¶ãŒããã®æ©èœãç¹ã«Netflixã«èå³ãæã¡ããããã®èšèšãšå®è£ ãç§ã«è«ãè² ããŸããã 圌ãã®ãµããŒãã¯ãç¹ã«ãšã³ãžãã¢ããéåžžã«é«ãè©äŸ¡ãããŠããŸã ãšãã¬ãŒã»ãªãŒ ãã㊠ã¢ãŒãã³ã»ã¬ãŒãã³.ã©ã¡ããæåããæåŸãŸã§è²Žéãªãã£ãŒãããã¯ãæäŸããŠãããŸããã
ãŸããBuildKit ã®ã¡ã³ããã®ã³ãã¥ããã£ã«ãæè¬ããŸã ããã¹ã»ãã£ãŒã®ããã°ããã®éããããã®æ©èœã«ãé¢å¿ã瀺ããŠããŸãã Merge+Diff ã®èšèšã¯ããªãè€éã§ãã³ãŒãã¬ãã¥ãŒäžã¯ç°¡åã§ã¯ãããŸããã§ãããã圌ãšé¢ä¿è å šå¡ã®ãããã§ãæ¬åœã«åŒ·åãªããŒã«ãããã€ãã§ãããšæããŸãã ãããã¯ãåé²ããå€ãã®è峿·±ããŠãŒã¹ã±ãŒã¹ã®ããã¯ãè§£é€ããã¯ãã§ãã