ãå çãã©ããã£ãŠãããã³ã°ãããã®ïŒã
-æ¹æ³ã§ã¯ãªããã³ã³ããå ã
å€ããžã§ãŒã¯
ã³ã³ãã¥ãŒã¿ãŒã·ã¹ãã ã®äžèŠãªã³ã³ããŒãã³ãã¯ãã¹ãŠãå®å šã«ãªãã·ã§ã³ã®è匱æ§ã®åå ãšãªãå¯èœæ§ããããŸãã ãããã£ãŠãã³ã³ããã€ã¡ãŒãžã«ã¯ãå¯èœãªéãã¢ããªã±ãŒã·ã§ã³ãå¿ èŠãšãããã®ã®ã¿ãå«ããå¿ èŠããããŸãã ãããŠããã®ãµã€ãºã¯ãé åžã®å®¹æãã ãã§ãªããææã³ã¹ããšã»ãã¥ãªãã£ã®ç¹ã§ãéèŠã§ãã ãã®èšäºã§ã¯ãDockerã€ã¡ãŒãžã®ãµã€ãºãšæ»æ察象é åãæå°åããæ¹æ³ãšãè匱æ§ãã¹ãã£ã³ããããŒã«ã«ã€ããŠèª¬æããŸãã
Dockerã䜿çšããããšããã人ãªããããããé«å±±ã®ã€ã¡ãŒãžãèããããšãããã§ãããã ããã¯ã Alpine Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã«åºã¥ããŠäœæãããŸãããããšãã°ãããŒã¹ã€ã¡ãŒãžãµã€ãºã5 MBã®DebianãUbuntuãšæ¯èŒãããšãæ»æè ã«æ»æã®äœå°ãã»ãšãã©ãããŸããã ã¢ããªã±ãŒã·ã§ã³ãé«å±±ã§åäœã§ããå Žåãããã¯æé©åããã®ã«æé©ãªæ¹æ³ã§ãã
ãã€ããªãã¡ã€ã«ã¯ã©ãã§ããïŒ ã¢ããªã±ãŒã·ã§ã³ã¯èªåŸçã«æ©èœããŸããïŒ ãããããªãããµã€ãºã®è¿œå ã®çž®å°ãæåŸ
ããçç±ããããŸãã DebianãUbuntuã®ãããªã€ã¡ãŒãžã®ããŒã¹ãšããŠãéåžžã¯scratch
ã䜿çšãããŸãããgolangã¢ããªã±ãŒã·ã§ã³ãæ©èœãããããšãã§ããŸãã Gianluca Arbezzanoã¯ãæå°ãµã€ãºã®æ¢è£œã®ãã€ããªãå«ããªããžããªãäœæããŸããã linux_386ãè©ŠããŠã¿ãŸãããã
curl -SsL https://github.com/gianarb/micro/releases/download/1.0.0/micro_1.0.0_linux_386 > micro
ãã®Dockerfileã䜿çšããŠããã®ãã€ããªãã¡ã€ã«ãã¹ã¯ã©ããã€ã¡ãŒãžã«å«ããããšãã§ããŸãã
FROM scratch ADD ./micro /micro EXPOSE 8000 CMD ["/micro"]
docker build -t micro-scratch . docker run -p 8000:8000 micro-scratch
ãã®çµæãããã5 MBã®ã€ã¡ãŒãžã§http-applicationãèµ·åããããšãã§ããŸãããã€ãŸããé«å±±ã«åºã¥ããŠäœæãããã€ã¡ãŒãžãå æãã12 MBã«æ¯ã¹ãŠ2å以äžåæžããŸããã
ã©ã®ã¢ããªã±ãŒã·ã§ã³ã§ãã¹ã¯ã©ããç»åã䜿çšããããšã¯ã§ããŸãããããªãŒããŒããããåæžãã䟡å€ã¯ãããŸãã
Rubyã§ã¯ãããŒã¹ãšããŠrubyïŒ2.3-alpineã䜿çšã§ããŸãã ãã®äžã®Rubyã¯ãAlpineããã±ãŒãžããã§ã¯ãªãããœãŒã¹ããã€ã³ã¹ããŒã«ãããŸãã ã»ãã³ãã£ãã¯ããŒãžã§ãã³ã°ã«åŸã£ãŠããªãªãŒã¹2.3ã¯éçºè ããçŽæ¥ã»ãã¥ãªãã£ã¢ããããŒããåãåããŸãã
ãã以å€ã®å Žåã¯ããœãŒã¹ããRubyãèªåã§ã€ã³ã¹ããŒã«ããŠæ°ããããŒãžã§ã³ã®ãªãªãŒã¹ã远跡ããããAlpineã®ããã±ãŒãžã䜿çšããŠããã£ã¹ããªãã¥ãŒã·ã§ã³éçºè ã«ããæŽæ°ãç£èŠããå¿ èŠããããŸãã
éç¥ãšWebããã¯
ããŒã¹ã€ã¡ãŒãžã«å¯ŸããŠã»ãã¥ãªãã£æŽæ°ããã°ã©ã ãçºè¡ãããå Žåãããã«åºã¥ããã€ã¡ãŒãžãæŽæ°ããå¿ èŠããããŸãã MicroScalingã®ã¹ã¿ãããå ¬åŒã®é«å±±ãšã«ããŒã®ç»åã«å¯ŸããŠè¡ãããã«ãããšãã°Slackã«éä¿¡ã§ããMicroBadgeréç¥ãããã§åœ¹ç«ã¡ãŸãã
ãŸããããŒã¹ã€ã¡ãŒãžãå€æŽãããå Žåã«ãã¢ã©ãŒãã䜿çšããŠãã«ã/ãªã¢ã»ã³ããªæé ãèªåçã«éå§ããŸãã Docker Hubã«ã¯ãã®ãããªæ©èœããããŸãããMicroBallgerã¯Webããã¯ããµããŒãããã·ã¹ãã ïŒCIãã»ãã¥ãªãã£ã¹ãã£ããŒãªã©ïŒã§äœ¿çšã§ãããããMicroBadgerã®æ¹ãåªããŠãããšäž»åŒµããŠããŸãã
äžè¬ãŠãŒã¶ãŒ
ä»®æ³ãã·ã³ãšã³ã³ããã®äž»ãªéãã®1ã€ã¯ãã³ã¢ã·ã¹ãã ã®ææ°ã®äœ¿çšã§ãã ããã©ã«ãã§ã¯ãDockerã³ã³ããã¯ã«ãŒãæš©éã§å®è¡ãããŸããããã¯ãã«ãŒãã®äžã§å®è¡ãããŠãã䟵害ãããã³ã³ãããã¡ã€ã³ã·ã¹ãã ãžã®ã«ãŒãã¢ã¯ã»ã¹ãååŸã§ãããããåé¢ãå£ããå Žåã«æ·±å»ãªåé¡ã«ã€ãªããå¯èœæ§ããããŸãã
ãã ããã³ã³ãããéåžžã®ãŠãŒã¶ãŒãšããŠå®è¡ããããšã«ããããªã¹ã¯ã軜æžã§ããŸãã Railsã¢ããªã±ãŒã·ã§ã³ã§ãããè¡ãæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
# WORKDIR /app # Rails- COPY . ./ # , RUN addgroup rails && adduser -D -G rails rails \ && chown -R rails:rails /app USER rails
ã»ãã¥ãªãã£ã¹ãã£ã³
çŽæ¥ã®ã¹ãã¬ãŒãžã«å ããŠãã³ã³ããã¬ãžã¹ããªã¯ãããã«ããŒããããã€ã¡ãŒãžã®è匱æ§ãã¹ãã£ã³ã§ããŸãã ããšãã°ãDockerã¯Docker Cloudã«ã¢ããããŒããããå ¬åŒç»åãšãŠãŒã¶ãŒç»åã®ã»ãã¥ãªãã£ãã¹ãã£ã³ããŸã ã
Quay.ioã¯ãCoreOSã®ãªãŒãã³ãœãŒã¹è£œåã§ããClairã䜿çšããŠãç»åã»ãã¥ãªãã£ãã¹ãã£ã³ããŸãã æè¿ã§ã¯ãAlpineã®ãµããŒããClairã«è¿œå ãããŸãããããã¯å®éã«ã¯éåžžã«ã¯ãŒã«ã§ãã ãã®æ©èœãQuayã§ããã«å©çšã§ããããšãæåŸ ããŸãããã Clairã«å ããŠã TwistLockããã³Aquaã¹ãã£ããŒããããŸãããã»ãšãã©ã®å Žåããããã®äœ¿çšã«å¯ŸããŠæéãæ¯æãå¿ èŠããããŸãã
Clairã¯ãç»åãã¢ããããŒããããŠã³ããŒããããã³åæããããã®HTTP APIã®ã»ãããå®è£ ããGolangã¢ããªã±ãŒã·ã§ã³ã§ãã è匱æ§ããŒã¿ã¯ã Debian Security TrackerãRedHat Security Dataãªã©ã®ããŸããŸãªãœãŒã¹ããããŠã³ããŒããããPostgresã«ä¿åãããŸãã Clairã¯éçã¢ãã©ã€ã¶ãŒã®åçã§åäœãããããã³ã³ãããŒãã¹ãã£ã³ããããã«ã³ã³ãããŒãå®è¡ããå¿ èŠã¯ãããŸãããã€ã¡ãŒãžãã¡ã€ã«ã·ã¹ãã ã®ã¿ããã§ãã¯ãããŸãã
docker run -it -p 5000:5000 registry
ãã®ã³ãã³ãã䜿çšããŠãç¬èªã®ã¬ãžã¹ããªãèµ·åããã¹ãã£ã³çšã®ç»åã®ãœãŒã¹ãšããŠäœ¿çšããŸããã Gianluca Arbezzanoããmicro
ç»åãèªã¿èŸŒãã§ã¿ãŸãããïŒ
docker pull gianarb/micro:1.0.0 docker tag gianarb/micro:1.0.0 localhost:5000/gianarb/micro:1.0.0 docker push localhost:5000/gianarb/micro:1.0.0
次ã«ãClairãã€ã³ã¹ããŒã«ããŸãã
mkdir $HOME/clair-test/clair_config cd $HOME/clair-test curl -L https://raw.githubusercontent.com/coreos/clair/v1.2.2/config.example.yaml -o clair_config/config.yaml curl -L https://raw.githubusercontent.com/coreos/clair/v1.2.2/docker-compose.yml -o docker-compose.yml
ããŒã¿ããŒã¹ã«æ¥ç¶ããããã®èšå®ã$HOME/clair_config/config.yml
ããŸãpostgresql://postgres:password@postgres:5432?sslmode=disable
Postgres and Clairãèµ·åããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
docker-compose up
ãã¹ãæé ã容æã«ããããã«ãHyperclairãšåŒã°ããCLIã䜿çšããŸãïŒããã¯Clairãšé£æºããããã®ã¯ã©ã€ã¢ã³ãã§ãïŒã Mac OSã®ã³ãã³ãã¯æ¬¡ã®ãšããã§ãïŒå¥ã®OSã䜿çšããŠããå Žåã¯ã https ïŒ //github.com/wemanity-belgium/hyperclair/releasesãåç §ããŠãã ãã ïŒã
curl -SSl https://github.com/wemanity-belgium/hyperclair/releases/download/0.5.2/hyperclair-darwin-386 > ~/hyperclair chmod 755 ~/hyperclair
ã/ hyperclairã«å®è¡å¯èœãã¡ã€ã«ãã§ããŸããïŒ
~/hyperclair pull localhost:5000/gianarb/micro:1.0.0 ~/hyperclair push localhost:5000/gianarb/micro:1.0.0 ~/hyperclair analyze localhost:5000/gianarb/micro:1.0.0 ~/hyperclair report localhost:5000/gianarb/micro:1.0.0
çæãããã¬ããŒãã¯æ¬¡ã®ããã«ãªããŸãã
Railsã¢ããªã±ãŒã·ã§ã³ã®æœåšçã«è匱ãªãã«ãäŸåé¢ä¿ã®åé€
Rubyã¯ã€ã³ã¿ãŒããªã¿ãŒèšèªã§ãããããRubyã§äœæãããã¢ããªã±ãŒã·ã§ã³ã䜿çšããå Žåãããªãã®éã®äŸåé¢ä¿ããããŸãã ã¢ããªã±ãŒã·ã§ã³ã«å¿ èŠãªãã¹ãŠã®Ruby gemãããã³ãããã®gemã«å¿ èŠãªãã¹ãŠã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã±ãŒãžãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
ã¹ãã£ã³ã«ãã£ãŠlibxml2ããã³libxsltã®é倧ãªè匱æ§ãç¹å®ããããšããŸãã ãããã¯ãXMLããã³JSONããŒãµãŒã§ããNokogiri gemã®ãã«ãæã®äŸåé¢ä¿ã§ãã ããã©ãŒãã³ã¹ãåäžãããããã«ããã®gemã¯ã³ã³ãã€ã«ãå¿ èŠãªCã§æžãããæ¡åŒµæ©èœã䜿çšããŸãã ãã ããgemã®ã€ã³ã¹ããŒã«åŸãlibxml2ãšlibxsltã¯äžèŠã«ãªããŸããã
ãã¹ãŠã®ãã«ãæã®äŸåé¢ä¿ãåé€ããŸãããã
# WORKDIR /tmp ADD Gemfile* /tmp/ # # apk- RUN apk update && apk upgrade && \ apk add --no-cache $RUBY_PACKAGES && \ apk add --no-cache --virtual build-deps $BUILD_PACKAGES && \ bundle install --jobs 20 --retry 5 && \ apk del build-deps
GemfileãšGemfile.lockã/ tmpã«ãã£ãã·ã¥ããããšã«ãããGemfileãå€æŽãããå Žåã«ã®ã¿ã bundle install
ã³ãã³ããå®è¡ãããŸãã ãã以å€ã®å ŽåãDockerãã£ãã·ã¥ã䜿çšãããŸãã ãã®ãããªæé©åã«ãããå®è¡æéãšãããã¯ãŒã¯è² è·ãåæžã§ããŸããããã¯ãgemã®ã€ã³ã¹ããŒã«æã«éåžžã«å€§ãããªãå¯èœæ§ããããŸãã
run
ã³ãã³ãã¯è€æ°è¡ã§ãããããç»åã«ã¯1ã€ã®ã¬ã€ã€ãŒã®ã¿ãè¿œå ãããããšã«æ³šæããŠãã ããã ã¢ã»ã³ããªã«å¿
èŠãªããã±ãŒãžã¯--virtualã¹ã€ããã䜿çšããŠã€ã³ã¹ããŒã«ãããããã»ã¹ã®å®äºåŸã«ç°¡åã«åé€ã§ããŸãã
èªåçµç«
ã³ã³ããã®å®å šæ§ã®èŠ³ç¹ãããã€ã¡ãŒãžèªäœãŸãã¯ãã®ããŒã¹ã«ããã€ã¡ãŒãžã®æŽæ°ã衚瀺ããããã³ã«ãã³ã³ãããåæ§ç¯ããããšãéåžžã«éèŠã§ãã ãã®æé ã®èªååã¯ãgitãªããžããªãžã®ãã€ã³ãã«åºã¥ããŠè¡ãããšãã§ããŸãããã®å Žåãç£èŠå¯Ÿè±¡ãã©ã³ãã§æ°ããã³ããããäœæããåŸã«ã¢ã»ã³ããªãéå§ãããŸãã åè¿°ã®ããã«ãã¢ã»ã³ããªã¯ããŒã¹ã€ã¡ãŒãžã€ãã³ãã®å€æŽã«ãã£ãŠãããªã¬ãŒã§ããŸãã
Rubyã®å Žåãäœæããã»ã¹ã§äœ¿çšããã®ãšåãDockerfileã䜿çšã§ãããããç¶æ³ã¯åçŽåãããŸãã Goã®ããã°ã©ã ã§ã¯ãæåã«ãã€ããªãã¡ã€ã«ãã³ã³ãã€ã«ããŠãããã€ã¡ãŒãžã«è¿œå ããå¿ èŠããããŸãã ããã«ã¯ãããŒã«ã«ã§makefileã䜿çšã§ããŸãã
å¥ã®æ¹æ³ã¯ãDockerã³ã³ããã§ã€ãã³ãããšã«ãã€ããªãã¡ã€ã«ãã³ã³ãã€ã«ããããšã§ãã CenturyLinkLabsãšPrometheusã®golang-builderã€ã¡ãŒãžãããã€ãèŠãããšããå§ãããŸã ã
ãã«ãããã»ã¹ãéå§ããã«ã¯ããã«ãããã¯ã䜿çšã§ããŸããããã¯ãã€ã¡ãŒãžã«åçã¡ã¿ããŒã¿ãè¿œå ããå Žåã«ã䟿å©ã§ãã
ãããã«
ããã§ãGoããã³Rubyã¢ããªã±ãŒã·ã§ã³ã®Dockerã€ã¡ãŒãžãæå°åããæ¹æ³ãç°¡åã«æ€èšããéåžžã®ãŠãŒã¶ãŒãšããŠã³ã³ãããŒãå®è¡ããæ¹æ³ãåŠã³ãClairã䜿çšããŠã»ãã¥ãªãã£ã¹ãã£ã³ãèšå®ããèªååæ§ç¯ã«ã€ããŠå°ã話ããŸããã ãããã®ç°¡åãªæé ãDockerã³ã³ããã®ã»ãã¥ãªãã£ãåäžãããããšãé¡ã£ãŠããŸãã ä»ã®ãšãããã¹ãŠã§ãã ãæž èŽããããšãããããŸããïŒ
ãœãŒã¹ã®ãªã¹ãïŒ