Docker-in-Docker ืืื ืกืืืืช ืืืืื Docker ืืืจืืืืืืช ืืคืืขืืช ืืชืื ืืงืื ืืืื ืจ ืขืฆืื ืืื ืืืช ืชืืื ืืช ืืืื. ืืืืจื ืืขืืงืจืืช ืฉื ืืฆืืจืช Docker-in-Docker ืืืืชื ืืขืืืจ ืืคืชื ืืช Docker ืขืฆืื. ืื ืฉืื ืจืืื ืืฉืชืืฉืื ืื ืืื ืืืคืขืื ืืช Jenkins CI. ืื ื ืจืื ื ืืจืืื ืืืชืืื, ืืื ืื ืืชืขืืจืจืืช ืืขืืืช ืฉื ืืชื ืืื ืืข ืขื ืืื ืืชืงื ืช Docker ืืืืื Jenkins CI. ืืืืจ ืื ืืกืืืจ ืืืฆื ืืขืฉืืช ืืืช. ืื ืืชื ืืขืื ืืื ืืคืชืจืื ืืกืืคื ืืื ืคืจืืื, ืคืฉืื ืงืจื ืืช ืืืืง ืืืืจืื ืฉื ืืืืืจ, "ืคืชืจืื ืืืขืื".
Docker-in-Docker: "ืืื"
ืืคื ื ืืืชืจ ืืฉื ืชืืื ืืื ืกืชื ืืืืงืจ
- ืคืจืืฆืช ืคืจืืฆืืช;
- ืึดืื ืึนืช;
- ืขืฆืืจืช ืืืื ืืืงืจ ืคืืขื;
- ืืฉืงืช ืืืื ืืืงืจ ืืืฉ;
- ืืืืงื;
- ืืืืืจ ืขื ืืืืืืจ.
ืื ืจืฆืืช ืืืฆืืจ ืืืืื ืืคื ืื ืืชื ืืฉืืืืจ (ืืืืืจ, ืืืืื), ืื ืื ื ืืื ืืืชืจ ืืืจืื:
- ืคืจืืฆืช ืคืจืืฆืืช;
- ืืื ืฉืืจืกืช Docker ืคืืขืืช;
- ืืื ืืช Docker ืืืฉ ืขื Docker ืืืฉื;
- ืขืฆืืจ ืืช ืืืื ืืืืงืจ;
- ืืชืื ืืืื ืืืงืจ ืืืฉ;
- ืึดืึฐืึธื;
- ืขืฆืืจ ืืืื ืืืงืจ ืืืฉ;
- ืืืืจ.
ืขื ืื ืืกืชื ืฉื Docker-in-Docker, ืืชืืืื ืืคื ืืคืฉืื ืืืชืจ:
- ืคืจืืฆืช ืคืจืืฆืืช;
- ืืจืืื + ืืฉืงื ืืฉืื ืืื;
- ืืืืืจ ืขื ืืืืืืจ.
ืื ืื ืืจืื ืืืชืจ ืืื ืืื?
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 ืืจืืืืช ืคืืขืืืช ืขื ืืืชื ืืืฉื, ืื ืื ืืืจืื ืืืช ืขื ืืฉื ืืื.
ืขื ืืืช, ืืืืจื ืืื ืืื ื ืคืฉืืื ืืื, ืืคื ืฉื ืืชื ืืจืืืช ืืืื
Docker-in-Docker: ืื ืืืืืจ
ืื ืืืื ื-build cache? ืื ืื ืืืื ืืืืืช ืื ืงืฉื. ืื ืฉืื ืฉืืืืื ืืืชื ืืขืชืื ืงืจืืืืช "ืื ืื ื ืืจืืฅ ืืช Docker-in-Docker, ืืื ืืืื ืืืฉืชืืฉ ืืชืืื ืืช ืฉืืชืืจืืืช ืืืืจื ืฉืื ืืืงืื ืืืฉืื ืืื ืืืืจื ื-Docker ืืคื ืืื ืฉืื"?
ืืื ืื ืฉืื ืืืืืื ื ืืกื ืืืื ืืช /var/lib/docker ืืืืืจื ืืืืื Docker-in-Docker. ืืคืขืืื ืื ืืืืงืื /var/lib/docer ืขื ืืกืคืจ ืงืื ืืืื ืจืื.
ืืื ืืชื ืจืืฆื ืืืฉืืืช ืืช ืื ืชืื ืื ืฉืื? ืื ืื ืืืืืง ืื ืฉืืคืืข ืื ืชืื ืื ืฉืื!
ืืืืื 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.
ืืื ืืืืขืืช ๐
ืชืืื ืฉื ืฉืืจืช ืืืชื ื. ืืื ืืชื ืืืื ืืช ืืืืืจืื ืฉืื ื? ืจืืฆืื ืืจืืืช ืขืื ืชืืื ืืขื ืืื? ืชืืื ืื ื ืขื ืืื ืืืฆืืข ืืืื ื ืื ืืืืฆื ืืืืจืื,
Dell R730xd ืืื ืคื 2 ืืืจืื ืื ืชืื ืื Equinix Tier IV ืืืืกืืจืื? ืจืง ืืื
ืืงืืจ: www.habr.com