ื—ืฉื•ื‘ ื”ื™ื˜ื‘ ืœืคื ื™ ื”ืฉื™ืžื•ืฉ ื‘-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: "ื˜ื•ื‘"

ืœืคื ื™ ื™ื•ืชืจ ืžืฉื ืชื™ื™ื ื”ื›ื ืกืชื™ ืœื“ื•ืงืจ ื“ื’ืœ โ€“ืžื™ื•ื—ืก ื•ื›ืชื‘ ื”ื’ืจืกื” ื”ืจืืฉื•ื ื” ืฉืœ dind. ื”ืžื˜ืจื” ื”ื™ื™ืชื” ืœืขื–ื•ืจ ืœืฆื•ื•ืช ื”ืœื™ื‘ื” ืœืคืชื— ืืช Docker ืžื”ืจ ื™ื•ืชืจ. ืœืคื ื™ Docker-in-Docker, ืžื—ื–ื•ืจ ื”ืคื™ืชื•ื— ื”ื˜ื™ืคื•ืกื™ ื ืจืื” ื›ืš:

  • ืคืจื™ืฆืช ืคืจื™ืฆื•ืช;
  • ืœึดื‘ื ื•ึนืช;
  • ืขืฆื™ืจืช ื“ืžื•ืŸ ื“ื•ืงืจ ืคื•ืขืœ;
  • ื”ืฉืงืช ื“ืžื•ืŸ ื“ื•ืงืจ ื—ื“ืฉ;
  • ื‘ื“ื™ืงื”;
  • ืœื—ื–ื•ืจ ืขืœ ื”ืžื—ื–ื•ืจ.

ืื ืจืฆื™ืช ืœื™ืฆื•ืจ ืžื›ืœื•ืœ ื™ืคื” ื•ื ื™ืชืŸ ืœืฉื—ื–ื•ืจ (ื›ืœื•ืžืจ, ื‘ืžื™ื›ืœ), ืื– ื–ื” ื ื”ื™ื” ื™ื•ืชืจ ืžื•ืจื›ื‘:

  • ืคืจื™ืฆืช ืคืจื™ืฆื•ืช;
  • ื•ื“ื ืฉื’ืจืกืช Docker ืคื•ืขืœืช;
  • ืœื‘ื ื•ืช Docker ื—ื“ืฉ ืขื Docker ื”ื™ืฉืŸ;
  • ืขืฆื•ืจ ืืช ื“ืžื•ืŸ ื”ื“ื•ืงืจ;
  • ื”ืชื—ืœ ื“ืžื•ืŸ ื“ื•ืงืจ ื—ื“ืฉ;
  • ืžึดื‘ึฐื—ึธืŸ;
  • ืขืฆื•ืจ ื“ืžื•ืŸ ื“ื•ืงืจ ื—ื“ืฉ;
  • ื—ื–ื•ืจ.

ืขื ื›ื ื™ืกืชื• ืฉืœ Docker-in-Docker, ื”ืชื”ืœื™ืš ื”ืคืš ืœืคืฉื•ื˜ ื™ื•ืชืจ:

  • ืคืจื™ืฆืช ืคืจื™ืฆื•ืช;
  • ื”ืจื›ื‘ื” + ื”ืฉืงื” ื‘ืฉืœื‘ ืื—ื“;
  • ืœื—ื–ื•ืจ ืขืœ ื”ืžื—ื–ื•ืจ.

ื–ื” ืœื ื”ืจื‘ื” ื™ื•ืชืจ ื˜ื•ื‘ ื›ื›ื”?

ื—ืฉื•ื‘ ื”ื™ื˜ื‘ ืœืคื ื™ ื”ืฉื™ืžื•ืฉ ื‘-Docker-in-Docker ืขื‘ื•ืจ CI ืื• ืกื‘ื™ื‘ืช ื‘ื“ื™ืงื”

Docker-in-Docker: "ืจืข"

ืขื ื–ืืช, ื‘ื ื™ื’ื•ื“ ืœืืžื•ื ื” ื”ืจื•ื•ื—ืช, Docker-in-Docker ืื™ื ื• 100% ื›ื•ื›ื‘ื™ื, ืกื•ืกื™ ืคื•ื ื™ ื•ื—ื“ื™ ืงืจืŸ. ืžื” ืฉืื ื™ ืžืชื›ื•ื•ืŸ ื”ื•ื ืฉื™ืฉ ื›ืžื” ื‘ืขื™ื•ืช ืฉืžืคืชื— ืฆืจื™ืš ืœื”ื™ื•ืช ืžื•ื“ืข ืœื”ืŸ.

ืื—ื“ ืžื”ื ื ื•ื’ืข ืœ-LSMs (ืžื•ื“ื•ืœื™ ืื‘ื˜ื—ื” ืฉืœ ืœื™ื ื•ืงืก) ื›ื’ื•ืŸ AppArmor ื•-SELinux: ื‘ืขืช ื”ืคืขืœืช ืงื•ื ื˜ื™ื™ื ืจ, ื”-"Docker ื”ืคื ื™ืžื™" ืขืฉื•ื™ ืœื ืกื•ืช ืœื”ื—ื™ืœ ืคืจื•ืคื™ืœื™ ืื‘ื˜ื—ื” ืฉื™ืกืชื›ืกื›ื• ืื• ื™ื‘ืœื‘ืœื• ืืช ื”"Docker ื”ื—ื™ืฆื•ื ื™". ื–ื•ื”ื™ ื”ื‘ืขื™ื” ื”ืงืฉื” ื‘ื™ื•ืชืจ ืœืคืชืจื•ืŸ ื›ืืฉืจ ืžื ืกื™ื ืœืžื–ื’ ืืช ื”ื™ื™ืฉื•ื ื”ืžืงื•ืจื™ ืฉืœ ื”ื“ื’ืœ -ืคืจื™ื‘ื™ืœื’ื™. ื”ืฉื™ื ื•ื™ื™ื ืฉืœื™ ืขื‘ื“ื• ื•ื›ืœ ื”ื‘ื“ื™ืงื•ืช ืขื‘ืจื• ืขืœ ืžื›ื•ื ืช ื”ื“ื‘ื™ืืŸ ืฉืœื™ ื•-VMs ื”ืžื‘ื—ืŸ ืฉืœ ืื•ื‘ื•ื ื˜ื•, ืื‘ืœ ื”ื ื”ื™ื• ืงื•ืจืกื™ื ื•ื ืฆืจื‘ื™ื ื‘ืžื—ืฉื‘ ืฉืœ ืžื™ื™ืงืœ ืงืจื•ืกื‘ื™ (ื”ื™ื” ืœื• ืคื“ื•ืจื” ื›ื–ื›ื•ืจ). ืื ื™ ืœื ื–ื•ื›ืจ ืืช ื”ืกื™ื‘ื” ื”ืžื“ื•ื™ืงืช ืœื‘ืขื™ื”, ืื‘ืœ ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื–ื” ื‘ื’ืœืœ ืฉืžื™ื™ืง ื”ื•ื ื‘ื—ื•ืจ ื—ื›ื ืฉืขื•ื‘ื“ ืขื SELINUX=enforce (ื”ืฉืชืžืฉืชื™ ื‘-AppArmor) ื•ื”ืฉื™ื ื•ื™ื™ื ืฉืœื™ ืœื ืœืงื—ื• ื‘ื—ืฉื‘ื•ืŸ ืคืจื•ืคื™ืœื™ SELinux.

Docker-in-Docker: "ืจื•ืข"

ื”ื‘ืขื™ื” ื”ืฉื ื™ื™ื” ื”ื™ื ืขื ืžื ื”ืœื™ ื”ืื—ืกื•ืŸ ืฉืœ Docker. ื›ืืฉืจ ืืชื” ืžืคืขื™ืœ Docker-in-Docker, Docker ื—ื™ืฆื•ื ื™ ืคื•ืขืœ ืขืœ ื’ื‘ื™ ืžืขืจื›ืช ืงื‘ืฆื™ื ืจื’ื™ืœื” (EXT4, BTRFS, ืื• ื›ืœ ืžื” ืฉื™ืฉ ืœืš) ื•-Docker ืคื ื™ืžื™ ืคื•ืขืœ ืขืœ ื’ื‘ื™ ืžืขืจื›ืช ื”ืขืชืงื” ืขืœ ื›ืชื™ื‘ื” (AUFS, BTRFS, Device Mapper , ื•ื›ื•'). , ื‘ื”ืชืื ืœืžื” ืฉืžื•ื’ื“ืจ ืœืฉื™ืžื•ืฉ ื‘-Docker ื—ื™ืฆื•ื ื™). ื–ื” ื™ื•ืฆืจ ืฉื™ืœื•ื‘ื™ื ืจื‘ื™ื ืฉืœื ื™ืขื‘ื“ื•. ืœื“ื•ื’ืžื”, ืœื ืชื•ื›ืœ ืœื”ืจื™ืฅ AUFS ืขืœ ื’ื‘ื™ AUFS.

ืื ืืชื” ืžืคืขื™ืœ BTRFS ืขืœ ื’ื‘ื™ BTRFS, ื–ื” ืืžื•ืจ ืœืขื‘ื•ื“ ื‘ื”ืชื—ืœื”, ืื‘ืœ ื‘ืจื’ืข ืฉื™ืฉ ื ืคื—ื™ ืžืฉื ื” ืžืงื•ื ื ื™ื, ืžื—ื™ืงืช ืชืช ื ืคื— ื”ืื‘ ืชื™ื›ืฉืœ. ืœืžื•ื“ื•ืœ Device Mapper ืื™ืŸ ืžืจื—ื‘ ืฉืžื•ืช, ื›ืš ืฉืื ืžื•ืคืขื™ Docker ืžืจื•ื‘ื™ื ืžืจื™ืฆื™ื ืื•ืชื• ืขืœ ืื•ืชื• ืžื—ืฉื‘, ื›ื•ืœื ื™ื•ื›ืœื• ืœืจืื•ืช (ื•ืœื”ืฉืคื™ืข) ืขืœ ื”ืชืžื•ื ื•ืช ื–ื• ื‘ื–ื• ื•ื‘ืžื›ืฉื™ืจื™ ื”ื’ื™ื‘ื•ื™ ืฉืœ ื”ืงื•ื ื˜ื™ื™ื ืจ. ื–ื” ืจืข.

ื™ืฉื ืŸ ื“ืจื›ื™ื ืœืขืงื™ืคืช ื”ื‘ืขื™ื” ื›ื“ื™ ืœืคืชื•ืจ ืจื‘ื•ืช ืžื”ื‘ืขื™ื•ืช ื”ืœืœื•. ืœื“ื•ื’ืžื”, ืื ืืชื” ืจื•ืฆื” ืœื”ืฉืชืžืฉ ื‘-AUFS ื‘-Docker ื”ืคื ื™ืžื™, ืคืฉื•ื˜ ื”ืคื•ืš ืืช ื”ืชื™ืงื™ื” /var/lib/docer ืœื ืคื— ื•ืชื”ื™ื” ื‘ืกื“ืจ. Docker ื”ื•ืกื™ืคื” ื›ืžื” ืžืจื—ื‘ื™ ืฉืžื•ืช ื‘ืกื™ืกื™ื™ื ืœืฉืžื•ืช ื™ืขื“ ืฉืœ Device Mapper ื›ืš ืฉืื ืฉื™ื—ื•ืช Docker ืžืจื•ื‘ื•ืช ืคื•ืขืœื•ืช ืขืœ ืื•ืชื• ืžื—ืฉื‘, ื”ืŸ ืœื ื™ื“ืจื›ื• ืื—ืช ืขืœ ื”ืฉื ื™ื™ื”.

ืขื ื–ืืช, ื”ื’ื“ืจื” ื›ื–ื• ืื™ื ื” ืคืฉื•ื˜ื” ื›ืœืœ, ื›ืคื™ ืฉื ื™ืชืŸ ืœืจืื•ืช ืžืืœื” ืžืืžืจื™ื ื‘ืžืื’ืจ dind ื‘- GitHub.

Docker-in-Docker: ื–ื” ืžื—ืžื™ืจ

ืžื” ืœื’ื‘ื™ ื”-build cache? ื–ื” ื’ื ื™ื›ื•ืœ ืœื”ื™ื•ืช ื“ื™ ืงืฉื”. ืื ืฉื™ื ืฉื•ืืœื™ื ืื•ืชื™ ืœืขืชื™ื ืงืจื•ื‘ื•ืช "ืื ืื ื™ ืžืจื™ืฅ ืืช Docker-in-Docker, ืื™ืš ืื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ืชืžื•ื ื•ืช ืฉืžืชืืจื—ื•ืช ื‘ืžืืจื— ืฉืœื™ ื‘ืžืงื•ื ืœืžืฉื•ืš ื”ื›ืœ ื‘ื—ื–ืจื” ืœ-Docker ื”ืคื ื™ืžื™ ืฉืœื™"?

ื›ืžื” ืื ืฉื™ื ื™ื•ื–ืžื™ื ื ื™ืกื• ืœืื’ื“ ืืช /var/lib/docker ืžื”ืžืืจื— ืœืžื™ื›ืœ Docker-in-Docker. ืœืคืขืžื™ื ื”ื ื—ื•ืœืงื™ื /var/lib/docer ืขื ืžืกืคืจ ืงื•ื ื˜ื™ื™ื ืจื™ื.

ื—ืฉื•ื‘ ื”ื™ื˜ื‘ ืœืคื ื™ ื”ืฉื™ืžื•ืฉ ื‘-Docker-in-Docker ืขื‘ื•ืจ CI ืื• ืกื‘ื™ื‘ืช ื‘ื“ื™ืงื”
ื”ืื ืืชื” ืจื•ืฆื” ืœื”ืฉื—ื™ืช ืืช ื”ื ืชื•ื ื™ื ืฉืœืš? ื›ื™ ื–ื” ื‘ื“ื™ื•ืง ืžื” ืฉื™ืคื’ืข ื‘ื ืชื•ื ื™ื ืฉืœืš!

ื”ื“ืžื•ืŸ Docker ืชื•ื›ื ืŸ ื‘ื‘ื™ืจื•ืจ ื›ื“ื™ ืœืงื‘ืœ ื’ื™ืฉื” ื‘ืœืขื“ื™ืช ืœ-/var/lib/docer. ืฉื•ื ื“ื‘ืจ ืื—ืจ ืœื ืฆืจื™ืš "ืœื’ืขืช, ืœืชืงื•ืข ืื• ืœื“ืจื‘ืŸ" ื‘ืงื‘ืฆื™ Docker ืฉื ืžืฆืื™ื ื‘ืชื™ืงื™ื™ื” ื–ื•.

ืœืžื” ื–ื” ื›ืœ ื›ืš? ืžื›ื™ื•ื•ืŸ ืฉื–ื• ืชื•ืฆืื” ืฉืœ ืื—ื“ ื”ืฉื™ืขื•ืจื™ื ื”ืงืฉื™ื ื‘ื™ื•ืชืจ ืฉื ืœืžื“ื• ื‘ื–ืžืŸ ืคื™ืชื•ื— dotCloud. ืžื ื•ืข ื”ืงื•ื ื˜ื™ื™ื ืจ ืฉืœ dotCloud ืคืขืœ ืขืœ ื™ื“ื™ ื’ื™ืฉื” ืœืžืกืคืจ ืชื”ืœื™ื›ื™ื /var/lib/dotcloud ื‘ื• ื–ืžื ื™ืช. ื˜ืจื™ืงื™ื ืขืจืžื•ืžื™ื™ื ื›ืžื• ื”ื—ืœืคืช ืงื‘ืฆื™ื ืื˜ื•ืžื™ื™ื (ื‘ืžืงื•ื ืขืจื™ื›ื” ื‘ืžืงื•ื), ืคืœืคืœ ืงื•ื“ ืขื ืžื ืขื•ืœื™ื ืžื™ื™ืขืฆื™ื ื•ื—ื•ื‘ื”, ื•ื ื™ืกื•ื™ื™ื ืื—ืจื™ื ืขื ืžืขืจื›ื•ืช ืžืื•ื‘ื˜ื—ื•ืช ื›ืžื• SQLite ื•-BDB ืœื ืชืžื™ื“ ืขื‘ื“ื•. ื›ืฉืขื™ืฆื‘ื ื• ืžื—ื“ืฉ ืืช ืžื ื•ืข ื”ืงื•ื ื˜ื™ื™ื ืจ ืฉืœื ื•, ืฉื”ืคืš ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืœ-Docker, ืื—ืช ืžื”ื—ืœื˜ื•ืช ื”ืชื›ื ื•ืŸ ื”ื’ื“ื•ืœื•ืช ื”ื™ื™ืชื” ืœืื—ื“ ืืช ื›ืœ ืคืขื•ืœื•ืช ื”ืงื•ื ื˜ื™ื™ื ืจ ืชื—ืช ื“ืžื•ืŸ ืื—ื“ ื›ื“ื™ ืœื‘ื˜ืœ ืืช ื›ืœ ื”ืฉื˜ื•ื™ื•ืช ื”ืžืงื‘ื™ืœื•ืช.

ืฉืœื ืชื‘ื™ื ื• ืื•ืชื™ ืœื ื ื›ื•ืŸ: ืืคืฉืจ ื‘ื”ื—ืœื˜ ืœืขืฉื•ืช ืžืฉื”ื• ื˜ื•ื‘, ืืžื™ืŸ ื•ืžื”ื™ืจ ืฉื›ื•ืœืœ ืจื™ื‘ื•ื™ ืชื”ืœื™ื›ื™ื ื•ื‘ืงืจื” ืžืงื‘ื™ืœื” ืžื•ื“ืจื ื™ืช. ืื‘ืœ ืื ื—ื ื• ื—ื•ืฉื‘ื™ื ืฉื–ื” ืคืฉื•ื˜ ื•ืงืœ ื™ื•ืชืจ ืœื›ืชื•ื‘ ื•ืœืชื—ื–ืง ืงื•ื“ ื‘ืืžืฆืขื•ืช Docker ื‘ืชื•ืจ ื”ื ื’ืŸ ื”ื™ื—ื™ื“.

ื”ืžืฉืžืขื•ืช ื”ื™ื ืฉืื ืชืฉืชืคื• ืืช ืกืคืจื™ื™ืช /var/lib/docer ื‘ื™ืŸ ืžืกืคืจ ืžื•ืคืขื™ Docker, ื™ื”ื™ื• ืœื›ื ื‘ืขื™ื•ืช. ื›ืžื•ื‘ืŸ ืฉื–ื” ื™ื›ื•ืœ ืœืขื‘ื•ื“, ื‘ืžื™ื•ื—ื“ ื‘ืฉืœื‘ื™ื ื”ืจืืฉื•ื ื™ื ืฉืœ ื”ื‘ื“ื™ืงื”. "ืชืงืฉื™ื‘ื™, ืืžื, ืื ื™ ื™ื›ื•ืœ ืœื”ืจื™ืฅ ืืช ืื•ื‘ื•ื ื˜ื• ื‘ืชื•ืจ ื“ื•ืงืจ!" ืื‘ืœ ื ืกื” ืžืฉื”ื• ืžื•ืจื›ื‘ ื™ื•ืชืจ, ื›ืžื• ืœืžืฉื•ืš ืืช ืื•ืชื” ืชืžื•ื ื” ืžืฉื ื™ ืžืงืจื™ื ืฉื•ื ื™ื, ื•ืชืจืื” ืืช ื”ืขื•ืœื ื ืฉืจืฃ.

ืžืฉืžืขื•ืช ื”ื“ื‘ืจ ื”ื™ื ืฉืื ืžืขืจื›ืช ื”-CI ืฉืœืš ืžื‘ืฆืขืช ื‘ื ื™ื™ื” ื•ื‘ื ื™ื™ื” ืžื—ื“ืฉ, ื‘ื›ืœ ืคืขื ืฉืืชื” ืžืคืขื™ืœ ืžื—ื“ืฉ ืืช ืžื™ื›ืœ ื”-Docker-in-Docker ืฉืœืš, ืืชื” ืžืกืชื›ืŸ ื‘ื”ืคืœืช ื’ืจืขื™ืŸ ืœืžื˜ืžื•ืŸ ืฉืœื•. ื–ื” ืœื ืžื’ื ื™ื‘ ื‘ื›ืœืœ!

ื”ืคืชืจื•ืŸ

ื‘ื•ืื• ื ื™ืงื— ืฆืขื“ ืื—ื•ืจื”. ื”ืื ืืชื” ื‘ืืžืช ืฆืจื™ืš Docker-in-Docker ืื• ืฉืืชื” ืจืง ืจื•ืฆื” ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื”ืคืขื™ืœ ืืช Docker ื•ืœื‘ื ื•ืช ื•ืœื”ืจื™ืฅ ืงื•ื ื˜ื™ื™ื ืจื™ื ื•ืชืžื•ื ื•ืช ืžืžืขืจื›ืช ื”-CI ืฉืœืš ื‘ื–ืžืŸ ืฉืžืขืจื›ืช ื”-CI ืขืฆืžื” ื ืžืฆืืช ื‘ืงื•ื ื˜ื™ื™ื ืจ?

ืื ื™ ื‘ื˜ื•ื— ืฉืจื•ื‘ ื”ืื ืฉื™ื ืจื•ืฆื™ื ืืช ื”ืืคืฉืจื•ืช ื”ืฉื ื™ื™ื”, ื›ืœื•ืžืจ ื”ื ืจื•ืฆื™ื ืฉืžืขืจื›ืช CI ื›ืžื• ื’'ื ืงื™ื ืก ืชื•ื›ืœ ืœื”ืคืขื™ืœ ืงื•ื ื˜ื™ื™ื ืจื™ื. ื•ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ืœืขืฉื•ืช ื–ืืช ื”ื™ื ืคืฉื•ื˜ ืœื”ื›ื ื™ืก ืฉืงืข Docker ืœืžื™ื›ืœ ื”-CI ืฉืœืš ื•ืœืฉื™ื™ืš ืื•ืชื• ืœื“ื’ืœ -v.

ื‘ืžื™ืœื™ื ืคืฉื•ื˜ื•ืช, ื›ืฉืืชื” ืžืคืขื™ืœ ืืช ืžื™ื›ืœ ื”-CI ืฉืœืš (ื’'ื ืงื™ื ืก ืื• ืื—ืจ), ื‘ืžืงื•ื ืœืคืจื•ืฅ ืžืฉื”ื• ื™ื—ื“ ืขื Docker-in-Docker, ื”ืชื—ืœ ืื•ืชื• ื‘ืฉื•ืจื”:

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

ืœืžื›ื•ืœื” ื”ื–ื• ืชื”ื™ื” ื›ืขืช ื’ื™ืฉื” ืœืฉืงืข Docker ื•ืœื›ืŸ ื™ื•ื›ืœ ืœื”ืคืขื™ืœ ืงื•ื ื˜ื™ื™ื ืจื™ื. ืืœื ืฉื‘ืžืงื•ื ืœื”ืคืขื™ืœ ืงื•ื ื˜ื™ื™ื ืจื™ื "ื™ืœื“ื™ื", ื”ื•ื ื™ืฉื™ืง ืงื•ื ื˜ื™ื™ื ืจื™ื "ืื—ื™ื".

ื ืกื” ื–ืืช ื‘ืืžืฆืขื•ืช ืชืžื•ื ืช ื”ื“ื•ืงืจ ื”ืจืฉืžื™ืช (ื”ืžื›ื™ืœื” ืืช ื”ืงื•ื‘ืฅ ื”ื‘ื™ื ืืจื™ ืฉืœ Docker):

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, ืื ืœื•ื’ื™ ื™ื™ื—ื•ื“ื™ ืฉืœ ืฉืจืชื™ื ื‘ืจืžืช ื”ื›ื ื™ืกื”, ืฉื”ื•ืžืฆื ืขืœ ื™ื“ื™ื ื• ืขื‘ื•ืจื›ื: ื›ืœ ื”ืืžืช ืขืœ VPS (KVM) E5-2697 v3 (6 ืœื™ื‘ื•ืช) 10GB DDR4 480GB SSD 1Gbps ื”ื—ืœ ืž-$19 ืื• ืื™ืš ืœืฉืชืฃ ืฉืจืช? (ื–ืžื™ืŸ ืขื RAID1 ื•-RAID10, ืขื“ 24 ืœื™ื‘ื•ืช ื•ืขื“ 40GB DDR4).

Dell R730xd ื–ื•ืœ ืคื™ 2 ื‘ืžืจื›ื– ื”ื ืชื•ื ื™ื Equinix Tier IV ื‘ืืžืกื˜ืจื“ื? ืจืง ื›ืืŸ 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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”