αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– Docker αž“αŸ…αž€αŸ’αž“αž»αž„ werf αžŠαŸ„αž™αž”αŸ’αžšαžΎ Dockerfile αž’αž˜αŸ’αž˜αžαžΆαŸ”

αž™αžΊαžβ€‹αž”αŸ’αžšαžŸαžΎαžšβ€‹αž‡αžΆαž„β€‹αž’αžœαžαŸ’αžαž˜αžΆαž“αŸ” αž¬αžšαž”αŸ€αž”αžŠαŸ‚αž›αž™αžΎαž„αžŸαŸ’αž‘αžΎαžšαžαŸ‚αž˜αžΆαž“αž€αŸ†αž αž»αžŸαž’αŸ’αž„αž“αŸ‹αž’αŸ’αž„αžšαžŠαŸ„αž™αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Dockerfiles αž’αž˜αŸ’αž˜αžαžΆαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ”

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– Docker αž“αŸ…αž€αŸ’αž“αž»αž„ werf αžŠαŸ„αž™αž”αŸ’αžšαžΎ Dockerfile αž’αž˜αŸ’αž˜αžαžΆαŸ”

αž™αžΎαž„αž“αžΉαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈ werf - αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ GitOps αžŠαŸ‚αž›αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’ CI/CD αžŽαžΆαž˜αž½αž™ αž“αž·αž„αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžœαžŠαŸ’αžαž‡αžΈαžœαž·αžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αžΆαŸ†αž„αž˜αžΌαž› αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αŸ–

  • αž”αŸ’αžšαž˜αžΌαž›αž“αž·αž„αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αžšαžΌαž”αž—αžΆαž–,
  • αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes,
  • αž›αž»αž”αžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž˜αž·αž“αž”αŸ’αžšαžΎαžŠαŸ„αž™αž”αŸ’αžšαžΎαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž–αž·αžŸαŸαžŸαŸ”


αž‘αžŸαŸ’αžŸαž“αžœαž·αž‡αŸ’αž‡αžΆαžšαž”αžŸαŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αž‚αžΊαž”αŸ’αžšαž˜αžΌαž›αž§αž”αž€αžšαžŽαŸαž€αž˜αŸ’αžšαž·αžαž‘αžΆαž”αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αž„αŸ’αžšαž½αž”αž”αž„αŸ’αžšαž½αž˜αžαŸ‚αž˜αž½αž™αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αžœαž·αžŸαŸ’αžœαž€αžš DevOps αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž›αžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“ αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹ (αžŠαžΌαž…αž‡αžΆ Helm αž“αž·αž„ Docker) αž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‚αŸ’αž˜αžΆαž“αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž…αŸ†αž–αŸ„αŸ‡αž”αž‰αŸ’αž αžΆαž‘αŸ αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαž αž“αž·αž„αž‚αžΆαŸ†αž‘αŸ’αžšαž’αŸ’αžœαžΈαŸ—αž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ‚αž›αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αŸ”

αž•αŸ’αž‘αŸƒαžαžΆαž„αž€αŸ’αžšαŸ„αž™αŸ– αž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αžšαžΌαž”αž—αžΆαž–αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αž“αŸαŸ‡αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αž‡αžΆαž˜αž½αž™αž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αžšαžΌαž”αž—αžΆαž–αž€αŸ’αž“αž»αž„ werfαŸ– Dockerfile αž’αž˜αŸ’αž˜αžαžΆαž˜αž·αž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αž‘αŸαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡ αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αž”αžΆαž“αž›αŸαž…αž‘αžΎαž„αžšαž½αž…αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αžŠαŸ†αž”αžΌαž„αž“αŸƒ werf (αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž“αŸ…αžαŸ‚ αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαŸ’αž‚αžΆαž›αŸ‹αžαžΆαž‡αžΆ dapp).

αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαž§αž”αž€αžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž– Docker αž™αžΎαž„αž”αžΆαž“αžŠαžΉαž„αž—αŸ’αž›αžΆαž˜αŸ—αžαžΆ Dockerfile αž˜αž·αž“αžŸαŸαž€αŸ’αžαž·αžŸαž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž·αž…αŸ’αž…αž€αžΆαžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ–

  1. αžαŸ†αžšαžΌαžœαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžŽαŸ’αžαžΆαž‰αžαžΌαž…αž’αž˜αŸ’αž˜αžαžΆαžαžΆαž˜αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–
    • αžŠαŸ†αž‘αžΎαž„αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αŸαž‰αž”αŸ’αžšαž–αŸαž“αŸ’αž’,
    • αžŠαŸ†αž‘αžΎαž„αž”αžŽαŸ’αžαž»αŸ†αž“αŸƒαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ,
    • αž”αŸ’αžšαž˜αžΌαž›αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·,
    • αž αžΎαž™αžŸαŸ†αžαžΆαž“αŸ‹αž”αŸ†αž•αž»αž αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž€αžΌαžŠαž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž™αŸ‰αžΆαž„αžšαž αŸαžŸ αž“αž·αž„αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αŸ”
  2. αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„αž…αŸ†αž–αŸ„αŸ‡αž―αž€αžŸαžΆαžšαž‚αž˜αŸ’αžšαŸ„αž„ αž’αŸ’αž“αž€αžŸαžΆαž„αžŸαž„αŸ‹αžαŸ’αžšαžΌαžœαžαŸ‚αž”αž„αŸ’αž€αžΎαžαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžαŸ’αž˜αžΈαž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸαžŠαŸ„αž™αž’αž“αž»αžœαžαŸ’αžαž”αŸ†αžŽαŸ‡αž‘αŸ…αž“αžΉαž„αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ”
  3. αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž―αž€αžŸαžΆαžšαž˜αž½αž™αž…αŸ†αž“αž½αž“αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž“αŸ„αŸ‡αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž’αžΆαžŸαŸ’αžšαŸαž™αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž‘αžΎαž„αžœαž·αž‰αŸ”

αžŸαž–αŸ’αžœαžαŸ’αž„αŸƒαž“αŸαŸ‡ αž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αžšαž”αžŸαŸ‹αž™αžΎαž„αž˜αžΆαž“αž›αž‘αŸ’αž’αž—αžΆαž–αž‡αžΆαž…αŸ’αžšαžΎαž“αž‘αŸ€αž αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αŸ†αžŽαž„αž”αŸ’αžšαžΆαžαŸ’αž“αžΆ αž“αž·αž„αž€αžΆαžšαž‡αž˜αŸ’αžšαž»αž‰αžŠαŸ†αž”αžΌαž„αŸ”

αž‡αžΆαž‘αžΌαž‘αŸ…αžŠαŸ„αž™αž˜αž·αž“αž‚αž·αžαž–αžΈαžšαžŠαž„ αž™αžΎαž„αž”αžΆαž“αž”αŸ†αž–αžΆαž€αŸ‹αžαŸ’αž›αž½αž“αž™αžΎαž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž”αŸ’αžšαžΎ (αž˜αžΎαž›β€‹αžαžΆαž„β€‹αž€αŸ’αžšαŸ„αž˜) αž“αž·αž„αžœαžΆαž™αž•αŸ’αž›αžΌαžœαžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αž DSL αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“! αž’αž“αž»αž›αŸ„αž˜αžαžΆαž˜αž‚αŸ„αž›αž”αŸ†αžŽαž„ αžœαžΆαž˜αžΆαž“αž‚αŸ„αž›αž”αŸ†αžŽαž„αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž‡αžΆαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž› αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž“αŸƒαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž›αžΎαž―αž€αžŸαžΆαžšαŸ” αž αžΎαž™αž”αžΆαž“αž”αŸ†αž–αŸαž‰αž”αž“αŸ’αžαŸ‚αž˜ αž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™ DSL αž‘αŸ…αž‡αžΆαž‚αŸ„αž›αžŠαŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™ - αžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαŸ” αžŠαŸ†αž”αžΌαž„ DSL αž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„ Ruby αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŠαžΌαž… αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ… Golang - αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αžšαž”αžŸαŸ‹αž™αžΎαž„αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš YAML αŸ”

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– Docker αž“αŸ…αž€αŸ’αž“αž»αž„ werf αžŠαŸ„αž™αž”αŸ’αžšαžΎ Dockerfile αž’αž˜αŸ’αž˜αžαžΆαŸ”
αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž…αžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ dapp αž“αŸ…αž€αŸ’αž“αž»αž„ Ruby

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– Docker αž“αŸ…αž€αŸ’αž“αž»αž„ werf αžŠαŸ„αž™αž”αŸ’αžšαžΎ Dockerfile αž’αž˜αŸ’αž˜αžαžΆαŸ”
αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ werf αž“αŸ…αž›αžΎ YAML

αž™αž“αŸ’αžαž€αžΆαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αž€αŸαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαžΆαž˜αž–αŸαž›αžœαŸαž›αžΆαŸ” αžŠαŸ†αž”αžΌαž„αž‘αžΎαž™ αž™αžΎαž„αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αž„αŸ’αž€αžΎαž Dockerfile αž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž—αŸ’αž›αžΆαž˜αŸ—αž–αžΈαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž™αžΎαž„ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸαž…αž€αŸ’αžαžΈαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžšαž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“ αž αžΎαž™αž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαŸ”

NBαŸ– αž“αŸ…αž–αŸαž›αž“αŸαŸ‡ αž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹ (αž“αŸ…αž€αŸ’αž“αž»αž„ YAML) αž“αž·αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆαž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž› Stapel αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžšαž½αž…αž αžΎαž™αž‘αŸ…αž‡αžΆαž§αž”αž€αžšαžŽαŸαžŠαŸαž˜αžΆαž“αž₯αž‘αŸ’αž’αž·αž–αž›αŸ” αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž›αž˜αŸ’αž’αž·αžαžšαž”αžŸαŸ‹αžœαžΆαžŸαž˜αž“αžΉαž„αž’αžαŸ’αžαž”αž‘αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αž αžΎαž™αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ αž―αž€αžŸαžΆαžš.

αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž’αŸ†αž–αžΈαž”αž‰αŸ’αž αžΆ

αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž™αžΎαž„β€‹αž”αžΆαž“β€‹αžŠαžΉαž„β€‹αž αžΎαž™β€‹αž˜αž·αž“αž˜αŸ‚αž“β€‹αž—αŸ’αž›αžΆαž˜αŸ—β€‹αž‘αŸβ€‹αžαžΆβ€‹αž™αžΎαž„β€‹αž˜αžΆαž“β€‹αž€αŸ†αž αž»αžŸβ€‹αž˜αž½αž™β€‹αž‚αžΊβ€‹αž™αžΎαž„β€‹αž˜αž·αž“β€‹αž”αžΆαž“β€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αžŸαž˜αžαŸ’αžαž—αžΆαž– αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αžαžΆαž˜αžšαž™αŸˆ Dockerfile αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš αž αžΎαž™αž”αž‰αŸ’αž…αžΌαž›αž–αž½αž€αžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αžΈαž…αž»αž„αžŠαž›αŸ‹αž…αž”αŸ‹αžŠαžΌαž…αž‚αŸ’αž“αžΆ (ឧ. αž”αŸ’αžšαž˜αžΌαž›αžšαžΌαž”αž—αžΆαž– αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ αž“αž·αž„αžŸαž˜αŸ’αž’αžΆαžαž–αž½αž€αžœαžΆ)αŸ” αžαžΎαžœαžΆαž’αžΆαž…αž’αŸ’αžœαžΎαžŠαžΌαž…αž˜αŸ’αžαŸαž…αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž±αŸ’αž™αž§αž”αž€αžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes αž“αž·αž„αž˜αž·αž“αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš Dockerfile αž–αŸ„αž›αž‚αžΊαž§αŸ” αžœαž·αž’αžΈαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž–αžŽαŸŒαž“αžΆαžšαžΌαž”αž—αžΆαž–αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αž—αžΆαž‚αž…αŸ’αžšαžΎαž“?..

αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžŸαŸ†αžŽαž½αžšαž“αŸαŸ‡ αž™αžΎαž„αž•αŸ’αžαž›αŸ‹αž‡αžΌαž“αž“αžΌαžœαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž˜αž½αž™αŸ” αž…αž»αŸ‡αž”αžΎαž’αŸ’αž“αž€αž˜αžΆαž“ Dockerfile (αž¬αžŸαŸ†αžŽαž»αŸ† Dockerfiles) αž αžΎαž™αž…αž„αŸ‹αž”αŸ’αžšαžΎ werf?

NBαŸ– αž“αž·αž™αžΆαž™αž’αž‰αŸ’αž…αžΉαž„ αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž’αŸ’αž“αž€αž…αž„αŸ‹αž”αŸ’αžšαžΎ werf? αž›αž€αŸ’αžαžŽαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž˜αžΆαž“αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

  • αžœαžŠαŸ’αžαž“αŸƒαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αŸαž‰αž›αŸαž‰ αžšαž½αž˜αž‘αžΆαŸ†αž„αž€αžΆαžšαžŸαž˜αŸ’αž’αžΆαžαžšαžΌαž”αž—αžΆαž–αŸ”
  • αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž“αŸƒαžšαžΌαž”αž—αžΆαž–αž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™αž–αžΈαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžαŸ‚αž˜αž½αž™;
  • αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ†αž“αžΌαžŸαžαžΆαž„αžŠαŸ‚αž›αž†αž”αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ Helm αŸ”

αž”αž‰αŸ’αž‡αžΈαž–αŸαž‰αž›αŸαž‰αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž“αŸƒαž–αž½αž€αžœαžΆαž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸ… αž‘αŸ†αž–αŸαžšαž‚αž˜αŸ’αžšαŸ„αž„.

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž»αž“αž“αŸαŸ‡ αž–αž½αž€αž™αžΎαž„αž“αžΉαž„αžŸαŸ’αž“αžΎαž±αŸ’αž™αžŸαžšαžŸαŸαžš Dockerfile αž‘αžΎαž„αžœαž·αž‰αž“αŸ…αž€αŸ’αž“αž»αž„ config αžšαž”αžŸαŸ‹αž™αžΎαž„αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž“αž·αž™αžΆαž™αžŠαŸ„αž™αžšαžΈαž€αžšαžΆαž™αžαžΆ "Let werf build your Dockerfiles!"

αžšαž”αŸ€αž”αž”αŸ’αžšαžΎ?

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž–αŸαž‰αž›αŸαž‰αž“αŸƒαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž“αŸαŸ‡αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ werf v1.0.3-beta.1. αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž‘αžΌαž‘αŸ…αž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰αŸ– αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹ Dockerfile αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ werf config αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ werf build... αž αžΎαž™αž“αŸ„αŸ‡αž αžΎαž™αž‡αžΆαžœαžΆ - werf αž“αžΉαž„αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αžšαžΌαž”αž—αžΆαž–αŸ” αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαž’αžšαžΌαž”αžΈαŸ”

αžαŸ„αŸ‡αž”αŸ’αžšαž€αžΆαžŸαž”αž“αŸ’αž‘αžΆαž”αŸ‹ Dockerfile αž“αŸ…αž€αŸ’αž“αž»αž„αž«αžŸαž‚αž˜αŸ’αžšαŸ„αž„αŸ–

FROM ubuntu:18.04
RUN echo Building ...

αž αžΎαž™αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαž€αžΆαžŸ werf.yamlαžŠαŸ‚αž›αž”αŸ’αžšαžΎαž“αŸαŸ‡αŸ” Dockerfile:

configVersion: 1
project: dockerfile-example
---
image: ~
dockerfile: ./Dockerfile

αž‘αžΆαŸ†αž„αž’αžŸαŸ‹! αž†αŸ’αžœαŸαž„ αžšαžαŸ‹ werf build:

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– Docker αž“αŸ…αž€αŸ’αž“αž»αž„ werf αžŠαŸ„αž™αž”αŸ’αžšαžΎ Dockerfile αž’αž˜αŸ’αž˜αžαžΆαŸ”

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αžαž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαž€αžΆαžŸαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ werf.yaml αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž‡αžΆαž…αŸ’αžšαžΎαž“αž–αžΈ Dockerfiles αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™αŸ–

configVersion: 1
project: dockerfile-example
---
image: backend
dockerfile: ./dockerfiles/Dockerfile-backend
---
image: frontend
dockerfile: ./dockerfiles/Dockerfile-frontend

αž‡αžΆαž…αž»αž„αž€αŸ’αžšαŸ„αž™ αžœαžΆαž€αŸαž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŸαžΆαž„αžŸαž„αŸ‹αž”αž“αŸ’αžαŸ‚αž˜αž•αž„αžŠαŸ‚αžš αžŠαžΌαž…αž‡αžΆ --build-arg ΠΈ --add-host - αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ werf αŸ” αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž–αŸαž‰αž›αŸαž‰αž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαžΌαž”αž—αžΆαž– Dockerfile αž˜αžΆαž“αž“αŸ… αž‘αŸ†αž–αŸαžšαž―αž€αžŸαžΆαžš.

αžαžΎαžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αŸ‰αžΆαž„αžŠαžΌαž…αž˜αŸ’αžαŸαž…?

αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αž„αŸ’αž€αžΎαž αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž“αŸƒαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αž»αžαž„αžΆαžš Docker αŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžŸαŸ†αžαžΆαž“αŸ‹αž“αŸ„αŸ‡αž‚αžΊαžαžΆ werf αž•αž„αžŠαŸ‚αžšαŸ” αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Dockerfile αž‘αŸ…αž€αŸ’αž“αž»αž„αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αžœαžΆαŸ”. αžαžΎβ€‹αž“αŸαŸ‡β€‹αž˜αžΆαž“αž“αŸαž™αžαžΆβ€‹αž˜αŸ‰αŸαž…β€‹?

  1. αžšαžΌαž”αž—αžΆαž–αž“αžΈαž˜αž½αž™αŸ—αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž–αžΈ Dockerfile αž˜αžΆαž“αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž˜αž½αž™αž αŸ…αžαžΆ dockerfile (αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„ werf αž“αŸ…αž‘αžΈαž“αŸαŸ‡).
  2. αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž†αžΆαž€ dockerfile werf αž‚αžŽαž“αžΆαž αžαŸ’αžαž›αŸαžαžΆαžŠαŸ‚αž›αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž˜αžΆαžαž·αž€αžΆαž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Dockerfile αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Dockerfile αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž αžαŸ’αžαž›αŸαžαžΆαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš dockerfile αž αžΎαž™ werf αž•αŸ’αžαž½αž…αž•αŸ’αžαžΎαž˜αž€αžΆαžšαž€αžŸαžΆαž„αž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸαŸ‡αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Dockerfile αžαŸ’αž˜αžΈαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž αžαŸ’αžαž›αŸαžαžΆαž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸαž“αŸ„αŸ‡ werf αž™αž€αžšαžΌαž”αž—αžΆαž–αž–αžΈαžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹ (αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž αžαŸ’αžαž›αŸαžαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ werf αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž“αŸαŸ‡αŸ”).
  3. αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž”αŸ’αžšαž˜αžΌαž›αž”αžΆαž“αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ werf publish (ឬ werf build-and-publish) αž αžΎαž™αž”αŸ’αžšαžΎαžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‘αŸ… Kubernetes αŸ” αžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ„αŸ‡αž•αŸ’αžŸαžΆαž™αž‘αŸ…αž€αžΆαž“αŸ‹ Docker Registry αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αž’αžΆαžαžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαžŸαž˜αŸ’αž’αžΆαž werf αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš αž–αŸ„αž›αž‚αžΊαž§αŸ” αžšαžΌαž”αž—αžΆαž–αž…αžΆαžŸαŸ‹ (αž…αžΆαžŸαŸ‹αž‡αžΆαž„ N αžαŸ’αž„αŸƒ) αžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αžŸαžΆαžαžΆ Git αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“ αž αžΎαž™αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αž’αžΆαžαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ”

αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαž…αŸ†αžŽαž»αž…αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž‘αžΈαž“αŸαŸ‡αž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαŸ–

αž€αŸ†αžŽαžαŸ‹αž…αŸ†αžŽαžΆαŸ† αž“αž·αž„αž€αžΆαžšαž”αŸ’αžšαž»αž„αž”αŸ’αžšαž™αŸαžαŸ’αž“

1. URL αžαžΆαž„αž€αŸ’αžšαŸ…αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαž€αŸ’αž“αž»αž„ ADD αž‘αŸαŸ”

αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αŸαŸ‡ αžœαžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžΎ URL αžαžΆαž„αž€αŸ’αžšαŸ…αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž“αŸ„αŸ‡αž‘αŸαŸ” ADD. Werf αž“αžΉαž„αž˜αž·αž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαžšαž€αžŸαžΆαž„αž‘αžΎαž„αžœαž·αž‰αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αž“αž’αžΆαž“αž“αŸ… URL αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” αž™αžΎαž„αž‚αŸ’αžšαŸ„αž„αž“αžΉαž„αž”αž“αŸ’αžαŸ‚αž˜αž˜αž»αžαž„αžΆαžšαž“αŸαŸ‡αž€αŸ’αž“αž»αž„αž–αŸαž›αž†αžΆαž”αŸ‹αŸ—αž“αŸαŸ‡αŸ”

2. αž’αŸ’αž“αž€αž˜αž·αž“αž’αžΆαž…αž”αž“αŸ’αžαŸ‚αž˜ .git αž‘αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž”αžΆαž“αž‘αŸαŸ”

αž“αž·αž™αžΆαž™αž‡αžΆαž‘αžΌαž‘αŸ…αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αžαž .git αž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž– - αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž’αžΆαž€αŸ’αžšαž€αŸ‹αžŠαŸαž€αžΆαž…αžŸαžΆαž αžΆαžœ αž αžΎαž™αž“αŸαŸ‡αž‡αžΆαž˜αžΌαž›αž αŸαžαž»αŸ–

  1. αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αžΆαž“ .git αž“αŸ…αžαŸ‚αžŸαŸ’αžαž·αžαž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™ αžœαžΆαž”αŸ†αž–αžΆαž“αž‚αŸ„αž›αž€αžΆαžšαžŽαŸ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ 12 αž€αžαŸ’αžαžΆαŸ– αžŠαŸ„αž™αžŸαžΆαžšαžšαžΌαž”αž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™αžαŸ’αžšαžΌαžœαžαŸ‚αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αžαžαŸ‚αž˜αž½αž™ αžœαžΆαž˜αž·αž“αž‚αž½αžšαž’αŸ’αžœαžΎαž”αžΆαž“αž‘αŸαŸ” git checkout αž€αžΆαžšβ€‹αž”αŸ’αžšαž–αŸ’αžšαžΉαžαŸ’αžβ€‹αžαžΆαž˜β€‹αž’αŸ†αž–αžΎβ€‹αž…αž·αžαŸ’αžαŸ”
  2. .git αž”αž„αŸ’αž€αžΎαž“αž‘αŸ†αž αŸ†αž“αŸƒαžšαžΌαž”αž—αžΆαž– (αžƒαŸ’αž›αžΆαŸ†αž„αž’αžΆαž…αž˜αžΆαž“αž‘αŸ†αž αŸ†αž’αŸ†αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž―αž€αžŸαžΆαžšαž’αŸ†αž˜αŸ’αžαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αžœαžΆαž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž›αž»αž”) αŸ” αž‘αŸ†αž αŸ†αž“αŸƒαž˜αŸ‚αž€αž’αžΆαž„αž€αžΆαžšαž„αžΆαžšαžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αžαŸ‚αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αžαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αž“αžΉαž„αž˜αž·αž“αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„ Git αž“αŸ„αŸ‡αž‘αŸαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž“αž·αž„αž€αžΆαžšαžŠαž€αž…αŸαž‰αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹ .git αž–αžΈαžšαžΌαž”αž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αžΉαž„αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸαŸ– αžšαžΌαž”αž—αžΆαž–αž“αžΉαž„αž“αŸ…αžαŸ‚αž‘αž‘αž½αž›αž”αžΆαž“αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž”αž“αŸ’αžαŸ‚αž˜ - αž“αŸαŸ‡αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž› Docker αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”
  3. Docker αž’αžΆαž…αž•αŸ’αžαž½αž…αž•αŸ’αžαžΎαž˜αž€αžΆαžšαž€αžŸαžΆαž„αž‘αžΎαž„αžœαž·αž‰αžŠαŸ‚αž›αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹ αž”αžΎαž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαžŠαžΌαž…αž‚αŸ’αž“αžΆαž€αŸ†αž–αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžΆαž„αžŸαž„αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž€αž–αžΈαžŠαžΎαž˜αžˆαžΎαž€αžΆαžšαž„αžΆαžšαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαŸ” αž§αž‘αžΆαž αžšαžŽαŸ GitLab αž”αž„αŸ’αž€αžΎαžαžαžαž€αŸ’αž›αžΌαž“αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž‚αŸ’αž“αžΆαŸ” /home/gitlab-runner/builds/HASH/[0-N]/yourproject αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€αŸ” αž€αžΆαžšαž•αŸ’αž‚αž»αŸ†αž‘αžΎαž„αžœαž·αž‰αž”αž“αŸ’αžαŸ‚αž˜αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαž .git αž‚αžΊαžαž»αžŸαž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αž€αŸ’αž›αžΌαž“αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„αžŠαžΌαž…αž‚αŸ’αž“αžΆ αž”αžΎαž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αžαžŠαžΌαž…αž‚αŸ’αž“αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž€αŸαžŠαŸ„αž™αŸ”

αž…αŸ†αžŽαž»αž…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž€αŸαž˜αžΆαž“αž•αž›αžœαž·αž”αžΆαž€αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎ werf αŸ” Werf αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αžŸαžΆαž„αžŸαž„αŸ‹αž˜αžΆαž“αžœαžαŸ’αžαž˜αžΆαž“αž“αŸ…αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž˜αž½αž™αž…αŸ†αž“αž½αž“ (ឧ. werf deploy) αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž‘αžΆαŸ†αž„αž“αŸαŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš werf αž‚αžŽαž“αžΆαž αžαŸ’αžαž›αŸαžαžΆαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ werf.yamlαž αžΎαž™αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆ - αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‘αŸαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αžΉαž„αž˜αž·αž“αž’αžΆαž…αž”αž“αŸ’αžαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αž‘αŸαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž αžαŸ’αžαž›αŸαžαžΆαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαžαŸ’αž›αžΉαž˜αžŸαžΆαžš .gitαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŠαŸ‚αž›αž˜αž·αž“αžŸαŸ’αžαž·αžαžŸαŸ’αžαŸαžšαž…αŸ†αž–αŸ„αŸ‡αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αž·αž“αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’ αž αžΎαž™ werf αž“αžΉαž„αž˜αž·αž“αž’αžΆαž…αž’αžαŸ‹αž‘αŸ„αžŸαž±αŸ’αž™αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αŸ‚αž”αž“αŸαŸ‡αž”αžΆαž“αž‘αŸ (αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αž αžŸαžΌαž˜αž˜αžΎαž› αž―αž€αžŸαžΆαžš).

αž‡αžΆαž‘αžΌαž‘αŸ… αž”αž“αŸ’αžαŸ‚αž˜αžαŸ‚αž―αž€αžŸαžΆαžšαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž˜αž½αž™αž…αŸ†αž“αž½αž“ αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† ADD αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŽαžΆαž€αŸαžŠαŸ„αž™αž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž“αž·αž„αž—αžΆαž–αž‡αžΏαž‡αžΆαž€αŸ‹αž“αŸƒαž€αžΆαžšαžŸαžšαžŸαŸαžš Dockerfileαž αžΎαž™αžœαžΆαž€αŸαž’αŸ’αžœαžΎαž’αŸ„αž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž“αžΌαžœαžŸαŸ’αžαŸαžšαž—αžΆαž–αž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŠαŸ‚αž›αž”αŸ’αžšαž˜αžΌαž›αž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž“αŸαŸ‡αŸ” Dockerfileαž‘αŸ…αž“αžΉαž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŠαŸ‚αž›αž˜αž·αž“αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž“αŸ…αž€αŸ’αž“αž»αž„ Git αŸ”

αž›αž‘αŸ’αž’αž•αž›

αž•αŸ’αž›αžΌαžœαžŠαŸ†αž”αžΌαž„αžšαž”αžŸαŸ‹αž™αžΎαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαžΆαž„αžŸαž„αŸ‹αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž‚αžΊαž–αž·αž”αžΆαž€ αžŸαŸ’αž˜αŸ„αŸ‡αžαŸ’αžšαž„αŸ‹ αž“αž·αž„αžαŸ’αžšαž„αŸ‹αŸ– αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαž”αŸ’αžšαžΎαžˆαžΎαž…αŸ’αžšαžαŸ‹αž“αŸ…αž›αžΎ Dockerfile αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš αž™αžΎαž„αž”αžΆαž“αžŸαžšαžŸαŸαžšαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžšαž”αžŸαŸ‹αž™αžΎαž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αŸ” αž αžΎαž™αž“αŸαŸ‡αž˜αžΆαž“αž‚αž»αžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž·αžšαž”αžŸαŸ‹αžœαžΆ: αž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž› Stapel αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž—αžΆαžšαž€αž·αž…αŸ’αž…αžšαž”αžŸαŸ‹αžœαžΆαž™αŸ‰αžΆαž„αž›αŸ’αž’αž₯αžαžαŸ’αž…αŸ„αŸ‡αŸ”

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαžΆαž„αžŸαž„αŸ‹αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž™αžΎαž„ αž™αžΎαž„αž”αžΆαž“αž”αžΆαžαŸ‹αž”αž„αŸ‹αž€αžΆαžšαž˜αžΎαž›αžƒαžΎαž‰αž“αŸƒαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Dockerfiles αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž€αŸ†αž αž»αžŸαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αž½αžŸαž‡αž»αž› αž αžΎαž™αž“αŸ…αž–αŸαž›αž’αž“αžΆαž‚αž αž™αžΎαž„αž˜αžΆαž“αž‚αž˜αŸ’αžšαŸ„αž„αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš Dockerfile αžšαž½αž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαž Stapel αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™ αž“αž·αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αž”αŸ’αžšαžΎ Kubernetes (αž§αž‘αžΆαž αžšαžŽαŸ αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž›αžΎαž’αŸ’αž“αž€αžšαžαŸ‹αžαžΆαž„αž€αŸ’αž“αž»αž„ Kubernetes αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž“αŸ…αž€αŸ’αž“αž»αž„ kaniko)αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžŸαŸ’αžšαžΆαž”αŸ‹αžαŸ‚αž˜αžΆαž“ Dockerfiles αž–αžΈαžšαž”αžΈαž€αŸ†αž–αž»αž„αžŸαŸ’αžαž·αžαž“αŸ…αž‡αž»αŸ†αžœαž·αž‰... αžŸαžΆαž€αž›αŸ’αž”αž„ werf!

PS αž”αž‰αŸ’αž‡αžΈαž―αž€αžŸαžΆαžšαž›αžΎαž”αŸ’αžšαž’αžΆαž“αž”αž‘

αžŸαžΌαž˜αž’αžΆαž“αž•αž„αžŠαŸ‚αžšαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αž›αž»αž€αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ– "werf - αž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI / CD αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes (αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ… αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌ)"αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹