
ããŒã¹ã€ã¡ãŒãžã«åºã¥ããŠDockerã®ã€ã¡ãŒãžãã¢ã»ã³ãã«ããã«ã¯ãéåžžããã®ããŒã¹ã€ã¡ãŒãžã®ç°å¢ã§ã³ãã³ããåŒã³åºããŸãã ããšãã°ãåºæ¬ã€ã¡ãŒãžã«ããapt-getã³ãã³ããåŒã³åºããŠãæ°ããããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãã
å€ãã®å Žåãç¹å®ã®ãŠãŒãã£ãªãã£ã»ãããããŒã¹ã·ã¹ãã ã«åã€ã³ã¹ããŒã«ããå¿ èŠããããŸããããã«ãããæçµã€ã¡ãŒãžã«å¿ èŠãªããã€ãã®ãã¡ã€ã«ãã€ã³ã¹ããŒã«ãŸãã¯ã¢ã»ã³ãã«ãããŸãã ããšãã°ãGoã¢ããªã±ãŒã·ã§ã³ããã«ãããã«ã¯ãGoã³ã³ãã€ã©ãã€ã³ã¹ããŒã«ãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãœãŒã¹ã³ãŒããããŒã¹ã€ã¡ãŒãžã«é 眮ããŠãå¿ èŠãªããã°ã©ã ãã³ã³ãã€ã«ããå¿ èŠããããŸãã ãã ããæçµã€ã¡ãŒãžã§ã¯ããã®ããã°ã©ã ãã³ã³ãã€ã«ããããã«äœ¿çšããããŠãŒãã£ãªãã£ã®ã»ããå šäœããªããã³ã³ãã€ã«ãããããã°ã©ã ã®ã¿ãå¿ èŠã§ãã
åé¡ã¯ããç¥ãããŠããŸããããã解決ããæ¹æ³ã®1ã€ã¯ãè£å©ã€ã¡ãŒãžãäœæããè£å©ã€ã¡ãŒãžããçµæã®ãã¡ã€ã«ã«ãã¡ã€ã«ã転éããããšã§ãã ãããè¡ãããã«ã Dockerãã«ãã¹ããŒãžãã«ããŸãã¯ã¢ãŒãã£ãã¡ã¯ãã€ã¡ãŒãžãdappã«ç»å ŽããŸãã ïŒ 2019幎8æ13æ¥æŽæ°ïŒ dappãããžã§ã¯ãã®ååãwerfã«å€æŽãããã³ãŒããGoã«æžãæããããããã¥ã¡ã³ããå€§å¹ ã«æ¹åãããŸããïŒã ãŸãããã®ã¢ãããŒãã¯ããœãŒã¹ã³ãŒãã®ã³ã³ãã€ã«çµæãæçµã€ã¡ãŒãžã«è»¢éãããªã©ã®åé¡ãçæ³çã«è§£æ±ºããŸãã ãããã圌ã¯ãã¹ãŠã®å¯èœãªåé¡ã解決ããŸãã...
å¥ã®äŸã次ã«ç€ºããŸããããŒã«ã«ã¢ãŒãã®Chefã䜿çšããŠã€ã¡ãŒãžãæ§ç¯ããŸãã ãããè¡ãã«ã¯ãchefdkãåºæ¬ã€ã¡ãŒãžã«é 眮ããã¬ã·ããããŠã³ããŸãã¯è¿œå ãããããã®ã¬ã·ããèµ·åããŠãã€ã¡ãŒãžãæ§æããæ°ããã³ã³ããŒãã³ããããã±ãŒãžãæ§æãã¡ã€ã«ãªã©ãã€ã³ã¹ããŒã«ããŸãã åæ§ã«ãAnsibleãªã©ã®å¥ã®æ§æ管çã·ã¹ãã ã䜿çšã§ããŸãã ãã ããã€ã³ã¹ããŒã«ãããchefdkã®ãµã€ãºã¯çŽ500 MBã§ãããæçµçãªã€ã¡ãŒãžã®ãµã€ãºãå€§å¹ ã«å¢å ããŸãã
ãã ããDockerã®ãã«ãã¹ããŒãžãã«ãã§ã¯ã ãã®åé¡ã¯è§£æ±ºãããŸãã ã ãŠãŒã¶ãŒãããã°ã©ã ã®å¯äœçšãç¹ã«äœæããããã¡ã€ã«ãç¥ããããªãå Žåã¯ã©ãããã°ããã§ããïŒ ããšãã°ãç»åãããšã¯ã¹ããŒãããããã¹ãŠã®ãã¹ã®äžå¿ èŠãªæ瀺çãªèª¬æãä¿æããªãããã ããã°ã©ã ãå®è¡ããã€ã¡ãŒãžã§äœããã®çµæãååŸãããã ãã§ãããããã°ã©ã ãšãã®äœæ¥ã«å¿ èŠãªãã¹ãŠã®ç°å¢ãæçµã€ã¡ãŒãžã®å€ã«æ®ãããã«ããŸã ã
chefdkã®å Žåããã®chefdkãå«ããã£ã¬ã¯ããªããã«ãæã«ãã«ãã€ã¡ãŒãžã«ããŠã³ãããããšãã§ããŸãã ãã ãããã®ãœãªã¥ãŒã·ã§ã³ã«ã¯åé¡ããããŸãã
- ã¢ã»ã³ããªã«å¿ èŠãªãã¹ãŠã®ããã°ã©ã ãåå¥ã®ãã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã«ãããããã§ã¯ãªããã¢ã»ã³ããªã€ã¡ãŒãžã«ç°¡åã«ããŠã³ãã§ããŸãã Ansibleã®å Žåãã·ã¹ãã Pythonãšç«¶åããªãããã«Pythonãéæšæºã®å Žæã«ããŠã³ãããå¿ èŠããããŸããããã¯æ¢ã«åé¡ãåŒãèµ·ãããŠããå¯èœæ§ããããŸãã
- ããŠã³ããããããã°ã©ã ã¯ã䜿çšãããŠããåºæ¬ã€ã¡ãŒãžã«äŸåããŸãã ããã°ã©ã ãUbuntuåãã«ãã«ããããŠããå ŽåãAlpineãªã©ã®ãæå³ãããŠããªãç°å¢ã§ã¯èµ·åããªãå¯èœæ§ããããŸãã ãã¹ãŠã®äŸåé¢ä¿ãåãããªã ããã¹ããã±ãŒãžã§ããchefdkã§ãããäŸç¶ãšããŠã·ã¹ãã glibcã«äŸåããŠãããmusl libcã䜿çšããAlpineã§ã¯åäœããŸããã
ãããããã¹ãŠã®æçšãªãŠãŒãã£ãªãã£ã®éçãªäžå€ã®ã»ãããæºåã§ããããããã¯éåžžã«å·§åŠã«ãªã³ã¯ãããŠãåºæ¬ã€ã¡ãŒãž ãã¹ã¯ã©ããã§ãåäœããŸããïŒ ãã®ãããª/ãã®ãããªã€ã¡ãŒãžãããŒã¹ã«æ¥ç¶ããåŸãæçµã€ã¡ãŒãžã«ã¯ããããã®ãŠãŒãã£ãªãã£ãæ¥ç¶ããã空ã®ããŠã³ããã€ã³ããã£ã¬ã¯ããªã®ã¿ãååšããŸãã
åéºãæ¢ããŠ
çè«
/myutils
ãªã©ãéçã«å®çŸ©ãããããã€ãã®éæšæºãã£ã¬ã¯ããªã«äžé£ã®ããã°ã©ã ãå«ãã€ã¡ãŒãžãååŸããå¿ èŠããããŸãã
/myutils
å ã®ããã°ã©ã ã¯ã
/myutils
å ã®ã©ã€ãã©ãªã®ã¿ã«äŸåããå¿ èŠããããŸãã
Linuxã§åçã«ã³ã³ãã€ã«ãããããã°ã©ã ã¯ãã·ã¹ãã äžã®ld-linuxãªã³ã«ãŒã®å Žæã«äŸåããŸãã ããšãã°ã
ubuntu:16.04
bash
ãã€ããªã¯ããªã³ã«ãŒ
/lib64/ld-linux-x86-64.so.2
äŸåããããã«ã³ã³ãã€ã«ãããŸãã
$ ldd /bin/bash linux-vdso.so.1 => (0x00007ffca67d8000) libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007fd8505a6000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd8503a2000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd84ffd8000) /lib64/ld-linux-x86-64.so.2 (0x00007fd8507cf000)
ããã«ããã®äŸåé¢ä¿ã¯éçã§ããããã€ããªèªäœã«ã³ã³ãã€ã«ãããŸãã
$ grep "/lib64/ld-linux-x86-64.so.2" /bin/bash Binary file /bin/bash matches
ãããã£ãŠãaïŒæ¡ä»¶ä»ã
/myutils/bin/bash
ãã³ã³ãã€ã«ããŠããªã³ã«ãŒ
/myutils/lib64/ld-linux-x86-64.so.2
䜿çšãã
/myutils/lib64/ld-linux-x86-64.so.2
ãŸãã bïŒ
/myutils/lib64/ld-linux-x86-64.so.2
ãªã³ã«ãŒã¯ã
/myutils/{lib64,lib}
ããã©ã€ãã©ãªãåçã«ãªã³ã¯ããããã«æ§æãããŠããããš
æåã®ã¹ãããã¯ãéæšæºã®ã«ãŒããã£ã¬ã¯ããªã«ããä»ã®ããã°ã©ã ã®ã¢ã»ã³ããªãšãã®åŸã®äœæ¥ã«å¿ èŠãªãã¹ãŠãå«ã
toolchain
ã€ã¡ãŒãžãæ§ç¯ããããšã§ãã ãããè¡ãã«ã¯ã Linux From Scratchãããžã§ã¯ãã®æ瀺ã«åœ¹ç«ã¡ãŸãã

dappdepsãã£ã¹ããªãã¥ãŒã·ã§ã³ããã«ãããŸã
ãååžãã®ç»åã»ãããdappdepsãšåŒã°ããã®ã¯ãªãã§ããïŒ ãããã®ç»åã¯dappã³ã¬ã¯ã¿ãŒã«ãã£ãŠäœ¿çšãããããããã®ãããžã§ã¯ãã®ããŒãºã«åãããŠçµã¿ç«ãŠãããŸãã
ãããã£ãŠã æçµç®æšã¯æ¬¡ã®ãšããã§ãã
- ä»ã®ã¢ããªã±ãŒã·ã§ã³ãšglibcã©ã€ãã©ãªãæ§ç¯ããããã®GCCã³ã³ãã€ã©ãåããdappdeps /ããŒã«ãã§ãŒã³ã€ã¡ãŒãžã
- bapp ãgtarãsudoãcoreutilsãfindutilsãdiffutilsãsedãrsyncãshadowãtermcapãªã©ã®äžé£ã®ããã°ã©ã ãšãã¹ãŠã®äŸåã©ã€ãã©ãªãå«ãdappdeps /ããŒã¹ã€ã¡ãŒãžã
- GitãŠãŒãã£ãªãã£ãšãã¹ãŠã®äŸåé¢ä¿ãå«ãdappdeps / gitartifactã®ã€ã¡ãŒãžã
- 以äžãå«ãããã¹ãŠã®ChefäŸåé¢ä¿ãå«ãchefdk omnââibusããã±ãŒãžãå«ãdappdeps / chefdkã€ã¡ãŒãž Rubyã€ã³ã¿ãŒããªã¿ãŒã
- AnsibleãŠãŒãã£ãªãã£ã䜿çšããdappdeps / ansibleã€ã¡ãŒãžã«ã¯ã以äžãå«ããã¹ãŠã®äŸåé¢ä¿ãå«ãŸããŸãã Pythonã€ã³ã¿ãŒããªã¿ãŒã
Dappdepsç»åã¯äºãã«äŸåããå ŽåããããŸã ã ããšãã°ãdappdeps / baseããã«ãããã«ã¯ãdappdeps / toolchainã€ã¡ãŒãžã®ããŒã«ãã§ãŒã³ãšglibcãå¿ èŠã§ãã dappdeps / baseã®ãã¹ãŠã®ãŠãŒãã£ãªãã£ãã³ã³ãã€ã«ããåŸãdappdeps / toolchainã®ãã¡ã€ã«ã¯ã©ã³ã¿ã€ã ã§å®è¡ããå¿ èŠããããŸãã
äž»ãªæ¡ä»¶ã¯ããããã®ã€ã¡ãŒãžã®ãŠãŒãã£ãªãã£ãéæšæºã®å Žæ ãã€ãŸã
/.dapp/deps/
ã«ãããæšæºã·ã¹ãã ãã¹ã®ãŠãŒãã£ãªãã£ãã©ã€ãã©ãªã«äŸåããªãããšã§ãã ãŸããdappdepsã€ã¡ãŒãžã«ã¯/.dapp/deps以å€ã®ãã¡ã€ã«ãå«ããªãã§
/.dapp/deps
ã
ãã®ãããªã€ã¡ãŒãžã䜿çšãããšããŠãŒãã£ãªãã£ãå«ãããªã¥ãŒã ã§ãããã«åºã¥ããŠã³ã³ãããäœæããDockerã®
--volumes-from
ãªãã·ã§ã³ã䜿çšããŠä»ã®ã³ã³ããã«ããŠã³ãã§ããŸãã
dappdeps /ããŒã«ãã§ãŒã³ã®åé
Linux From Scratchããã¥ã¢ã«ã®ç¬¬5ç« ãäžæã·ã¹ãã ã®æ§ç¯ãã§ã¯ãäž»ãªã¿ãŒã²ãããã£ã¹ããªãã¥ãŒã·ã§ã³ãçµã¿ç«ãŠããŠãŒãã£ãªãã£ã»ãããåãã
/tools
ã§äžæchrootç°å¢ãæ§ç¯ããããã»ã¹ã«ã€ããŠèª¬æããŠããŸãã
ãã®å Žåãchrootç°å¢ã®ãã£ã¬ã¯ããªããããã«å€æŽããŸãã
--prefix
ãã©ã¡ãŒã¿ãŒã§ã¯ãã³ã³ãã€ã«æã«
/.dapp/deps/toolchain/0.1.1
ãæå®ããŸãã ããã¯ãdappdeps / toolchainãã¢ã»ã³ããªã³ã³ããã«ããŠã³ãããããšãã«ã¢ã»ã³ããªã³ã³ããã«è¡šç€ºããããã£ã¬ã¯ããªã§ããå¿ èŠãªãã¹ãŠã®ãŠãŒãã£ãªãã£ãšã©ã€ãã©ãªãå«ãŸããŠããŸãã å¿ èŠãªã®ã¯ãGNU binutilsãGCCãããã³glibcã§ãã
ã€ã¡ãŒãžã¯ãDockerãã«ãã¹ããŒãžãã«ãã䜿çšããŠåéãããŸãã
ubuntu:16.04
åºã¥ãã€ã¡ãŒãž
ubuntu:16.04
ãç°å¢å šäœãæºåãããããã°ã©ã ãã³ã³ãã€ã«ããã
/.dapp/deps/toolchain/0.1.1
.
/.dapp/deps/toolchain/0.1.1
ã€ã³ã¹ããŒã«ãã
/.dapp/deps/toolchain/0.1.1
ã 次ã«ããã®ãã£ã¬ã¯ããªãã¹ã¯ã©ããã€ã¡ãŒãždappdeps / toolchainïŒ0.1.1ã«ã³ããŒããŸãã Dockerfileã¯ããã«ãããŸã ã
æçµçãªdappdeps /ããŒã«ãã§ãŒã³ã€ã¡ãŒãžã¯ãLFSã®çšèªã§ãäžæçãªã·ã¹ãã ãã§ãã ãã®ã·ã¹ãã ã®GCCã¯äŸç¶ãšããŠã©ã€ãã©ãªãžã®ã·ã¹ãã ãã¹ã«é¢é£ä»ããããŠããŸãããGCCãããŒã¹ã€ã¡ãŒãžã§åäœããããšãä¿èšŒããŸããã dappdeps / toolchainã€ã¡ãŒãžã¯è£å©çãªãã®ã§ãåŸã§äœ¿çšãããŸãã ãã«ãããããšã¯ããã§ã«ããã°ã©ã ã®äžè¬çãªã·ã¹ãã ã©ã€ãã©ãªãšã¯æ¬åœã«ç¬ç«ããŠããŸãã
Omnibusãdappdeps /ããŒã«ãã§ãŒã³ã§äœ¿çšãã

Omnibus㯠ã chefdkãGitLabãªã©ã®ãããžã§ã¯ããæ§ç¯ããããã«äœ¿çšãããŸãã ããã°ã©ã ãšãã·ã¹ãã ãªã³ã«ãŒãšlibcãé€ããã¹ãŠã®äŸåã©ã€ãã©ãªã䜿çšããŠãèªå·±å®çµåã®ãã³ãã«ãäœæã§ããŸãã ãã¹ãŠã®æé ã¯ãèªã¿ããã䟿å©ãªRubyã¬ã·ãã§èª¬æãããŠããŸãã Omnibusãããžã§ã¯ãã«ã¯ããã§ã«äœæããããªã ããã¹ãœãããŠã§ã¢ã¬ã·ãã®ã©ã€ãã©ãªããããŸãã
ããã§ã¯ã Omnibusã䜿çšããŠãæ®ãã®dappdepsååžã®ã¢ã»ã³ããªã説æããŠã¿ãŸãããã ãã ããã·ã¹ãã ãªã³ã«ãŒãšlibcãžã®äŸåãåãé€ãããã«ãdappdeps / toolchainã®ã³ã³ãã€ã©ãŒã䜿çšããŠOmnibusã®ãã¹ãŠã®ããã°ã©ã ãåéããŸãã ãã®å Žåãããã°ã©ã ã¯glibcã«é¢é£ä»ããããŸããããã¯dappdeps / toolchainã«ããããŸãã
ãããè¡ãã«ã¯ãdappdeps / toolchainã®å 容ãã¢ãŒã«ã€ããšããŠä¿åããŸãã
$ docker pull dappdeps/toolchain:0.1.1 $ docker save dappdeps/toolchain:0.1.1 -o dappdeps-toolchain.tar
Dockerfile ADD
ãã£ã¬ã¯ãã£ãã䜿çšããŠãã®ã¢ãŒã«ã€ããè¿œå ããã¢ãŒã«ã€ãã®å 容ãã¢ã»ã³ããªã³ã³ãããŒã®ã«ãŒãã«è§£åããŸãã
ADD ./dappdeps-toolchain.tar /dappdeps-toolchain RUN tar xf /dappdeps-toolchain/**/layer.tar -C /
ãªã ããã¹çµç±ã§ã¢ã»ã³ããªãéå§ããåã«ããã¹
/.dapp/deps/toolchain/0.1.1/bin
ãåªå 床ãšããŠ
PATH
å€æ°ã«è¿œå ããdappdeps / toolchainã®GCCã䜿çšãããããã«ããŸãã
Omnibus ã®çµæã¯ããã±ãŒãžïŒãã®äŸã§ã¯DEBïŒã§ããããã®å 容ã¯è§£åãããdappdeps / toolchainãšåæ§ã®Dockerãã«ãã¹ããŒãžãã«ãã䜿çšããŠ
/.dapp/deps/{base|gitartifact|...}
転éãããŸãã
ãã«ãdappdeps /ããŒã¹
Omnibusã®ãããžã§ã¯ãã¯ã
omnibus/config/projects/dappdeps-base.rb
ãããžã§ã¯ããã¡ã€ã«
omnibus/config/projects/dappdeps-base.rb
ã䜿çšããŠèª¬æãããŠããŸãã
name 'dappdeps-base' license 'MIT' license_file 'LICENSE.txt' DOCKER_IMAGE_VERSION = "0.2.3" install_dir "/.dapp/deps/base/#{DOCKER_IMAGE_VERSION}" build_version DOCKER_IMAGE_VERSION build_iteration 1 dependency "dappdeps-base"
ãã®ãã¡ã€ã«ã«ã¯ãdappdeps-base Omnibusããã±ãŒãžãšã¿ãŒã²ããã€ã³ã¹ããŒã«ãã£ã¬ã¯ããªã®ãã¹ãŠã®äŸåé¢ä¿ãå«ãŸããŠããŸãã äŸåé¢ä¿ã¯ãå¥åã®ãªããžããªãŒïŒ omnââibus-softwareãªã© ïŒãŸãã¯
omnibus/config/software
ãã£ã¬ã¯ããªãŒã«é 眮ã§ããŸãã ãã®ãã£ã¬ã¯ããªå ã®åãã¡ã€ã«ã«ã¯ãããã±ãŒãž/ã³ã³ããŒãã³ãã®ã€ã³ã¹ããŒã«æé ãèšè¿°ãããŠããŸãã dappdeps-baseã®å ŽåãOmnibusã¯æšæºã®omnibus-softwareãªããžããªã«ãªããœãããŠã§ã¢ã¬ã·ããèšè¿°ããŠããŸãïŒ
acl
ã
attr
ã
coreutils
ã
diffutils
ã
findutils
ã
gtar
ã
rsync
ã
sed
ã
shadow
ã
sudo
ã
termcap
ã
Omnibusã®ãœãããŠã§ã¢ã¬ã·ããã©ã®ãããªãã®ãã瀺ã
rsync
äŸãèããŠã¿ãŸãããã
name 'rsync' default_version '3.1.2' license 'GPL-3.0' license_file 'COPYING' version('3.1.2') { source md5: '0f758d7e000c0f7f7d3792610fad70cb' } source url: "https://download.samba.org/pub/rsync/src/rsync-#{version}.tar.gz" dependency 'attr' dependency 'acl' dependency 'popt' relative_path "rsync-#{version}" build do env = with_standard_compiler_flags(with_embedded_path) command "./configure --prefix=#{install_dir}/embedded", env: env command "make -j #{workers}", env: env command 'make install', env: env end
source
ãã£ã¬ã¯ãã£ãã¯ããœãŒã¹ã³ãŒãã®ããŠã³ããŒãå ã®URLã瀺ããŸãã ä»ã®ã³ã³ããŒãã³ããžã®äŸåé¢ä¿ã¯ãååã«ãã
dependency
ãã£ã¬ã¯ãã£ãã«ãã£ãŠç€ºãããŸãã ã¢ã»ã³ãã«ãããã³ã³ããŒãã³ãã®ååã¯ã
name
ãã£ã¬ã¯ãã£ãã«ãã£ãŠæå®ãããŸãã åæ§ã«ãåãœãããŠã§ã¢ã¬ã·ãã¯ãä»ã®ã³ã³ããŒãã³ããžã®äŸåé¢ä¿ã瀺ãå ŽåããããŸãã
build
ãããã¯å ã«ã¯ããœãŒã¹ããã®æšæºãã«ãã³ãã³ãã瀺ãããŠããŸãã
dappdeps / baseã®Omnibusããã³Dockerfileãããžã§ã¯ãã¯ã ããã«ãããŸã ã
dappdeps / gitartifactã®åé
dappdeps-gitartifactã®å ŽåãGitãã«ãã¬ã·ãã®ã¿ãå¿ èŠã§ããããã§ã«omnibus-softwareã«ãããŸã-æ®ã£ãŠããã®ã¯ãçŸåšã®Omnibusã«æ¥ç¶ããããšã ãã§ãã ãã以å€ã¯ããã¹ãŠåãã§ãã
dappdeps / gitartifactçšã®Omnibusããã³Dockerfileãããžã§ã¯ãã¯ã ããã«ãããŸã ã
dappdeps / chefdkã®åé
chefdkã«ã¯ãæ¢è£œã®Omnibusãããžã§ã¯ããæ¢ã«ãããŸãã Dockerfileãä»ããŠã¢ã»ã³ããªã³ã³ããã«è¿œå ããæšæºã€ã³ã¹ããŒã«ãã¹chefdk
/opt/chefdk
ã
/.dapp/deps/chefdk/2.3.17-2
ïŒã€ã³ã¹ããŒã«ãã¹ã«ã¯ChefããŒãžã§ã³ãå«ãŸããŸãïŒã
dappdeps / chefdkãæ§ç¯ããããã®dockerfileã¯ã ããã«ãããŸã ã
dappdepsã®åé/ ansible
Ansibleããã«ãããããã«ãPythonã€ã³ã¿ãŒããªã¿ãŒãpipãã€ã³ã¹ããŒã«ããAnsibleã®ãœãããŠã§ã¢ã¬ã·ãã説æããOmnibusãããžã§ã¯ããéå§ããŸãã
name "ansible" ANSIBLE_GIT_TAG = "v2.4.4.0+dapp-6" dependency "python" dependency "pip" build do command "#{install_dir}/embedded/bin/pip install https://github.com/flant/ansible/archive/#{ANSIBLE_GIT_TAG}.tar.gz" command "#{install_dir}/embedded/bin/pip install pyopenssl" end
ã芧ã®ãšãããAnsibleã®ã€ã¡ãŒãžã¯çµã¿èŸŒã¿ã®Pythonãpipã§ãããäŸåé¢ä¿ã®ããpip Ansibleãä»ããŠã€ã³ã¹ããŒã«ãããŸãã
dappdeps / ansibleçšã®Omnibusããã³Dockerfileãããžã§ã¯ãã¯ã ããã«ãããŸã ã
dappdepsååžã®äœ¿çšæ¹æ³ã¯ïŒ
ããªã¥ãŒã ã®ããŠã³ãã§dappdepsã€ã¡ãŒãžã䜿çšããã«ã¯ãæåã«åã€ã¡ãŒãžã®ã³ã³ãããŒãäœæãããã®ã³ã³ãããŒã«ä¿åããããªã¥ãŒã ãæå®ããå¿ èŠããããŸãã ããããçŸæç¹ã§Dockerã«å¿ èŠãªãã®ã§ãã
$ docker create --name dappdeps-toolchain --volume /.dapp/deps/toolchain/0.1.1 dappdeps/toolchain:0.1.1 no-such-cmd 13edda732176a44d7d822202d8327565b78f4a2190368bb1df46cdad1e127b6e $ docker ps -a | grep dappdeps-toolchain 13edda732176 dappdeps/toolchain:0.1.1 "no-such-cmd" About a minute ago Created dappdeps-toolchain
ã³ã³ããã¯
dappdeps-toolchain
ãšåŒã°ããŸãããã®ååã«ããããã®ã³ã³ããã®å®£èšããããã¹ãŠã®ããªã¥ãŒã ã¯ã
--volumes-from
ã䜿çšããŠä»ã®ã³ã³ããã«ããŠã³ãããããã«äœ¿çšã§ããŸãã Dockerã«ã¯
no-such-cmd
ä»»æã®ã³ãã³ããã©ã¡ãŒã¿ãŒãæå®ããå¿ èŠããããŸããããã®ã³ã³ãããŒã¯æ±ºããŠèµ·åãããŸãã-
Created
ç¶æ ã®ãŸãŸã«ãªããŸãã
æ®ãã®ã³ã³ãããäœæããŸãã
$ docker create --name dappdeps-base --volume /.dapp/deps/base/0.2.3 dappdeps/base:0.2.3 no-such-cmd 20f524c5b8b4a59112b4b7cb85e47eee660c7906fb72a4935a767a215c89964e $ docker create --name dappdeps-ansible --volume /.dapp/deps/ansible/2.4.4.0-10 dappdeps/ansible:2.4.4.0-10 no-such-cmd cd01ae8b69cd68e0611bb6c323040ce202e8e7e6456a3f03a4d0a3ffbbf2c510 $ docker create --name dappdeps-gitartifact --volume /.dapp/deps/gitartifact/0.2.1 dappdeps/gitartifact:0.2.1 no-such-cmd 2c12a8743c2b238d90debaf066e29685b41b138c10f2b893a815931df866576d $ docker create --name dappdeps-chefdk --volume /.dapp/deps/chefdk/2.3.17-2 dappdeps/chefdk:2.3.17-2 no-such-cmd 4dffe74c49c8e4cdf9d749177ae9efec3bdae6e37c8b6df41b6eb527a5c1d891
ããã§ããã®å€§éšãããã¹ãŠèããããã¯ã©ã€ããã¯ã¹ã«å°éããŸããã ãã®ãããæ©èœã®ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ãšããŠãAlpineã€ã¡ãŒãžã«
nginx
ããã±ãŒãžãš
tree
ããã±ãŒãžãã€ã³ã¹ããŒã«ããdappdepsããAnsible / dappdeps / baseããBashçµç±ã§ansibleãå®è¡ããŸã ã
$ docker run -ti --name mycontainer --volumes-from dappdeps-toolchain --volumes-from dappdeps-base --volumes-from dappdeps-gitartifact --volumes-from dappdeps-ansible --volumes-from dappdeps-chefdk alpine:latest /.dapp/deps/base/0.2.3/embedded/bin/bash -lc '/.dapp/deps/ansible/2.4.4.0-10/embedded/bin/ansible localhost -m apk -a "name=nginx,tree update_cache=yes"' [WARNING]: Unable to parse /etc/ansible/hosts as an inventory source [WARNING]: No inventory was parsed, only implicit localhost is available [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' localhost | SUCCESS => { "changed": true, "failed": false, "msg": "installed nginx tree package(s)", "packages": [ "pcre", "nginx", "tree" ], "stderr": "", "stderr_lines": [], "stdout": "(1/3) Installing pcre (8.41-r1)\n(2/3) Installing nginx (1.12.2-r3)\nExecuting nginx-1.12.2-r3.pre-install\n(3/3) Installing tree (1.7.0-r1)\nExecuting busybox-1.27.2-r7.trigger\nOK: 6 MiB in 14 packages\n", "stdout_lines": [ "(1/3) Installing pcre (8.41-r1)", "(2/3) Installing nginx (1.12.2-r3)", "Executing nginx-1.12.2-r3.pre-install", "(3/3) Installing tree (1.7.0-r1)", "Executing busybox-1.27.2-r7.trigger", "OK: 6 MiB in 14 packages" ] }
æåŸã®ã³ãŒã-çµæã®ã³ã³ããããã€ã¡ãŒãžãäœæãã... dappdepsããã¯ç©ºã®ããŠã³ããã€ã³ããã£ã¬ã¯ããªãããªãã£ãããšãããããŸãã
$ docker commit mycontainer myimage sha256:9646be723b91daeaf538b7d92bb8844578abc7acd3028394f543e883eeb382bb $ docker run -ti --rm myimage tree /.dapp /.dapp âââ deps âââ ansible â âââ 2.4.4.0-10 âââ base â âââ 0.2.3 âââ chefdk â âââ 2.3.17-2 âââ gitartifact â âââ 0.2.1 âââ toolchain âââ 0.1.1 11 directories, 0 files

ããªãã¯ä»ã«äœã倢èŠãããšãã§ããŸããïŒ
ãããªãäœæ¥ãšåé¡
dappdepsã®åé¡ã¯äœã§ããïŒ
dappdeps /ããŒã«ãã§ãŒã³ã®ãµã€ãºãå°ããããã«ã¯äœæ¥ãå¿ èŠã§ãã ãããè¡ãã«ã¯ãããŒã«ãã§ãŒã³ã2ã€ã®éšåã«åå²ããå¿ èŠããããŸããdappdepsã§æ°ãããŠãŒãã£ãªãã£ãæ§ç¯ããããã«å¿ èŠãªéšåãšããããã®ãŠãŒãã£ãªãã£ãå®è¡ããããã«ã©ã³ã¿ã€ã ã«ããŠã³ãããå¿ èŠãããglibcãªã©ã®åºæ¬ã©ã€ãã©ãªãæã€éšåã§ãã
Ansible aptã¢ãžã¥ãŒã«ãdappdeps / ansibleã§æ©èœãããã«ã¯ãUbuntuã®python-aptããã±ãŒãžã®å 容ãåæ§ç¯ããã«ã€ã¡ãŒãžã«çŽæ¥è¿œå ããå¿ èŠããããŸããã ãã®å Žåãaptã¢ãžã¥ãŒã«ã¯DEBã«åºã¥ãåºæ¬ã€ã¡ãŒãžã§ã¯åé¡ãªãåäœããŸãããç¹å®ã®ããŒãžã§ã³ã®glibcãå¿ èŠã§ãã aptèªäœã¯ãã£ã¹ããªãã¥ãŒã·ã§ã³åºæã®ã¢ãžã¥ãŒã«ã§ãããããããã¯åãå ¥ããããŸãã
Dockerfileã«ã¯äœãæ¬ ããŠããŸããïŒ
dappdeps / toolchainã€ã¡ãŒãžã®ããªã¥ãŒã ã䜿çšããã«ã¯ããŸããã®ã€ã¡ãŒãžã®ã¢ãŒã«ã€ããäœæããŠããã
Dockerfile ADD
ãã£ã¬ã¯ãã£ãã䜿çšããŠå¥ã®ã€ã¡ãŒãžã«è¿œå ããå¿ èŠããããŸãïŒãdappdeps / toolchainã§ã®Omnibusã®äœ¿çšãã»ã¯ã·ã§ã³ãåç §ïŒã Dockerfileã®åŽããèŠããšããã«ãæã«å¥ã®ã€ã¡ãŒãžã®ãã£ã¬ã¯ããªã
VOLUME
ãšããŠåçŽã«æ¥ç¶ã§ããååãªæ©èœããããŸããã
--volumes-from
ãªãã·ã§ã³ã®é¡äŒŒç©ã
çµè«
ã¢ã€ãã¢ãæ©èœããããšã確èªããã¢ã»ã³ããªåœä»€ã§GNUããã³ãã®ä»ã®CLIãŠãŒãã£ãªãã£ã䜿çšããPythonãŸãã¯Rubyã€ã³ã¿ãŒããªã¿ãŒãå®è¡ããAlsibleãŸãã¯ã¹ã¯ã©ããã€ã¡ãŒãžã§AnsibleãŸãã¯Chefãå®è¡ã§ããããã«ããŸããã ãã®å Žåãã¢ã»ã³ããªåœä»€ã®äœæè ã¯ãå®è¡ãããã³ãã³ãã®å®è¡ã®å¯äœçšãç¥ãå¿ èŠããªããDockerãã«ãã¹ããŒãžãã«ãã®å Žåã®ããã«ãã€ã³ããŒãããå¿ èŠã®ãããã¡ã€ã«ãæ瀺çã«ãªã¹ãããŸãã
ãã®äœæ¥ã®çµæã¯å®éã«ãé©çšãããŸããdappã¯ãã¢ã»ã³ããªã³ã³ããã§dappdepsã€ã¡ãŒãžã䜿çšããŸãã ããšãã°ãdappdeps / gitartifactã®Gitã¯ãããã®æäœã«äœ¿çšãããGitãŠãŒãã£ãªãã£ã¯ãã¹ãŠã®ããŒã¹ã€ã¡ãŒãžã§åãåäœãä¿èšŒããŸãã ãã ããdappãdappdepsã䜿çšããæ¹æ³ã¯ããã®èšäºã®ç¯å²å€ã§ãã
ãã®èšäºã®ç®çã¯ãã¢ã€ãã¢ãã®ãã®ãäŒããå®éã®å®çšäŸã§ãã®å¿çšã®å¯èœæ§ã瀺ãããšã§ããã
PS説æãããŠãããã¹ãŠã®dappdepsã€ã¡ãŒãžã¯ãhub.docker.comã§å ¥æã§ããŸã ïŒ
dappdeps/toolchain:0.1.1
ã
dappdeps/base:0.2.3
ã
dappdeps/gitartifact0.2.1
ã
dappdeps/ansible:2.4.4.0-10
ã
dappdeps/chefdk:2.3.17-2
䜿çšã§ããŸãã