αž‚αž·αžαžŠαŸ„αž™αž”αŸ’αžšαž»αž„αž”αŸ’αžšαž™αŸαžαŸ’αž“αž˜αž»αž“αž–αŸαž›αž”αŸ’αžšαžΎ Docker-in-Docker αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI αž¬αž”αžšαž·αž™αžΆαž€αžΆαžŸαžŸαžΆαž€αž›αŸ’αž”αž„

αž‚αž·αžαžŠαŸ„αž™αž”αŸ’αžšαž»αž„αž”αŸ’αžšαž™αŸαžαŸ’αž“αž˜αž»αž“αž–αŸαž›αž”αŸ’αžšαžΎ Docker-in-Docker αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI αž¬αž”αžšαž·αž™αžΆαž€αžΆαžŸαžŸαžΆαž€αž›αŸ’αž”αž„

Docker-in-Docker αž‚αžΊαž‡αžΆαž”αžšαž·αžŸαŸ’αžαžΆαž“αžŠαŸαž˜αž·αž“ Docker αž“αž·αž˜αŸ’αž˜αž·αžαžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžšαžαŸ’αž›αž½αž“αžœαžΆαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžšαŸ” αž‚αŸ„αž›αž”αŸ†αžŽαž„αžŸαŸ†αžαžΆαž“αŸ‹αž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαž Docker-in-Docker αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž‡αž½αž™αž’αž—αž·αžœαžŒαŸ’αž Docker αžαŸ’αž›αž½αž“αž―αž„αŸ” αž˜αž“αž»αžŸαŸ’αžŸαž‡αžΆαž…αŸ’αžšαžΎαž“αž”αŸ’αžšαžΎαžœαžΆαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Jenkins CI αŸ” αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž“αŸ…αž–αŸαž›αžŠαŸ†αž”αžΌαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αž‰αŸ’αž αžΆαž€αžΎαžαž‘αžΎαž„αžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ€αžŸαžœαžΆαž„αžŠαŸ„αž™αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Docker αž“αŸ…αž€αŸ’αž“αž»αž„αž’αž»αž„ Jenkins CI αŸ” αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž–αžΈαžšαž”αŸ€αž”αž’αŸ’αžœαžΎαžœαžΆαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž›αžΎαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž…αž»αž„αž€αŸ’αžšαŸ„αž™αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž’αžΆαž“αž•αŸ’αž“αŸ‚αž€αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸƒαž’αžαŸ’αžαž”αž‘ "αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆ"αŸ”

αž‚αž·αžαžŠαŸ„αž™αž”αŸ’αžšαž»αž„αž”αŸ’αžšαž™αŸαžαŸ’αž“αž˜αž»αž“αž–αŸαž›αž”αŸ’αžšαžΎ Docker-in-Docker αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI αž¬αž”αžšαž·αž™αžΆαž€αžΆαžŸαžŸαžΆαž€αž›αŸ’αž”αž„

Docker-in-Docker: "αž›αŸ’αž’"

αž‡αžΆαž„αž–αžΈαžšαž†αŸ’αž“αžΆαŸ†αž˜αž»αž“αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž› Docker αž‘αž„αŸ‹ - αž―αž€αžŸαž·αž‘αŸ’αž’αž·αž“αž·αž„αžŸαžšαžŸαŸαžš αž€αŸ†αžŽαŸ‚αžŠαŸ†αž”αžΌαž„αž“αŸƒαžŒαžΈαž“. αž‚αŸ„αž›αžŠαŸ…αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž‡αž½αž™αž€αŸ’αžšαž»αž˜αžŸαŸ’αž“αžΌαž›αž’αž—αž·αžœαžŒαŸ’αž Docker αž›αžΏαž“αž‡αžΆαž„αž˜αž»αž“αŸ” αž˜αž»αž“αž–αŸαž› Docker-in-Docker αžœαžŠαŸ’αžαž“αŸƒαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž’αž˜αŸ’αž˜αžαžΆαž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ–

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

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαžŠαŸαžŸαŸ’αžšαžŸαŸ‹αžŸαŸ’αž’αžΆαž αž“αž·αž„αž’αžΆαž…αž•αž›αž·αžαž‘αžΎαž„αžœαž·αž‰αž”αžΆαž“ (αž“αŸ„αŸ‡αž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„αž’αž»αž„αž˜αž½αž™) αž“αŸ„αŸ‡αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αŸ–

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

αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž˜αž€αžŠαž›αŸ‹αž“αŸƒ Docker-in-Docker αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‘αŸ…αž‡αžΆαžŸαžΆαž˜αž‰αŸ’αž‰αž‡αžΆαž„αž˜αž»αž“αŸ–

  • αž€αžΆαžšαž›αž½αž…αž…αžΌαž› hack;
  • αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆ + αž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž˜αž½αž™;
  • αž’αŸ’αžœαžΎαžœαžŠαŸ’αžαž˜αŸ’αžαž„αž‘αŸ€αžαŸ”

αžœαž·αž’αžΈαž“αŸαŸ‡αž˜αž·αž“αž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„αž‘αŸ?

αž‚αž·αžαžŠαŸ„αž™αž”αŸ’αžšαž»αž„αž”αŸ’αžšαž™αŸαžαŸ’αž“αž˜αž»αž“αž–αŸαž›αž”αŸ’αžšαžΎ Docker-in-Docker αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI αž¬αž”αžšαž·αž™αžΆαž€αžΆαžŸαžŸαžΆαž€αž›αŸ’αž”αž„

Docker-in-Docker: "αž’αžΆαž€αŸ’αžšαž€αŸ‹"

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž•αŸ’αž‘αž»αž™αž‘αŸ…αž“αžΉαž„αž‡αŸ†αž“αžΏαžŠαŸαž–αŸαž‰αž“αž·αž™αž˜ Docker-in-Docker αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžαžΆαžšαžΆ 100% αžŸαžαŸ’αžœαžŸαŸαŸ‡ αž“αž·αž„αžŸαžαŸ’αžœαž…αž˜αŸ’αž›αŸ‚αž€αž“αŸ„αŸ‡αž‘αŸαŸ” αž’αŸ’αžœαžΈβ€‹αžŠαŸ‚αž›β€‹αžαŸ’αž‰αž»αŸ†β€‹αž…αž„αŸ‹β€‹αž“αž·αž™αžΆαž™β€‹αž‚αžΊβ€‹αžαžΆβ€‹αž˜αžΆαž“β€‹αž”αž‰αŸ’αž αžΆβ€‹αž‡αžΆβ€‹αž…αŸ’αžšαžΎαž“β€‹αžŠαŸ‚αž›β€‹αž’αŸ’αž“αž€β€‹αž’αž—αž·αžœαžŒαŸ’αžαž“αŸβ€‹αžαŸ’αžšαžΌαžœβ€‹αžŠαžΉαž„β€‹αŸ”

αž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž–αž½αž€αž‚αŸαž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„ LSMs (αž˜αŸ‰αžΌαžŒαž»αž›αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž›αžΈαž“αž»αž…) αžŠαžΌαž…αž‡αžΆ AppArmor αž“αž·αž„ SELinuxαŸ– αž“αŸ…αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž»αž„αžαžΊαž“αŸαžš "Docker αžαžΆαž„αž€αŸ’αž“αž»αž„" αž’αžΆαž…αž–αŸ’αž™αžΆαž™αžΆαž˜αž’αž“αž»αžœαžαŸ’αžαž‘αž˜αŸ’αžšαž„αŸ‹αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αžŠαŸ‚αž›αž“αžΉαž„αž”αŸ‰αŸ‡αž‘αž„αŸ’αž‚αž·αž…αž¬αž…αŸ’αžšαž‘αŸ† "Docker αžαžΆαž„αž€αŸ’αžšαŸ…" αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αž‰αŸ’αž αžΆαž›αŸ†αž”αžΆαž€αž”αŸ†αž•αž»αžαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž–αŸ’αž™αžΆαž™αžΆαž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžŠαžΎαž˜αž“αŸƒαž‘αž„αŸ‹ -privileged αŸ” αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž αžΎαž™αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αžΉαž„αž αž»αž…αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ Debian αž“αž·αž„ Ubuntu test VMs αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž–αž½αž€αž‚αŸαž“αžΉαž„αž‚αžΆαŸ†αž„ αž“αž·αž„αž†αŸαŸ‡αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžšαž”αžŸαŸ‹ Michael Crosby (αž‚αžΆαžαŸ‹αž˜αžΆαž“ Fedora αžŠαžΌαž…αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž…αž„αž…αžΆαŸ†)αŸ” αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž’αžΆαž…αž…αžΆαŸ†αž–αžΈαž˜αžΌαž›αž αŸαžαž»αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαž“αŸƒαž”αž‰αŸ’αž αžΆαž“αŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ Mike αž‚αžΊαž‡αžΆαž˜αž“αž»αžŸαŸ’αžŸαž†αŸ’αž›αžΆαžαž˜αŸ’αž“αžΆαž€αŸ‹αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ SELINUX=enforce (αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αŸ’αžšαžΎ AppArmor) αž αžΎαž™αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž”αžΆαž“αž™αž€αž‘αž˜αŸ’αžšαž„αŸ‹ SELinux αž‘αŸ…αž€αŸ’αž“αž»αž„αž‚αžŽαž“αžΈαž“αŸ„αŸ‡αž‘αŸαŸ”

Docker-in-Docker: "αž’αžΆαž€αŸ’αžšαž€αŸ‹"

αž”αž‰αŸ’αž αžΆαž‘αžΈαž–αžΈαžšαž‚αžΊαž‡αžΆαž˜αž½αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž‰αŸ’αž‡αžΆαž•αŸ’αž‘αž»αž€ Docker αŸ” αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Docker-in-Docker αž“αŸ„αŸ‡ Docker αžαžΆαž„αž€αŸ’αžšαŸ…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž›αžΎαž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžšαž’αž˜αŸ’αž˜αžαžΆ (EXT4, BTRFS αž¬αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž˜αžΆαž“) αž αžΎαž™ Docker αžαžΆαž„αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž…αž˜αŸ’αž›αž„αž›αžΎαž€αžΆαžšαžŸαžšαžŸαŸαžš (AUFS, BTRFS, Device Mapper αž›αŸ” ) αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎ Docker αžαžΆαž„αž€αŸ’αžšαŸ…)αŸ” αž“αŸαŸ‡αž”αž„αŸ’αž€αžΎαžαž”αž“αŸ’αžŸαŸ†αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž“αžΉαž„αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž’αŸ’αž“αž€αž“αžΉαž„αž˜αž·αž“αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš AUFS αž“αŸ…αž›αžΎ AUFS αž”αžΆαž“αž‘αŸαŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš BTRFS αž“αŸ…αž›αžΎαž€αŸ†αž–αžΌαž›αž“αŸƒ BTRFS αžœαžΆαž‚αž½αžšαžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ†αž”αžΌαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž˜αžΆαž“αž”αžŽαŸ’αžαž»αŸ†αžšαž„αžŠαŸ‚αž›αž”αžΆαž“αžŠαžΆαž€αŸ‹αžšαž½αž… αž€αžΆαžšαž›αž»αž”αž—αžΆαž‚αžšαž„αž˜αŸαž“αžΉαž„αž”αžšαžΆαž‡αŸαž™αŸ” αž˜αŸ‰αžΌαžŒαž»αž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ‚αž“αž‘αžΈαž§αž”αž€αžšαžŽαŸαž˜αž·αž“αž˜αžΆαž“αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž‘αŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžšαžŽαžΈ Docker αž…αŸ’αžšαžΎαž“αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžœαžΆαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžαŸ‚αž˜αž½αž™ αž–αž½αž€αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αžΉαž„αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰ (αž“αž·αž„αž˜αžΆαž“αž₯αž‘αŸ’αž’αž·αž–αž›) αžšαžΌαž”αž—αžΆαž–αž“αŸ…αž›αžΎαž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€ αž“αž·αž„αž“αŸ…αž›αžΎαž§αž”αž€αžšαžŽαŸαž”αž˜αŸ’αžšαž»αž„αž‘αž»αž€αž€αž»αž„αžαžΊαž“αŸαžšαŸ” αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αžšαžΏαž„β€‹αž’αžΆαž€αŸ’αžšαž€αŸ‹αŸ”

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

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

Docker-in-DockerαŸ– αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž’αžΆαž€αŸ’αžšαž€αŸ‹αž‘αŸ…αŸ—

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

αž˜αž“αž»αžŸαŸ’αžŸαžŠαŸ‚αž›αž˜αžΆαž“αž‚αŸ†αž“αž·αžαž…αŸ’αž“αŸƒαž”αŸ’αžšαžŒαž·αžαž˜αž½αž™αž…αŸ†αž“αž½αž“αž”αžΆαž“αž–αŸ’αž™αžΆαž™αžΆαž˜αž…αž„ /var/lib/docker αž–αžΈ host αž‘αŸ… Docker-in-Docker containerαŸ” αž–αŸαž›αžαŸ’αž›αŸ‡αž–αž½αž€αž‚αŸαž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€ /var/lib/docker αž‡αžΆαž˜αž½αž™αž’αž»αž„αž…αŸ’αžšαžΎαž“αŸ”

αž‚αž·αžαžŠαŸ„αž™αž”αŸ’αžšαž»αž„αž”αŸ’αžšαž™αŸαžαŸ’αž“αž˜αž»αž“αž–αŸαž›αž”αŸ’αžšαžΎ Docker-in-Docker αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI αž¬αž”αžšαž·αž™αžΆαž€αžΆαžŸαžŸαžΆαž€αž›αŸ’αž”αž„
αžαžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αžαžΌαž…αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αŸ? αž–αŸ’αžšαŸ„αŸ‡αž“αŸαŸ‡αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž”αŸ†αž•αŸ’αž›αžΆαž‰αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€!

αžŠαŸαž˜αž·αž“ Docker αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž•αŸ’αžαžΆαž…αŸ‹αž˜αž»αžαž‘αŸ…αž€αžΆαž“αŸ‹ /var/lib/docker αŸ” αž‚αŸ’αž˜αžΆαž“β€‹αž’αŸ’αžœαžΈβ€‹αž•αŸ’αžŸαŸαž„β€‹αž‘αŸ€αžβ€‹αžŠαŸ‚αž›β€‹αž‚αž½αžš "αž”αŸ‰αŸ‡ αž…αžΆαž€αŸ‹ αž¬β€‹αž•αž›αž·αž" αž―αž€αžŸαžΆαžš Docker αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž‘αžΈαžαžΆαŸ†αž„β€‹αž€αŸ’αž“αž»αž„β€‹αžαžβ€‹αž“αŸαŸ‡β€‹αž‘αŸαŸ”

αž αŸαžαž»β€‹αž’αŸ’αžœαžΈβ€‹αž”αžΆαž“β€‹αž‡αžΆβ€‹αž™αŸ‰αžΆαž„β€‹αž“αŸαŸ‡? αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž˜αŸαžšαŸ€αž“αžŠαŸαž›αŸ†αž”αžΆαž€αž”αŸ†αž•αž»αžαž˜αž½αž™αžŠαŸ‚αž›αž”αžΆαž“αžšαŸ€αž“αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž’αž—αž·αžœαžŒαŸ’αž dotCloud αŸ” αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž€αž»αž„αžαžΊαž“αŸαžš dotCloud αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž…αžΌαž›αž”αŸ’αžšαžΎ /var/lib/dotcloud αž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαŸ” αž›αŸ’αž”αž·αž…αž”αŸ„αž€αž”αž‰αŸ’αž†αŸ„αžαžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž‡αŸ†αž“αž½αžŸαž―αž€αžŸαžΆαžšαž’αžΆαžαžΌαž˜αž·αž€ (αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αž“αŸ…αž“αžΉαž„αž€αž“αŸ’αž›αŸ‚αž„) αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž€αžΌαžŠαžŠαŸ„αž™αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† αž“αž·αž„αž€αžΆαžšαž…αžΆαž€αŸ‹αžŸαŸ„αž‡αžΆαž€αžΆαžαž–αŸ’αžœαž€αž·αž…αŸ’αž… αž“αž·αž„αž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‡αžΆαž˜αž½αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αžŠαžΌαž…αž‡αžΆ SQLite αž“αž·αž„ BDB αž˜αž·αž“αžαŸ‚αž„αžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸαŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž€αŸ†αž–αž»αž„αžšαž…αž“αžΆαž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž€αž»αž„αžαžΊαž“αŸαžšαžšαž”αžŸαŸ‹αž™αžΎαž„ αžŠαŸ‚αž›αž‘αžΈαž”αŸ†αž•αž»αžαž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‘αŸ…αž‡αžΆ Docker αž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžšαž…αž“αžΆαžŠαŸαž’αŸ†αž˜αž½αž™αž‚αžΊαž€αžΆαžšαž”αž„αŸ’αžšαž½αž”αž”αž„αŸ’αžšαž½αž˜αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž€αž»αž„αžαžΊαž“αŸαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αžšαŸ„αž˜αžŠαŸαž˜αž·αž“αžαŸ‚αž˜αž½αž™ αžŠαžΎαž˜αŸ’αž”αžΈαž€αž˜αŸ’αž…αžΆαžαŸ‹αž…αŸ„αž›αž“αžΌαžœαž—αžΆαž–αžŸαž˜αž αŸαžαž»αžŸαž˜αž•αž›αžšαž½αž˜αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”

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

αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αžαž /var/lib/docker αžšαžœαžΆαž„ Docker αž…αŸ’αžšαžΎαž“ αž’αŸ’αž“αž€αž“αžΉαž„αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαŸ” αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž“αŸαŸ‡αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“ αž‡αžΆαž–αž·αžŸαŸαžŸαž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŠαŸ†αž”αžΌαž„αž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαŸ” "αžŸαŸ’αžαžΆαž”αŸ‹ αž˜αŸ‰αžΆ αžαŸ’αž‰αž»αŸ†αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš ubuntu αž‡αžΆ docker αž”αžΆαž“!" αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αžŸαžΆαž€αž›αŸ’αž”αž„β€‹αž’αŸ’αžœαžΈβ€‹αžŠαŸ‚αž›β€‹αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰β€‹αž‡αžΆαž„β€‹αž“αŸαŸ‡ αžŠαžΌαž…αž‡αžΆβ€‹αž‘αžΆαž‰β€‹αžšαžΌαž”αž—αžΆαž–β€‹αžŠαžΌαž…αž‚αŸ’αž“αžΆβ€‹αž–αžΈβ€‹αž§αž‘αžΆαž αžšαžŽαŸβ€‹αž–αžΈαžšβ€‹αž•αŸ’αžŸαŸαž„β€‹αž‚αŸ’αž“αžΆ αž αžΎαž™β€‹αž’αŸ’αž“αž€β€‹αž“αžΉαž„β€‹αžƒαžΎαž‰β€‹αž–αž·αž—αž–αž›αŸ„αž€β€‹αž†αŸαŸ‡αŸ”

αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’ CI αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹ αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžœαž·αž‰ αžšαžΆαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αž»αž„αžαžΊαž“αŸαžš Docker-in-Docker αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αžΎαž„αžœαž·αž‰ αž“αŸ„αŸ‡αž’αŸ’αž“αž€αž“αžΉαž„αž”αŸ’αžšαžαž»αž™αž“αžΉαž„αž‘αž˜αŸ’αž›αžΆαž€αŸ‹ nuke αž‘αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžšαž”αžŸαŸ‹αžœαžΆαŸ” αž“αŸαŸ‡αž˜αž·αž“αž‘αžΌαž™αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡!

αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆ

αžαŸ„αŸ‡β€‹αž˜αž½αž™β€‹αž‡αŸ†αž αžΆαž“β€‹αžαž™β€‹αž€αŸ’αžšαŸ„αž™αŸ” αžαžΎαž’αŸ’αž“αž€αž–αž·αžαž‡αžΆαžαŸ’αžšαžΌαžœαž€αžΆαžš Docker-in-Docker αž¬αžαžΎαž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž…αž„αŸ‹αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Docker αž“αž·αž„αž”αž„αŸ’αž€αžΎαž αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž»αž„αžαžΊαž“αŸαžš αž“αž·αž„αžšαžΌαž”αž—αžΆαž–αž–αžΈαž”αŸ’αžšαž–αŸαž“αŸ’αž’ CI αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αžαžŽαŸˆαžŠαŸ‚αž›αž”αŸ’αžšαž–αŸαž“αŸ’αž’ CI αžαŸ’αž›αž½αž“αž―αž„αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžš?

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

αž“αž·αž™αžΆαž™αž±αŸ’αž™αžŸαžΆαž˜αž‰αŸ’αž‰ αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž»αž„αžαžΊαž“αŸαžš CI αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ (Jenkins αž¬αž•αŸ’αžŸαŸαž„αž‘αŸ€αž) αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαž›αž½αž…αž…αžΌαž›αž’αŸ’αžœαžΈαž˜αž½αž™αž‡αžΆαž˜αž½αž™ Docker-in-Docker αžŸαžΌαž˜αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžœαžΆαž‡αžΆαž˜αž½αž™αž”αž“αŸ’αž‘αžΆαžαŸ‹αŸ–

docker run -v /var/run/docker.sock:/var/run/docker.sock ...

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž€αž»αž„αžαžΊαž“αŸαžšαž“αŸαŸ‡αž“αžΉαž„αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎαžšαž“αŸ’αž’ Docker αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž αžΎαž™αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž»αž„αžαžΊαž“αŸαžšαž”αžΆαž“αŸ” αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚αžαžΆαž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž»αž„αžαžΊαž“αŸαžš "αž€αž»αž˜αžΆαžš" αžœαžΆαž“αžΉαž„αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αž»αž„ "αž”αž„αž”αŸ’αž’αžΌαž“αž”αž„αŸ’αž€αžΎαž" αŸ”

αžŸαžΆαž€αž›αŸ’αž”αž„αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαžšαžΌαž”αž—αžΆαž– docker αž•αŸ’αž›αžΌαžœαž€αžΆαžš (αžŠαŸ‚αž›αž˜αžΆαž“ Docker binary):

docker run -v /var/run/docker.sock:/var/run/docker.sock 
           -ti docker

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

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

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž”αŸ’αžšαžΎ Docker αž–αžΈ Jenkins CI αž’αŸ’αž“αž€αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸ 2αŸ–
αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Docker CLI αžŠαŸ„αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžœαŸαž…αžαŸ’αž…αž”αŸ‹αžšαžΌαž”αž—αžΆαž–αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ (ឧ. αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžšαžΌαž”αž—αžΆαž–αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž•αŸ’αž’αŸ‚αž€αž›αžΎ Debian αžŸαžΌαž˜αž”αŸ’αžšαžΎαž€αž‰αŸ’αž…αž”αŸ‹ .deb) αžŠαŸ„αž™αž”αŸ’αžšαžΎ Docker APIαŸ”

αž€αžΆαžšαž•αŸ’αžŸαžΆαž™αž–αžΆαžŽαž·αž‡αŸ’αž‡αž€αž˜αŸ’αž˜αž˜αž½αž™αž…αŸ†αž“αž½αž“πŸ™‚

αžŸαžΌαž˜αž’αžšαž‚αž»αžŽαž…αŸ†αž–αŸ„αŸ‡αž€αžΆαžšαžŸαŸ’αž“αžΆαž€αŸ‹αž“αŸ…αž‡αžΆαž˜αž½αž™αž–αž½αž€αž™αžΎαž„αŸ” αžαžΎαž’αŸ’αž“αž€αž…αžΌαž›αž…αž·αžαŸ’αžαž’αžαŸ’αžαž”αž‘αžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αŸ? αž…αž„αŸ‹αž˜αžΎαž›αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž‘αŸ? αž‚αžΆαŸ†αž‘αŸ’αžšαž™αžΎαž„αžŠαŸ„αž™αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αž¬αžŽαŸ‚αž“αžΆαŸ†αžŠαž›αŸ‹αž˜αž·αžαŸ’αžαž—αž€αŸ’αžαž·, cloud VPS αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž…αžΆαž”αŸ‹αž–αžΈ $4.99, analogue αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž“αŸƒαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž˜αŸ’αžšαž·αžαž’αžΆαžαž» αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αž–αž½αž€αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αŸ– αž€αžΆαžšαž–αž·αžαž‘αžΆαŸ†αž„αž˜αžΌαž›αž’αŸ†αž–αžΈ VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps αž…αžΆαž”αŸ‹αž–αžΈ $19 αž¬αžšαž”αŸ€αž”αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ? (αž’αžΆαž…αž”αŸ’αžšαžΎαž”αžΆαž“αž‡αžΆαž˜αž½αž™ RAID1 αž“αž·αž„ RAID10 αžšαž αžΌαžαžŠαž›αŸ‹ 24 cores αž“αž·αž„αžšαž αžΌαžαžŠαž›αŸ‹ 40GB DDR4)αŸ”

Dell R730xd 2x αžαŸ„αž€αž‡αžΆαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αž‡αŸ’αžˆαž˜αžŽαŸ’αžŒαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™ Equinix Tier IV αž“αŸ…αž‘αžΈαž€αŸ’αžšαž»αž„ Amsterdam? αž“αŸ…αž‘αžΈαž“αŸαŸ‡ 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV αž…αžΆαž”αŸ‹αž–αžΈ $199 αž“αŸ…αž”αŸ’αžšαž‘αŸαžŸαž αžΌαž‘αž„αŸ‹! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - αž…αžΆαž”αŸ‹αž–αžΈ $99! αž’αžΆαž“β€‹αž’αŸ†αž–αžΈ αžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαžαž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αžαŸ’αž“αžΆαž€αŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Dell R730xd E5-2650 v4 αžŠαŸ‚αž›αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒ 9000 αž’αžΊαžšαŸ‰αžΌαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž½αž™αž€αžΆαž€αŸ‹?

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

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