ã€ã¡ãŒãžã®ãµã€ãºã¯ãã¢ããªã±ãŒã·ã§ã³ã®é床ãšãµã€ãºã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸãã ã€ã¡ãŒãžãã¹ãªã ã«ãããšããã«ãæéãççž®ãããã ãã§ãªããã¢ããªã±ãŒã·ã§ã³ã®ãããããªã³ãã®æé©åã«ã圹ç«ã¡ãŸãã ããããã³ã³ãã¯ãã§Linuxãã¬ã³ããªãŒãªã¢ããªã±ãŒã·ã§ã³ãããŸããããã€ããã«ã¯ãããããã¯ãã¹ãã©ãããã©ãŒã ãŠãããã«ããã±ãŒãžåããããšãæå³ããŸãã ããã§åœ¹ç«ã€ã®ããã³ã³ãããš BusyBox Dockerãªãã£ã·ã£ã«ã€ã¡ãŒãž ã§ãã

BusyBox ã³ã³ãã㌠ã€ã¡ãŒãžã¯éåžžã«è»œéã§ãã ã»ãšãã©ã®ã¿ã°ã¯ 900KB æªæº (ã¢ãŒããã¯ãã£ã«ãã£ãŠç°ãªããŸã) ã§ãããããéçºè ããã®ã¹ãªã ãã«æ¹ããã Alpine ã€ã¡ãŒãžãããããã«å°ãããªããŸããÂ
BusyBoxã®ã³ã³ãã¯ããªãµã€ãºã¯ãæåã®ã¢ããããŒããšããŠã³ããŒãã®æéãå€§å¹ ã«ççž®ããããšã§ãããè¿ éãªå ±æãå¯èœã«ããŸãã ãã®å°ããªåºæ¬ã€ã¡ãŒãžã¯ãã¢ããªã±ãŒã·ã§ã³ã®æ»æå¯Ÿè±¡é åãæžããããšãã§ããŸãã
ãã®ã¬ã€ãã§ã¯ãBusyBox ã®æŠèŠããã®äœ¿ç𿹿³ããã¹ã ãã©ã¯ãã£ã¹ã®å ±æãã³ã³ãã㌠ã€ã¡ãŒãžã®äœ¿ç𿹿³ã玹ä»ããŸãã
BusyBoxãšã¯äœã§ãã?
人ã ã¯ãã°ãã°ãã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãããçµã¿èŸŒã¿Linuxã®ã¹ã€ã¹ã¢ãŒããŒãã€ãããšåŒãã§ããŸãã BusyBoxã¯ãè€æ°ã®äžè¬çãªUNIXãŠãŒãã£ãªãã£(ãŸãã¯ã¢ãã¬ãã)ã1ã€ã®å®è¡å¯èœãªãã€ããªã«ããã±ãŒãžåããŸãã ããã«ãããç¬èªã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ãäœæã§ããŸãã ãŸããDocker ã€ã¡ãŒãžã䜿çšãããšãããŸããŸãªç°å¢ã§ BusyBox ã䜿çšã§ããŸããÂ
å°åãªããã匷åãªãã® 1 ã€ã®å®è¡å¯èœãã¡ã€ã«ã«ã¯ãUNIX ã®äž»èŠãªã³ãã³ãã®çŽ 400 ã€ãå«ãŸããŠããŸãã ãŸã ãå€ãã®GNUãŠãŒãã£ãªã㣠(äŸ: shellutils ãš fileutils) ããå®å šãªãã£ã¹ããªãã¥ãŒã·ã§ã³ã§åçã®ãã®ã«çœ®ãæããŠãã ããã å®å šãªæ©èœãæ¬ ããŠãããã®ããããŸããããããã®äž»ãªæ©èœã¯ãã®ãŸãŸã§ãããéçºè ã«åŠ¥åã匷ããããšã¯ãããŸããã
ã©ã®ããŒãžã§ã³ã®BusyBoxã䜿çšããã°ããã§ãã?
BusyBox ã¯ãäžè¬çãªã·ã§ã« ã³ãã³ãã®äœ¿çšãšã¯ã¹ããªãšã³ã¹ãåçŸããã®ã«åœ¹ç«ã¡ãŸãã äžéšã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã¯GNUã® coreutils ããã±ãŒãžã䜿çšããŠãããã®ã³ãã³ããåºè·ããŸãããä»ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã¯ä»£ããã«BusyBoxãéžæããŸããã ããã¯æãå®å
šãªç°å¢ã§ã¯ãããŸãããã䜿ãããã軜éãªç°å¢ãå¿
èŠãšããéçºè
ã«æé©ã§ãã
ãã®ãœãããŠã§ã¢ã¹ã€ãŒãã«ã¯ãããŸããŸãªãã«ãæžã¿ãã€ããªããŒãžã§ã³ããããDocker Hubã§ 30 ãè¶ ããã€ã¡ãŒãžã¿ã°ããµããŒãããŠããŸãã ããããã«ãCPU ãšäŸåé¢ä¿ããšã«ç¬èªã® Linux ãã€ã㪠ããªã¢ã³ããå«ãŸããŠãããã€ã¡ãŒãžã®ãµã€ãºãšæ©èœãç°ãªããŸãã
ãŸããåã€ã¡ãŒãžã¿ã°ã¯ãããŸããŸãª libc ããªãšãŒã·ã§ã³ã«å¯ŸããŠæ§ç¯ãããŠããŸãã åã€ã¡ãŒãžãš muslãuClibcãdietlibcãglibc ãšã®é¢ä¿ããã«ãã«ã©ã®ãããªåœ±é¿ãäžããããçè§£ããã«ã¯ããã® æ¯èŒè¡šãã芧ãã ããã ããã¯ãç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã«é©ããç»åãéžæããã®ã«åœ¹ç«ã¡ãŸãã
ããã¯èšã£ãŠããBusyBoxã¯äœã«æé©ã§ãã? ãã£ããèŠãŠãããŸãããã
BusyBoxã®ãŠãŒã¹ã±ãŒã¹
Linuxã®éçºè ã®ãŠãŒã¹ã±ãŒã¹ã¯ããªãç°ãªããŸãããããã§åãäžããããã€ãã®è峿·±ãäŸããããŸãã
1. çµã¿èŸŒã¿ã·ã¹ãã çšã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ãæ§ç¯
çµã¿èŸŒã¿ã·ã¹ãã ã¯ãå©çšå¯èœãªãªãœãŒã¹ãéãããŠããããšã§ç¥ãããŠãããå¿ èŠãªæ©èœã®ã¿ãå«ã埮å°ãµã€ãºã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ãå¿ èŠã§ãã é£Ÿãæ°ãäœåãªäŸåé¢ä¿ã®äœå°ã¯ã»ãšãã©ãããŸããã ãã®ãããçµã¿èŸŒã¿Linuxã®ããŒãžã§ã³ã¯åçåãããç®çã«åãããŠæ§ç¯ãããã®ãæåã§ãã ããã¯BusyBoxãåªããŠãããšããã§ãã
BusyBoxã¯ããªãã¢ãžã¥ãŒã«åãããŠããŸãã ãã«ãã«é©ããç»åãéžæã§ããŸãã ãã ããã³ã³ãã€ã«äžã«ã³ãã³ããæ©èœãéžæããããšãã§ããŸãã
å¿ èŠã®ãªããã®ã(ããçšåºŠ)ãŸãšããå¿ èŠã¯ãããŸããã éåžžãLinuxã«ãŒãã«äžã§å®è¡ããŸãã ãã ããå®è£ ãã³ã³ããåãããšããã®ã«ãŒãã«ãã³ã³ããèªäœã«å«ããå¿ èŠããªããªããŸãã BusyBoxã¯ãçµã¿èŸŒã¿ã·ã¹ãã ã®ã«ãŒãã«ã掻çšããã¹ããŒã¹ãç¯çŽããŸãã
ç¹å®ã®ç»åå ã®åã¢ãã¬ããã®åäœã«ãã£ãŠãç¹å®ã®åã蟌ã¿ç°å¢å ã§ã©ã®ããã«æ©èœããããæ±ºãŸããŸãã BusyBoxã䜿çšãããšãæ§æãã¡ã€ã«ããã£ã¬ã¯ããªãããã³ã€ã³ãã©ã¹ãã©ã¯ãã£ã倿ŽããŠãéžæããçµã¿èŸŒã¿ã·ã¹ãã ã«æé©ã«ããããšãã§ããŸãã
2. Kubernetes Initã³ã³ããã®æŽ»çš
BusyBox Dockerå
¬åŒã€ã¡ãŒãžã¯ãKubernetes initContainer æ©èœã§ãããŸãæ©èœããŸãã ãããã® ç¹æ®ãª ã³ã³ãã(ãã®äŸã§ã¯)ã¯ãPodå
ã®ã¢ããªã±ãŒã·ã§ã³ã³ã³ããã®åã«å®è¡ãããŸãã
init ã³ã³ãããŒã«ã¯ãã¢ããªã±ãŒã·ã§ã³ ã€ã¡ãŒãžã®å€éšã«ããã¹ã¯ãªããããã®ä»ã®ãŠãŒãã£ãªãã£ãå«ããããšãã§ããŸãã ãããã®ãéåžžã®ãã³ã³ããã®åæåã¯ããããã®ã³ã³ããŒãã³ããæåã«ã¹ãã³ã¢ããããk8sã«äŸåããå ŽåããããŸãã ãã ããã¿ã¹ã¯ãçµäºãããŸã§ãåžžã«åæçã«å®è¡ãããŸãã
ãŸãããããã®ã³ã³ãããŒã¯ãå³å¯ã«æ§æããããªãœãŒã¹å¶éã«æºæ ããããªã¥ãŒã ããµããŒãããã»ãã¥ãªãã£èšå®ãå°éããŸããÂ
ããããããªãã¯äœã®ããã«äœ¿ã initContainer ããšãã§ããŸãã? k8sã®ããã¥ã¡ã³ãã«ãããšã次ã®ããšãã§ããŸãã
- ããããã¹ãã³ã¢ãããããšãã« ãµãŒãã¹ã äœæãããã®ãåŸ ã¡ãŸã
- APIãããªã¢ãŒããµãŒããŒã«Podãç»é²ãã
- å²ãåœãŠãããæéåŸ ã£ãŠãããã¢ã㪠ã³ã³ãããŒãæçµçã«éå§ããŸã
- Git ãªããžããªãããªã¥ãŒã ã«è€è£œãã
- å€å ¥åããæ§æãã¡ã€ã«ãèªåçã«çæãã
Kubernetesã¯ããã®æ§æãã¡ã€ã«ã䜿çšããŠããããã®ããã»ã¹ãã©ã®ããã«çºçãããããã·ã§ã«ã³ãã³ããšãšãã«æå®ããŸãã ãã®ãã¡ã€ã«ã§ã¯ãéžæããã¿ã°ã䜿çšããŠãBusyBox Dockerã€ã¡ãŒãžãæå®ã§ããŸãã Kubernetes ã¯ã€ã¡ãŒãžããã«ããäžæã® ID ãå²ãåœãŠãªãããããããã³ã³ãããŒãäœæããŠèµ·åããŸãã
BusyBox ãš Docker ã§ init ã³ã³ãããŒã䜿çšãããšãéèŠãªã¯ãŒã¯ãããŒãéå§ããåã«ã¢ã㪠ã³ã³ãããŒãæºåã§ããŸãã
3. HTTP Web ãµãŒããŒã®å®è¡
BusyBoxã³ã³ããã€ã¡ãŒãžãåºæ¬çãªLinuxç°å¢ã®äœæã«åœ¹ç«ã€ãšè¿°ã¹ãããšãèŠããŠããŸãã? ãã®ç°å¢ã䜿çšããŠãã³ã³ãã€ã«ãããLinuxã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã«ã¹ã¿ã å®è¡å¯èœãã¡ã€ã«ãäœæã§ããŸãã æ¬¡ã«ããããã®å®è¡å¯èœãã¡ã€ã«ã¯ Web ã¢ããªããµããŒãã§ããŸãã
ããšãã°ãéçºè ã®Soham Kamaniã¯ããã®æ¹æ³ã䜿çšããŠã GoãµãŒããŒãå©çšããWebã¢ããªããµããŒãããŠããŸãã Sohamã¯ãæ¬¡ã®æ¹æ³ã§ãããéæããŸããã
- Docker CLI ã䜿çšããŠäžè¬çãªã³ãã³ããå®è¡ããããã® BusyBox ã³ã³ãããŒã®äœæã
- ã«ã¹ã¿ã Golang "hello world"ããã°ã©ã ãäœæããããããµããŒãããã³ã³ãããªã³
DockerfileãäœæããåŸã«ã«ã¹ã¿ã å®è¡å¯èœãã¡ã€ã«ãå®è¡ããŸãã - BusyBox ãããŒã¹ãšããŠäœ¿çšã㊠Docker ã€ã¡ãŒãžããã«ãããŠå®è¡ããŸãã
server.goãã¡ã€ã«ã®äœæãã³ã³ãã€ã«ãããã³ Docker ã³ã³ããŒãã³ãã䜿çšãã Web ãµãŒããŒãšããŠã®å®è¡ã
BusyBoxã䜿çšãããšããã®ã¯ãŒã¯ãããŒã«åãçµã¿ãã¹ãªã ã§æçµçãªç»åãäœæã§ããŸãã ããã«ãããã¢ããªã±ãŒã·ã§ã³ã广çã«å®è¡ãç¹æ ãæ¡åŒµãããã³ãããã€ã§ããç°å¢ãäœæãããŸãã èŠèŠçãªã€ã³ã¿ãŒãã§ã€ã¹ã奜ãå Žåã¯ã Docker Desktop ã䜿çšããŠã€ã¡ãŒãžãšã³ã³ãããŒãç°¡åã«ç®¡çããããšãã§ããŸãã
ãã¥ãŒããªã¢ã«å šäœãèªã¿ãGitHub ã§ãµã³ãã« ã³ãŒãã衚瀺ã§ããŸããGoããŒã¹ã®ãµãŒããŒå±éããã£ãšæ€èšãããã§ãã? Caddy 2ã®ç»åã¬ã€ããã芧ãã ããã
ããã¯ãBusyBoxã®ãŠãŒã¹ã±ãŒã¹ããã¹ãŠç¶²çŸ ãããªã¹ãã§ã¯ãããŸããã ãããããããã®äŸã¯ãåçŽãªLinuxããŒã¹ã®ã€ã¡ãŒãžã§ããããã«åµé çã«ãªãããšãã§ãããã瀺ããŠããŸãã
BusyBox ã€ã¡ãŒãžã®äœ¿çšãéå§ãã
ãã®æ©èœã調ã¹ãã®ã§ãBusyBoxãã€ã³ã¹ããŒã«ããŠDockerã§äœ¿çšãéå§ããæ¹æ³ãåŠã³ãŸãããã
ã¹ããã 1: Docker ã€ã¡ãŒãžãå®è¡ãã
ãŸããæ¬¡ã®ã³ãã³ãã䜿çšããŠBusyBoxãã·ã§ã«ãšããŠå®è¡ããŸãã
$ docker run -it --rm busybox
ããã«ãããBusyBoxã·ã¹ãã shå
ã§ã³ãã³ããå®è¡ã§ããããã«ãªããŸãã ãã®ãã©ã°ã¯ -it äž¡æ¹ -i ãçµåã -t ãéãããŸãŸ STDIN ã«ããŠç䌌 tty ãå²ãåœãŠãŸãã ããã«ãã -tty ãã³ã³ããå
ã«ä»®æ³ã¿ãŒããã«ã»ãã·ã§ã³ãäœæããããã«Dockerã«æç€ºãããŸãã --rmãã©ã°ã䜿çšãããšãã³ã³ãããæŽçããçµäºæã«ãã¡ã€ã«ã·ã¹ãã ãåé€ããããã«Dockerã«æç€ºããŸãã
ã¹ããã 2: Dockerfile ãäœæãã
次ã«ãéçã«ã³ã³ãã€ã«ããããã€ããªã® ãäœæããŸã Dockerfile ã åºæ¬ç㪠BusyBox Dockerfile ã¯æ¬¡ã®ããã«ãªããŸãã
FROM busybox
COPY ./my-static-binary /my-static-binary
CMD ["/my-static-binary"]
泚: ãã®ã³ã³ãã€ã«ã¯ãDocker ã³ã³ãããŒãªã©ã®å¥ã®å Žæã§å®äºããå¿ èŠããããŸãã Alpine ã䜿çšã§ããŸãããæ¡åŒµæ©èœãå¿ èŠãªãå Žåã¯ã代ããã« BusyBox ã䜿çšã§ããŸãã
Step 3: ããªãšãŒã·ã§ã³ãéžæ
æåŸã«ãåžžã«ããŒãºã«æãé©ããããªã¢ã³ããéžæããŠãã ããã æ¬¡ã®ããããã䜿çšã§ããŸãã
busybox:uclibc (è±èª)busybox:glibc (æ¥æ¬èª)busybox:musl (è±èª)
ãªãã·ã§ã³ 1 ãš 3 ã¯éçã«ã³ã³ãã€ã«ãããŸããã glibc Debian ã«ç±æ¥ããŸãã
Docker ãš BusyBox ã¯åçã®ã·ã³ãã«ã
BusyBoxã¯ãåçŽãªLinuxãæããéçºè ã«ãšã£ãŠäžå¯æ¬ ãªããŒã«ã§ãã ããã«ãããç°¡çŽ åããã(ãããé©å¿å¯èœãª)Linuxç°å¢å ã§ã匷åã§ã«ã¹ã¿ãã€ãºãããLinuxå®è¡å¯èœãã¡ã€ã«ãäœæã§ããŸãã ãŠãŒã¹ã±ãŒã¹ã¯å€æ§ã§ãããBusyBoxç»åã¯è¥å€§åã®è»œæžã«åœ¹ç«ã¡ãŸãã
DockerãšBusyBoxã¯ã©ã¡ãããKubernetesãªã©ã®äžè¬çãªé¢é£ãã¯ãããžãŒãå«ããªãããããŸã飿ºããŸãã ç»åã®ãµã€ãºãå°ããã«ãããããããåžžã«é²åããŠããå€ãã®ãšããµã€ãã£ã³ã°ãªéçºã®å¯èœæ§ãè§£ãæŸã¡ãŸãã Docker Hub ã«ã¢ã¯ã»ã¹ããŠè©³çްã確èªããæåã® BusyBox ã€ã¡ãŒãžããã°ããååŸããŠãã ããã