ื˜ืจืึทื›ื˜ืŸ ืงืขืจืคืึทืœื™ ืื™ื™ื“ืขืจ ืื™ืจ ื ื•ืฆืŸ Docker-in-Docker ืคึฟืึทืจ ืกื™ ืึธื“ืขืจ ืคึผืจื•ื‘ื™ืจืŸ ืกื•ื•ื™ื•ื•ืข

ื˜ืจืึทื›ื˜ืŸ ืงืขืจืคืึทืœื™ ืื™ื™ื“ืขืจ ืื™ืจ ื ื•ืฆืŸ Docker-in-Docker ืคึฟืึทืจ ืกื™ ืึธื“ืขืจ ืคึผืจื•ื‘ื™ืจืŸ ืกื•ื•ื™ื•ื•ืข

Docker-in-Docker ืื™ื– ืึท ื•ื•ื™ืจื˜ื•ืึทืœื™ื–ืขื“ ื“ืึธืงืงืขืจ ื“ืึทืขืžืึธืŸ ืกื•ื•ื™ื•ื•ืข ืคืœื™ืกื ื“ื™ืง ืื™ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ื–ื™ืš ืฆื• ื‘ื•ื™ืขืŸ ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“ืขืจ. ื“ืขืจ ื”ื•ื™ืคึผื˜ ืฆื™ืœ ืคื•ืŸ ืฉืืคืŸ Docker-in-Docker ืื™ื– ื’ืขื•ื•ืขืŸ ืฆื• ื”ืขืœืคึฟืŸ ืึทื ื˜ื•ื•ื™ืงืœืขืŸ Docker ื–ื™ืš. ืคื™ืœืข ืžืขื ื˜ืฉืŸ ื ื•ืฆืŸ ืขืก ืฆื• ืœื•ื™ืคืŸ Jenkins CI. ื“ืึธืก ืกื™ืžื– ื ืึธืจืžืึทืœ ืื™ืŸ ืขืจืฉื˜ืขืจ, ืึธื‘ืขืจ ื“ืึทืŸ ืฉื˜ื™ื™ ืื•ื™ืฃ ืคึผืจืึธื‘ืœืขืžืก ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืึทื•ื•ื•ื™ื“ืึทื“ ื“ื•ืจืš ื™ื ืกื˜ืึธืœื™ื ื’ ื“ืึธืงืงืขืจ ืื™ืŸ ืึท Jenkins CI ืงืึทื ื˜ื™ื™ื ืขืจ. ื“ืขืจ ืึทืจื˜ื™ืงืœ ื“ืขืจืฆื™ื™ืœื˜ ืื™ืจ ื•ื•ื™ ืฆื• ื˜ืึธืŸ ื“ืึธืก. ืื•ื™ื‘ ืื™ืจ ื–ืขื ื˜ ืื™ื ื˜ืขืจืขืกื™ืจื˜ ืื™ืŸ ื“ื™ ืœืขืฆื˜ ืœื™ื™ื–ื•ื ื’ ืึธืŸ ื“ืขื˜ืึทื™ืœืก, ื ืึธืจ ืœื™ื™ืขื ืขืŸ ื“ื™ ืœืขืฆื˜ืข ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, "ืกืึทืœื•ื•ื™ื ื’ ื“ื™ ืคึผืจืึธื‘ืœืขื."

ื˜ืจืึทื›ื˜ืŸ ืงืขืจืคืึทืœื™ ืื™ื™ื“ืขืจ ืื™ืจ ื ื•ืฆืŸ Docker-in-Docker ืคึฟืึทืจ ืกื™ ืึธื“ืขืจ ืคึผืจื•ื‘ื™ืจืŸ ืกื•ื•ื™ื•ื•ืข

ื“ืึธืงืขืจ-ืื™ืŸ-ื“ืึธืงืงืขืจ: "ื’ื•ื˜"

ืžืขืจ ื•ื•ื™ ืฆื•ื•ื™ื™ ื™ืึธืจ ืฆื•ืจื™ืง ืื™ืš ืฉื˜ืขืœืŸ ื–ื™ืš ืื™ืŸ ื“ืึธืงืงืขืจ flag โ€“ ื–ื•ื›ื” ืื•ืŸ ื’ืขืฉืจื™ื‘ืŸ ืขืจืฉื˜ืขืจ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ื ื“. ื“ืขืจ ืฆื™ืœ ืื™ื– ื’ืขื•ื•ืขืŸ ืฆื• ื”ืขืœืคึฟืŸ ื“ื™ ื”ืึทืจืฅ ืžืึทื ืฉืึทืคึฟื˜ ืึทื ื˜ื•ื•ื™ืงืœืขืŸ ื“ืึธืงืงืขืจ ืคืึทืกื˜ืขืจ. ืื™ื™ื“ืขืจ Docker-in-Docker, ื“ื™ ื˜ื™ืคึผื™ืฉ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืฆื™ืงืœ ื’ืขืงื•ืงื˜ ื•ื•ื™ ื“ืึธืก:

  • ื›ืึทืงืึทื˜ื™ ื›ืึทืง;
  • ื‘ื•ื™ืขืŸ;
  • ืกื˜ืึธืคึผืคึผื™ื ื’ ืึท ืคืœื™ืกื ื“ื™ืง ื“ืึธืงืงืขืจ ื“ื™ื™ืžืึทืŸ;
  • ืœืึธื ื˜ืฉื™ื ื’ ืึท ื ื™ื™ึท ื“ืึธืงืงืขืจ ื“ื™ื™ืžืึทืŸ;
  • ื˜ืขืกื˜ื™ื ื’;
  • ืื™ื‘ืขืจื—ื–ืจืŸ ื“ืขื ืฆื™ืงืœ.

ืื•ื™ื‘ ืื™ืจ ื’ืขื•ื•ืืœื˜ ืฆื• ืžืึทื›ืŸ ืึท ืฉื™ื™ืŸ, ืจืขืคึผืจืึธื“ื•ืกื™ื‘ืœืข ืคึฟืึทืจื–ืึทืžืœื•ื ื’ (ื“ืึธืก ืื™ื–, ืื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ), ืขืก ืื™ื– ื’ืขื•ื•ืืจืŸ ืžืขืจ ื™ื ื˜ืจืึทืงืึทื˜:

  • ื›ืึทืงืึทื˜ื™ ื›ืึทืง;
  • ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– ืึท ืืจื‘ืขื˜ืŸ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ืึธืงืขืจ ืื™ื– ืคืœื™ืกื ื“ื™ืง;
  • ื‘ื•ื™ืขืŸ ื ื™ื™ึท ื“ืึธืงืงืขืจ ืžื™ื˜ ืึทืœื˜ ื“ืึธืงืงืขืจ;
  • ื”ืึทืœื˜ืŸ ื“ืึธืงืงืขืจ ื“ื™ื™ืžืึทืŸ;
  • ืึธื ื”ื™ื™ื‘ ืึท ื ื™ื™ึท ื“ืึธืงืงืขืจ ื“ื™ื™ืžืึทืŸ;
  • ืคึผืจื•ื‘ื™ืจืŸ;
  • ื”ืึทืœื˜ืŸ ื ื™ื™ึท ื“ืึธืงืงืขืจ ื“ื™ื™ืžืึทืŸ;
  • ืื™ื‘ืขืจื—ื–ืจืŸ.

ืžื™ื˜ ื“ื™ ืึทื“ื•ื•ืขื ื˜ ืคื•ืŸ Docker-in-Docker, ื“ืขืจ ืคึผืจืึธืฆืขืก ืื™ื– ื’ืขื•ื•ืืจืŸ ืกื™ืžืคึผืœืขืจ:

  • ื›ืึทืงืึทื˜ื™ ื›ืึทืง;
  • ืคึฟืึทืจื–ืึทืžืœื•ื ื’ + ืงืึทื˜ืขืจ ืื™ืŸ ืื™ื™ืŸ ื‘ื™ื ืข;
  • ืื™ื‘ืขืจื—ื–ืจืŸ ื“ืขื ืฆื™ืงืœ.

ืื™ื– ืขืก ื ื™ื˜ ืคื™ืœ ื‘ืขืกืขืจ ืึทื–ื•ื™?

ื˜ืจืึทื›ื˜ืŸ ืงืขืจืคืึทืœื™ ืื™ื™ื“ืขืจ ืื™ืจ ื ื•ืฆืŸ Docker-in-Docker ืคึฟืึทืจ ืกื™ ืึธื“ืขืจ ืคึผืจื•ื‘ื™ืจืŸ ืกื•ื•ื™ื•ื•ืข

ื“ืึธืงืขืจ-ืื™ืŸ-ื“ืึธืงืงืขืจ: "ืฉืœืขื›ื˜"

ืึธื‘ืขืจ, ืคืึทืจืงืขืจื˜ ืฆื• ืคืึธืœืงืก ื’ืœื•ื™ื‘ืŸ, Docker-in-Docker ืื™ื– ื ื™ืฉื˜ 100% ืฉื˜ืขืจืŸ, ืคึผืึธื ื™ืขืก ืื•ืŸ ื•ื ื™ืงืึธืจื ืก. ื•ื•ืึธืก ืื™ืš ืžื™ื™ื ืขืŸ ืื™ื– ืึทื– ืขืก ื–ืขื ืขืŸ ืขื˜ืœืขื›ืข ื™ืฉื•ื– ื•ื•ืึธืก ืึท ื“ืขื•ื•ืขืœืึธืคึผืขืจ ื“ืึทืจืฃ ื–ื™ื™ืŸ ืึทื•ื•ืขืจ ืคื•ืŸ.

ืื™ื™ื ืขืจ ืคื•ืŸ ื–ื™ื™ ืงืึทื ืกืขืจื ื– LSMs (ืœื™ื ื•ืงืก ื–ื™ื›ืขืจื”ื™ื™ื˜ ืžืึทื“ื–ืฉื•ืœื–) ืึทื–ืึท ื•ื•ื™ AppArmor ืื•ืŸ SELinux: ื•ื•ืขืŸ ืคืœื™ืกื ื“ื™ืง ืึท ืงืึทื ื˜ื™ื™ื ืขืจ, ื“ื™ "ื™ื ืขืจืœืขืš ื“ืึธืงืงืขืจ" ืงืขืŸ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืฆื•ืœื™ื™ื’ืŸ ื–ื™ื›ืขืจื”ื™ื™ื˜ ืคึผืจืึธื•ืคื™ื™ืœื– ื•ื•ืึธืก ื•ื•ืขื˜ ืงืึธื ืคืœื™ืงื˜ ืึธื“ืขืจ ืฆืขืžื™ืฉืŸ ื“ื™ "ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื“ืึธืงืงืขืจ". ื“ืึธืก ืื™ื– ื“ื™ ืžืขืจืกื˜ ืฉื•ื•ืขืจ ืคึผืจืึธื‘ืœืขื ืฆื• ืกืึธืœื•ื•ืข ื•ื•ืขืŸ ื˜ืจื™ื™ื ื’ ืฆื• ืฆื•ื ื•ื™ืคื’ื™ืกืŸ ื“ื™ ืึธืจื™ื’ื™ื ืขืœ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ -ืคึผืจื™ื•ื•ื™ืœืขื“ื–ืฉื“ ืคืึธืŸ. ืžื™ื™ึทืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ ื’ืขืืจื‘ืขื˜ ืื•ืŸ ืึทืœืข ื˜ืขืกืฅ ื•ื•ืึธืœื˜ ืคืึธืจืŸ ืื•ื™ืฃ ืžื™ื™ืŸ ื“ืขื‘ื™ืึทืŸ ืžืึทืฉื™ืŸ ืื•ืŸ ื•ื‘ื•ื ื˜ื• ื˜ืขืกื˜ ื•ื•ืžืก, ืึธื‘ืขืจ ื–ื™ื™ ื•ื•ืึธืœื˜ ืงืจืึทืš ืื•ืŸ ืคืึทืจื‘ืจืขื ืขืŸ ืื•ื™ืฃ ืžื™ื›ืืœ ืงืจืึธืกื‘ื™ ืก ืžืึทืฉื™ืŸ (ืขืจ ื”ืื˜ ืคืขื“ืึธืจืึท ื•ื•ื™ ืื™ืš ื’ืขื“ืขื ืงืขืŸ). ืื™ืš ืงืขืŸ ื ื™ืฉื˜ ื’ืขื“ืขื ืงืขืŸ ื“ื™ ืคึผื™ื ื˜ืœืขืš ืกื™ื‘ื” ืคื•ืŸ ื“ืขื ืคึผืจืึธื‘ืœืขื, ืึธื‘ืขืจ ืขืก ืงืขืŸ ื–ื™ื™ืŸ ื•ื•ื™ื™ึทืœ ืžื™ื™ืง ืื™ื– ืึท ืงืœื•ื’ ื‘ืึธื›ืขืจ ื•ื•ืึธืก ืึทืจื‘ืขื˜ ืžื™ื˜ SELINUX=ืขื ืคืึธืจืก (ืื™ืš ื’ืขื•ื•ื™ื™ื ื˜ ืึทืคึผืึทืจืžืึธืจ) ืื•ืŸ ืžื™ื™ืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ื’ืขื ื•ืžืขืŸ ืื™ืŸ ื—ืฉื‘ื•ืŸ SELinux ืคึผืจืึธื•ืคื™ื™ืœื–.

ื“ืึธืงืขืจ-ืื™ืŸ-ื“ืึธืงืงืขืจ: "ื‘ื™ื™ื–"

ื“ื™ ืจื’ืข ืึทืจื•ื™ืกื’ืขื‘ืŸ ืื™ื– ืžื™ื˜ Docker ืกื˜ืึธืจื™ื“ื–ืฉ ื“ืจื™ื•ื•ืขืจืก. ื•ื•ืขืŸ ืื™ืจ ืœื•ื™ืคืŸ Docker-in-Docker, ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื“ืึธืงืงืขืจ ืœื•ื™ืคื˜ ืื•ื™ืฃ ืฉืคึผื™ืฅ ืคื•ืŸ ืึท ืจืขื’ื•ืœืขืจ ื˜ืขืงืข ืกื™ืกื˜ืขื (EXT4, BTRFS, ืึธื“ืขืจ ื•ื•ืขืœื›ืขืจ ืื™ืจ ื”ืึธื˜) ืื•ืŸ ื™ื ืขืจืœืขืš ื“ืึธืงืงืขืจ ืœื•ื™ืคื˜ ืื•ื™ืฃ ืฉืคึผื™ืฅ ืคื•ืŸ ืึท ืงืึธืคึผื™ืข-ืื•ื™ืฃ-ืฉืจื™ื™ึทื‘ืŸ ืกื™ืกื˜ืขื (AUFS, BTRFS, Device Mapper) , ืืื–"ื• ื•). , ื“ื™ืคึผืขื ื“ื™ื ื’ ืื•ื™ืฃ ื•ื•ืึธืก ืื™ื– ืงืึทื ืคื™ื’ื™ืขืจื“ ืฆื• ื ื•ืฆืŸ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื“ืึธืงืงืขืจ). ื“ืขื ืงืจื™ื™ื™ืฅ ืคื™ืœืข ืงืึทืžื‘ืึทื ื™ื™ืฉืึทื ื– ื•ื•ืึธืก ื•ื•ืขื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื™ืจ ื•ื•ืขื˜ ื ื™ืฉื˜ ืงืขื ืขืŸ ืฆื• ืœื•ื™ืคืŸ AUFS ืื•ื™ืฃ ืฉืคึผื™ืฅ ืคื•ืŸ AUFS.

ืื•ื™ื‘ ืื™ืจ ืœื•ื™ืคืŸ BTRFS ืื•ื™ืฃ ืฉืคึผื™ืฅ ืคื•ืŸ BTRFS, ืขืก ื–ืึธืœ ืึทืจื‘ืขื˜ืŸ ืื™ืŸ ืขืจืฉื˜ืขืจ, ืึธื‘ืขืจ ืึทืžืึธืœ ืขืก ื–ืขื ืขืŸ ื ืขืกื˜ืขื“ ืกื•ื‘ื•ื•ืึทืœื™ื•ืžื–, ื“ื™ืœื™ื˜ื™ื ื’ ื“ื™ ืคืึธื˜ืขืจ ืกื•ื‘ื•ื•ืึธื•ื ื•ื•ืขื˜ ืคืึทืจืœืึธื–ืŸ. ื“ื™ Device Mapper ืžืึธื“ื•ืœืข ื”ืื˜ ืงื™ื™ืŸ ื ืึทืžืขืกืคึผืึทืกืข, ืึทื–ื•ื™ ืื•ื™ื‘ ืงื™ื™ืคืœ ื“ืึทืงืงืขืจ ื™ื ืกื˜ืึทื ืกื™ื– ืœื•ื™ืคืŸ ืขืก ืื•ื™ืฃ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืžืึทืฉื™ืŸ, ื–ื™ื™ ืึทืœืข ืงืขื ืขืŸ ื–ืขืŸ (ืื•ืŸ ื”ืฉืคึผืขื”) ื“ื™ ื‘ื™ืœื“ืขืจ ืื•ื™ืฃ ื™ืขื“ืขืจ ืื ื“ืขืจืขืจ ืื•ืŸ ืื•ื™ืฃ ื“ื™ ื‘ืึทืงืึทืคึผ ื“ืขื•ื•ื™ืกืขืก ืคื•ืŸ ื“ื™ ืงืึทื ื˜ื™ื™ื ืขืจ. ื“ืืก ืื™ื– ืฉืœืขื›ื˜.

ืขืก ื–ืขื ืขืŸ ื•ื•ืึธืจืงืึทืจืึธื•ื ื“ืก ืฆื• ืกืึธืœื•ื•ืข ืคื™ืœืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืคึผืจืึธื‘ืœืขืžืก. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื ื•ืฆืŸ AUFS ืื™ืŸ ื™ื ืขืจืœืขืš ื“ืึธืงืงืขืจ, ื ืึธืจ ืงืขืจ ื“ื™ /var/lib/docker ื˜ืขืงืข ืื™ืŸ ืึท ื‘ืึทื ื“ ืื•ืŸ ืื™ืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ื•ื˜. Docker ื”ืื˜ ืฆื•ื’ืขืœื™ื™ื’ื˜ ืขื˜ืœืขื›ืข ื‘ืึทื–ืข ื ืึธืžืขืŸ ืกืคึผื™ื™ืกืึทื– ืฆื• ื“ื™ Device Mapper ืฆื™ืœ ื ืขืžืขืŸ ืึทื–ื•ื™ ืึทื– ืื•ื™ื‘ ืงื™ื™ืคืœ ื“ืึธืงืงืขืจ ืจื•ืคื˜ ืœื•ื™ืคืŸ ืื•ื™ืฃ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืžืึทืฉื™ืŸ, ื–ื™ื™ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ื˜ืจืขื˜ืŸ ืื•ื™ืฃ ื™ืขื“ืขืจ ืื ื“ืขืจืขืจ.

ืึธื‘ืขืจ, ืึทื–ืึท ืกืขื˜ืึทืคึผ ืื™ื– ื ื™ืฉื˜ ืคึผืฉื•ื˜, ื•ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ืคึฟื•ืŸ ื“ื™ ืืจื˜ื™ืงืœืขืŸ ืื™ืŸ ื“ื™ ื“ื™ื™ืŸ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืื•ื™ืฃ GitHub.

ื“ืึธืงืขืจ-ืื™ืŸ-ื“ืึธืงืงืขืจ: ืขืก ื•ื•ืขืจื˜ ืขืจื’ืขืจ

ื•ื•ืึธืก ื•ื•ืขื’ืŸ ื“ื™ ื‘ื•ื™ืขืŸ ืงืึทืฉ? ื“ืึธืก ืงืขืŸ ืื•ื™ืš ื–ื™ื™ืŸ ื’ืึทื ืฅ ืฉื•ื•ืขืจ. ืžืขื ื˜ืฉืŸ ืึธืคื˜ ืคืจืขื’ืŸ ืžื™ืจ "ืื•ื™ื‘ ืื™ืš ืœื•ื™ืคืŸ ื“ืึธืงืขืจ-ืื™ืŸ-ื“ืึธืงืงืขืจ, ื•ื•ื™ ืงืขื ืขืŸ ืื™ืš ื ื•ืฆืŸ ื‘ื™ืœื“ืขืจ ื›ืึธื•ืกื˜ื™ื“ ืื•ื™ืฃ ืžื™ื™ืŸ ื‘ืึทืœืขื‘ืึธืก ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ืคึผื•ืœื™ื ื’ ืึทืœืฅ ืฆื•ืจื™ืง ืื™ืŸ ืžื™ื™ืŸ ื™ื ืขืจืœืขืš ื“ืึธืงืงืขืจ"?

ืขื˜ืœืขื›ืข ืขื ื˜ืขืจืคึผืจื™ื™ื–ื™ื ื’ ืžืขื ื˜ืฉืŸ ื”ืึธื‘ืŸ ื’ืขืคืจื•ื•ื•ื˜ ืฆื• ื‘ื™ื ื“ืŸ /var/lib/docker ืคึฟื•ืŸ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ืฆื• ืึท ื“ืึธืงืงืขืจ-ืื™ืŸ-ื“ืึธืงืงืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ. ืžืืœ ื–ื™ื™ ื˜ื™ื™ืœืŸ /var/lib/docker ืžื™ื˜ ืงื™ื™ืคืœ ืงืึทื ื˜ื™ื™ื ืขืจื–.

ื˜ืจืึทื›ื˜ืŸ ืงืขืจืคืึทืœื™ ืื™ื™ื“ืขืจ ืื™ืจ ื ื•ืฆืŸ Docker-in-Docker ืคึฟืึทืจ ืกื™ ืึธื“ืขืจ ืคึผืจื•ื‘ื™ืจืŸ ืกื•ื•ื™ื•ื•ืข
ืฆื™ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืคืึทืจื“ืึธืจื‘ืŸ ื“ื™ื™ืŸ ื“ืึทื˜ืŸ? ื•ื•ื™ื™ึทืœ ื“ืึธืก ืื™ื– ืคึผื•ื ืงื˜ ื•ื•ืึธืก ื•ื•ืขื˜ ืฉืขื“ื™ืงืŸ ื“ื™ื™ืŸ ื“ืึทื˜ืŸ!

ื“ื™ ื“ืึธืงืงืขืจ ื“ื™ื™ืžืึทืŸ ืื™ื– ืงืœืืจ ื“ื™ื–ื™ื™ื ื“ ืฆื• ื”ืึธื‘ืŸ ื•ื™ืกืฉืœื™ืกื™ืง ืึทืงืกืขืก ืฆื• /var/lib/docker. ื’ืึธืจื ื™ืฉื˜ ืึทื ื“ืขืจืฉ ื–ืึธืœ "ืจื™ืจืŸ, ืฉื˜ื•ืจื›ืขืŸ ืึธื“ืขืจ ืคึผืจืึธื“" ืงื™ื™ืŸ ื“ืึธืงืงืขืจ ื˜ืขืงืขืก ืื™ืŸ ื“ืขื ื˜ืขืงืข.

ืคืืจื•ื•ืืก ืื™ื– ื“ืึธืก ืึทื–ื•ื™? ื•ื•ื™ื™ึทืœ ื“ืึธืก ืื™ื– ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื›ืึทืจื“ืึทืกื˜ ืœืขืงืฆื™ืขืก ื’ืขืœืขืจื ื˜ ื‘ืฉืขืช ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’ ื“ืึธื˜ืงืœืึธื•ื“. ื“ื™ ื“ืึธื˜ืงืœืึธื•ื“ ืงืึทื ื˜ื™ื™ื ืขืจ ืžืึธื˜ืึธืจ ืื™ื– ื’ืขืœืืคืŸ ื“ื•ืจืš ืงื™ื™ืคืœ ืคึผืจืึทืกืขืกืึทื– ืฆื• ืึทืงืกืขืก /var/lib/dotcloud ืกื™ื™ืžืึทืœื˜ื™ื™ื ื™ืึทืกืœื™. ื›ื™ื˜ืจืข ื˜ืจื™ืงืก ืึทื–ืึท ื•ื•ื™ ืึทื˜ืึธืžื™ืฉืข ื˜ืขืงืข ืคืึทืจื‘ื™ื™ึทื˜ (ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ืื™ืŸ-ืึธืจื˜ ืขื“ื™ื˜ื™ื ื’), ืคึผืขืคึผืขืจื™ื ื’ ืงืึธื“ ืžื™ื˜ ืึทื“ื•ื•ื™ื™ื–ืขืจื™ ืื•ืŸ ืžืึทื ื“ืึทื˜ืึธืจื™ ืœืึทืงืก, ืื•ืŸ ืื ื“ืขืจืข ื™ืงืกืคึผืขืจืึทืžืึทื ืฅ ืžื™ื˜ ื–ื™ื›ืขืจ ืกื™ืกื˜ืขืžืขืŸ ืึทื–ืึท ื•ื•ื™ SQLite ืื•ืŸ BDB ื”ืื˜ ื ื™ืฉื˜ ืฉื˜ืขื ื“ื™ืง ืึทืจื‘ืขื˜. ื•ื•ืขืŸ ืžื™ืจ ืจื™ื“ื™ื–ื™ื™ื ื“ ืื•ื ื“ื–ืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ ืžืึธื˜ืึธืจ, ื•ื•ืึธืก ื™ื•ื•ืขื ื˜ืฉืึทื•ื•ืึทืœื™ ื’ืขื•ื•ืืจืŸ ื“ืึธืงืขืจ, ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื’ืจื•ื™ืก ืคึผืœืึทืŸ ื“ื™ืกื™ื–ืฉืึทื ื– ืื™ื– ื’ืขื•ื•ืขืŸ ืฆื• ืงืึธื ืกืึธืœื™ื“ื™ืจืŸ ืึทืœืข ืงืึทื ื˜ื™ื™ื ืขืจ ืึทืคึผืขืจื™ื™ืฉืึทื ื– ืื•ื ื˜ืขืจ ืึท ืื™ื™ืŸ ื“ื™ื™ืžืึทืŸ ืฆื• ื•ื™ืกืžื™ื™ื“ืŸ ืึทืœืข ื“ื™ ืงืึทื ืงืขืจืึทื ืกื™ ื•ืžื–ื™ืŸ.

ืฆื™ ื ื™ื˜ ื‘ืึทืงื•ืžืขืŸ ืžื™ืจ ืคืึทืœืฉ: ืขืก ืื™ื– ืœืขื’ืึทืžืจืข ืžืขื’ืœืขืš ืฆื• ืžืึทื›ืŸ ืขืคึผืขืก ื’ื•ื˜, ืคืึทืจืœืึธื–ืœืขืš ืื•ืŸ ืฉื ืขืœ ื•ื•ืึธืก ื™ื ื•ื•ืึทืœื•ื•ื– ืงื™ื™ืคืœ ืคึผืจืึทืกืขืกืึทื– ืื•ืŸ ืžืึธื“ืขืจืŸ ืคึผืึทืจืึทืœืขืœ ืงืึธื ื˜ืจืึธืœ. ืึธื‘ืขืจ ืžื™ืจ ื˜ืจืึทื›ื˜ืŸ ืขืก ืื™ื– ืกื™ืžืคึผืœืขืจ ืื•ืŸ ื’ืจื™ื ื’ืขืจ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืื•ืŸ ื˜ื™ื™ึทื ืขืŸ ืงืึธื“ ื ื™ืฆืŸ ื“ืึธืงืขืจ ื•ื•ื™ ื“ืขืจ ื‘ืœื•ื™ื– ืฉืคึผื™ืœืขืจ.

ื“ืขื ืžื™ื˜ืœ ืึทื– ืื•ื™ื‘ ืื™ืจ ื˜ื™ื™ืœืŸ ื“ื™ /var/lib/docker ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืฆื•ื•ื™ืฉืŸ ืงื™ื™ืคืœ ื“ืึธืงืงืขืจ ื™ื ืกื˜ืึทื ืกื™ื–, ืื™ืจ ื•ื•ืขื˜ ื”ืึธื‘ืŸ ืคึผืจืึธื‘ืœืขืžืก. ื“ืึธืš, ื“ืึธืก ืงืขืŸ ืึทืจื‘ืขื˜ืŸ, ืกืคึผืขืฆื™ืขืœ ืื™ืŸ ื“ื™ ืคืจื™ ืกื˜ืึทื’ืขืก ืคื•ืŸ ื˜ืขืกื˜ื™ื ื’. "ื”ืขืจืŸ, ืžืึท, ืื™ืš ืงืขื ืขืŸ ืœื•ื™ืคืŸ ื•ื‘ื•ื ื˜ื• ื•ื•ื™ ืึท ื“ืึธืงืงืขืจ!" ืึธื‘ืขืจ ืคึผืจื•ึผื•ื•ื˜ ืขืคึผืขืก ืžืขืจ ืงืึธืžืคึผืœื™ืฆื™ืจื˜, ื•ื•ื™ ืฆื• ืฆื™ืขืŸ ื“ื™ ื–ืขืœื‘ืข ื‘ื™ืœื“ ืคื•ืŸ ืฆื•ื•ื™ื™ ืคืึทืจืฉื™ื“ืขื ืข ื™ื ืกื˜ืึทื ืกื™ื–, ืื•ืŸ ืื™ืจ ื•ื•ืขื˜ ื–ืขืŸ ื“ื™ ื•ื•ืขืœื˜ ื‘ืจืขื ืขืŸ.

ื“ืขื ืžื™ื˜ืœ ืึทื– ืื•ื™ื‘ ื“ื™ื™ืŸ ืกื™ ืกื™ืกื˜ืขื ืคึผืขืจืคืึธืจืžื– ื‘ื•ื™ืขืŸ ืื•ืŸ ืจื™ื‘ื™ืœื“ื–, ื™ืขื“ืขืจ ืžืึธืœ ืื™ืจ ืจื™ืกื˜ืึทืจื˜ ื“ื™ื™ืŸ ื“ืึธืงืงืขืจ-ืื™ืŸ-ื“ืึธืงืงืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ, ืื™ืจ ืจื™ื–ื™ืงื™ืจืŸ ืฆื• ืคืึทืœืŸ ืึท ื ื•ืง ืื™ืŸ ื–ื™ื™ืŸ ืงืึทืฉ. ื“ืืก ืื™ื– ื‘ื›ืœืœ ื ื™ืฉื˜ ืฉื™ื™ืŸ!

ื“ื™ ืœื™ื™ื–ื•ื ื’

ืœืึธืžื™ืจ ื ืขืžืขืŸ ืึท ืฉืจื™ื˜ ืฆื•ืจื™ืง. ืฆื™ ืื™ืจ ื˜ืึทืงืข ื“ืึทืจืคึฟืŸ Docker-in-Docker ืึธื“ืขืจ ืื™ืจ ื ืึธืจ ื•ื•ื™ืœืŸ ืฆื• ืงืขื ืขืŸ ืœื•ื™ืคืŸ ื“ืึธืงืงืขืจ ืื•ืŸ ื‘ื•ื™ืขืŸ ืื•ืŸ ืœื•ื™ืคืŸ ืงืึทื ื˜ื™ื™ื ืขืจื– ืื•ืŸ ื‘ื™ืœื“ืขืจ ืคึฟื•ืŸ ื“ื™ื™ืŸ ืกื™ ืกื™ืกื˜ืขื ื‘ืฉืขืช ื“ื™ ืกื™ ืกื™ืกื˜ืขื ื–ื™ืš ืื™ื– ืื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ?

ืื™ืš ื’ืขื•ื•ืขื˜ ืึทื– ืจื•ื‘ึฟ ืžืขื ื˜ืฉืŸ ื•ื•ืขืœืŸ ื“ื™ ื™ืขื ืขืจ ืึธืคึผืฆื™ืข, ื˜ื™ื™ึทื˜ืฉ ื–ื™ื™ ื•ื•ืขืœืŸ ืึท CI ืกื™ืกื˜ืขื ื•ื•ื™ Jenkins ืฆื• ืœื•ื™ืคืŸ ืงืึทื ื˜ื™ื™ื ืขืจื–. ืื•ืŸ ื“ื™ ื™ื–ื™ืึทืกื˜ ื•ื•ืขื’ ืฆื• ื˜ืึธืŸ ื“ืึธืก ืื™ื– ืฆื• ืคืฉื•ื˜ ืึทืจื™ื™ึทื ืœื™ื™ื’ืŸ ืึท ื“ืึธืงืงืขืจ ื›ืึธืœืขืœ ืื™ืŸ ื“ื™ื™ืŸ ืกื™ ืงืึทื ื˜ื™ื™ื ืขืจ ืื•ืŸ ืคืึทืจื‘ื™ื ื“ืŸ ืขืก ืžื™ื˜ ื“ื™ -v ืคืึธืŸ.

ืคืฉื•ื˜, ื•ื•ืขืŸ ืื™ืจ ืœื•ื™ืคืŸ ื“ื™ื™ืŸ CI ืงืึทื ื˜ื™ื™ื ืขืจ (Jenkins ืึธื“ืขืจ ืื ื“ืขืจืข), ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ื›ืึทืงื™ื ื’ ืขืคึผืขืก ืฆื•ื–ืืžืขืŸ ืžื™ื˜ Docker-in-Docker, ืึธื ื”ื™ื™ื‘ ืขืก ืžื™ื˜ ื“ื™ ืฉื•ืจื”:

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

ื“ืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ ื•ื•ืขื˜ ืื™ืฆื˜ ื”ืึธื‘ืŸ ืึทืงืกืขืก ืฆื• ื“ื™ ื“ืึธืงืงืขืจ ื›ืึธืœืขืœ ืื•ืŸ ื“ืขืจื™ื‘ืขืจ ืงืขื ืขืŸ ืœื•ื™ืคืŸ ืงืึทื ื˜ื™ื™ื ืขืจื–. ืึทื—ื•ืฅ ืึทื– ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ืœื•ื™ืคืŸ "ืงื™ื ื“" ืงืึทื ื˜ื™ื™ื ืขืจื–, ืขืก ื•ื•ืขื˜ ืงืึทื˜ืขืจ "ืกื™ื‘ืœื™ื ื’" ืงืึทื ื˜ื™ื™ื ืขืจื–.

ืคึผืจื•ึผื•ื•ื˜ ื“ืึธืก ืžื™ื˜ ื“ื™ ื‘ืึทืึทืžื˜ืขืจ ื“ืึธืงืงืขืจ ื‘ื™ืœื“ (ื•ื•ืึธืก ื›ึผื•ืœืœ ื“ื™ ื“ืึธืงืงืขืจ ื‘ื™ื™ื ืขืจื™):

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

ืขืก ืงื•ืงื˜ ืื•ืŸ ืึทืจื‘ืขื˜ ื•ื•ื™ Docker-in-Docker, ืึธื‘ืขืจ ืขืก ืื™ื– ื ื™ืฉื˜ Docker-in-Docker: ื•ื•ืขืŸ ื“ืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ ืงืจื™ื™ื™ืฅ ื ืึธืš ืงืึทื ื˜ื™ื™ื ืขืจื–, ื–ื™ื™ ื•ื•ืขืœืŸ ื–ื™ื™ืŸ ื‘ืืฉืืคืŸ ืื™ืŸ ื“ื™ ืฉืคึผื™ืฅ-ืžื“ืจื’ื” ื“ืึธืงืงืขืจ. ืื™ืจ ื•ื•ืขื˜ ื ื™ืฉื˜ ื“ืขืจืคืึทืจื•ื ื’ ื“ื™ ื–ื™ื™ึทื˜ ื™ืคืขืงืฅ ืคื•ืŸ ื ืขืกื˜ื™ื ื’ ืื•ืŸ ื“ื™ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืงืึทืฉ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืฉืขืจื“ ื“ื•ืจืš ืงื™ื™ืคืœ ืงืึทืœืœืก.

ื‘ืึทืžืขืจืงื•ื ื’: ืคืจื™ืขืจื“ื™ืงืข ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืึทื“ื•ื•ื™ื™ื–ื“ ืฆื• ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ ื“ื™ ื“ืึธืงืงืขืจ ื‘ื™ื™ื ืขืจื™ ืคึฟื•ืŸ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ืฆื• ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ. ื“ืึธืก ืื™ื– ืื™ืฆื˜ ื’ืขื•ื•ืืจืŸ ืึทื ืจื™ืœื™ื™ืึทื‘ืึทืœ ื•ื•ื™ื™ึทืœ ื“ื™ ื“ืึธืงืงืขืจ ืžืึธื˜ืึธืจ ื ื™ื˜ ืžืขืจ ืงืึธื•ื•ืขืจืก ืกื˜ืึทื˜ื™ืง ืึธื“ืขืจ ื›ึผืžืขื˜ ืกื˜ืึทื˜ื™ืง ืœื™ื™ื‘ืจืขืจื™ื–.

ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื ื•ืฆืŸ Docker ืคึฟื•ืŸ Jenkins CI, ืื™ืจ ื”ืึธื‘ืŸ 2 ืึธืคึผืฆื™ืขืก:
ื™ื ืกื˜ืึธืœื™ื ื’ ื“ื™ Docker CLI ื ื™ืฆืŸ ื“ื™ ื™ืงืขืจื“ื™ืง ื‘ื™ืœื“ ืคึผืึทืงืงืึทื’ื™ื ื’ ืกื™ืกื˜ืขื (ื“"ื” ืื•ื™ื‘ ื“ื™ื™ืŸ ื‘ื™ืœื“ ืื™ื– ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ืขื‘ื™ืึทืŸ, ื ื•ืฆืŸ .deb ืคึผืึทืงืึทื“ื–ืฉืึทื–), ื ื™ืฆืŸ ื“ื™ Docker API.

ืขื˜ืœืขื›ืข ืึทื“ืก ๐Ÿ™‚

ื“ืื ืง ืื™ืจ ืคึฟืึทืจ ืกื˜ื™ื™ื™ื ื’ ืžื™ื˜ ืื•ื ื“ื–. ืฆื™ ืื™ืจ ื•ื•ื™ ืื•ื ื“ื–ืขืจ ืึทืจื˜ื™ืงืœืขืŸ? ื•ื•ื™ืœืŸ ืฆื• ื–ืขืŸ ืžืขืจ ื˜ืฉื™ืงืึทื•ื•ืข ืื™ื ื”ืึทืœื˜? ืฉื˜ื™ืฆืŸ ืื•ื ื“ื– ื“ื•ืจืš ืคึผืœื™ื™ืกื™ื ื’ ืึท ืกื“ืจ ืึธื“ืขืจ ืจืขืงืึทืžืขื ื“ื™ื“ ืฆื• ืคืจืขื ื“ื–, ื•ื•ืึธืœืงืŸ ื•ื•ืคึผืก ืคึฟืึทืจ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืคึฟื•ืŸ $ 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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’