ãã®èšäºã§ã¯ã Sparrow *å€ç®çã¹ã¯ãªããã£ã³ã°ã·ã¹ãã ã䜿çšããŠã Dockerã³ã³ãããŒçšã®ã€ã¡ãŒãžã¢ã»ã³ããªã¹ã¯ãªãããäœæããæ¹æ³ã«ã€ããŠèª¬æããŸãã
ïŒ*ïŒæ³š-ãã®èšäºã®æè¡çãªãã¥ã¢ã³ã¹ã®äžéšãç解ããã«ã¯ãSparrowå€ç®çã¹ã¯ãªããã·ã¹ãã ã«å°ãªããšãè¡šé¢çã«ç²ŸéããŠããããšãæãŸããã§ãã
Dockerã³ã³ãããŒéçº
æåã¯å°ãåé¡ããããŸãã Dockerfileã䜿çšããŠDockerã€ã¡ãŒãžã®ã¢ã»ã³ããªãèšè¿°ããã¿ã¹ã¯ããããŸãã ãã«ãã¹ã¯ãªãããéèŠã§ãå€ãã®æ瀺ãå«ãŸããŠããå Žåã¯ãã©ãã«ãããŠæãåºãå¿
èŠããããŸãã Dockerfileã«120ãè¶
ããã¬ã€ã€ãŒãå«ããããšã¯ã§ããªããšããäºå®ïŒç§ãDockerã®ããã¥ã¡ã³ãããæ£ããç解ããŠããéãïŒã«å ããŠãDockerfileã®æ¡æ£ã«å¯ŸåŠããããšã¯ããŸãå¿«é©ã§ã¯ãããŸããã ããªãã¯ããã«ã€ããŠäœãã§ããŸããïŒ æãããªãªãã·ã§ã³ã¯ãåå¥ã®Bashã¹ã¯ãªããã®ã¢ã»ã³ããªã³ãŒããäœæ¥ãã£ã¬ã¯ããªã«è»¢éããããããã·ã¹ãã ã®ã€ã³ã¹ããŒã«ãšæ§æãçŽæ¥è¡ãããšã§ãã ãã1ã€ã®æ¹æ³ã¯ãchefãansibleãªã©ã®æ§æ管çããŒã«ãåŽé¢ã«ããã蟌ããããšã§ãã ãããã®éžæè¢ãè©äŸ¡ããŠïŒè³åŠäž¡è«ããç§èŠïŒãSparrowã䜿çšãã3çªç®ã®æ¹æ³ãææ¡ããã®ã¯èªè
ã«ãä»»ãããŸãã
å®è£
ã®è©³çŽ°ã説æããåã«ã次ã®ããšãèšããããšæããŸãã
Sparrowã®ãªãã·ã§ã³ã¯ãBashã¹ã¯ãªããã®äœ¿çšã«å€å°äŒŒãŠããŸãããå¯äžã®éãã¯ãã€ã³ã¹ããŒã«ããžãã¯å
šäœãSparrowãã©ã°ã€ã³ã«åã蟌ãŸãããã®ãœãŒã¹ã³ãŒããå¥ã®å ŽæïŒgitãªããžããªãŸãã¯äžå€®ãªããžããªïŒã«ä¿åãããããšã§ãã
ãããã£ãŠãDockerã®ã³ã³ããã¹ãã§ã®åºæ¬çãªã·ã¹ãã æ§æã¯Dockerfileã§èª¬æãããŠãããSparrowãã©ã°ã€ã³å
ã®ãã埮åŠã§è€éãªãã®ã§ãã
- ãã©ã°ã€ã³éçºã¯Dockerfileã³ã³ããã¹ãããåé¢ã§ããŸã-ããã¯äŸ¿å©ã§ããããšãã°ãã€ã¡ãŒãžããã«ã
docker build
ãã³ã«docker build
é Œãããšã«ãããæ¢åã®Dockerã³ã³ããã§ã€ã³ã¹ããŒã«ããã»ã¹ããããã°ã§ãããã©ã°ã€ã³ããããã°ãããŠåäœããæºåãã§ããããå床å®è¡ã§ããŸãåãdocker build
ã䜿çšããå®å
šãªã·ã¹ãã ãã«ããµã€ã¯ã«ïŒãã¡ãããDockerãã£ãã·ã¥ã®ããããïŒã
å®è£
äŸ
ãã®ãããç¹å®ã®ã·ã¹ãã äžã®ãã¹ãŠã衚瀺ããŸãã CentOSãã£ã¹ããªãã¥ãŒã·ã§ã³ã䜿çšããŠã€ã¡ãŒãžãæ§ç¯ãã RubyããŒãžã§ã³2.3ã§èšè¿°ãããã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã ãã®åŸãéžæãããŠãŒã¶ãŒã®äžããã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã¹ã¯ãªãããå®è¡ããŸãã ã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ã³ãŒãã¯ãã¢ãŒã«ã€ããµãŒããŒããããŠã³ããŒããããŸãã ãã®äŸã¯å®éã®ç掻ããåãããŠããŸãããèšäºãè³æã§éè² è·ã«ãªããªãããã«ãäžéšã®è©³çŽ°ã¯æå³çã«çç¥ãããŠããŸãã
åºæ¬çãªã·ã¹ãã æ§æ
ãã©ã°ã€ã³ã³ãŒããèšè¿°ããåã«ãDockerfileãäœæããŸãã åºæ¬çãªã€ã¡ãŒãžã§ã¯ããã®æããã®ããã«tutum / centosãæ®ããŸãã ã åãçç±ã§ãããã±ãŒãžã®äžéšãé
ä¿¡ããå¿
èŠããããŸãããäžè¬ã«ããã¯åé¡ã§ã¯ãããŸããã
$ cat Dockerfile FROM tutum/centos MAINTAINER "melezhik" <melezhik@gmail.com> RUN yum clean all RUN yum -y install nano git-core RUN yum -y install make RUN yum -y install gcc RUN yum -y install perl perl-devel \ perl-Test-Simple perl-Digest-SHA perl-Digest-MD5 perl-CPAN-Meta \ perl-CPAN-Meta-Requirements perl-Getopt-Long \ perl-JSON perl-Module-CoreList perl-Module-Metadata perl-parent perl-Path-Tiny perl-Try-Tiny \ perl-App-cpanminus perl-JSON-PP perl-Algorithm-Diff perl-Text-Diff \ perl-Spiffy perl-Test-Base perl-YAML perl-File-ShareDir-Install perl-Class-Inspector \ perl-File-ShareDir perl-File-ShareDir-Install perl-Config-General RUN cd /bin/ && curl -L https://cpanmin.us/ -o cpanm && chmod +x cpanm RUN cpanm Sparrow -q
Dockerfileã«é¢ããããã€ãã®ã³ã¡ã³ãã
nano
ããã³git-core
ãSparrowãã©ã°ã€ã³ã®éçºã«å¿
èŠã§ãïŒä»¥äžãåç
§ïŒ-ã¹ã¯ãªããã³ãŒããç·šéããå€æŽããªã¢ãŒãgitãªããžããªã«ã³ãããããŸãã
gcc
ã make
ã¯RubyGemsããã³CPANããã±ãŒãžããã«ãããããã«å¿
èŠã§ãã åè
ã¯rvmãä»ããŠRubyãã€ã³ã¹ããŒã«ãããšãã«å¿
èŠãšãªããåŸè
ã¯Sparrowãã€ã³ã¹ããŒã«ããããã«å¿
èŠã§ãã
ãã«ãããã»ã¹ã®é床ãæé©åããã«yum
ã yum
ãä»ããŠå€æ°ã®perl-*
ããã±ãŒãžãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã 次ã®cpanm -q Sparrow
åœä»€ã¯ãå¿
èŠãªäŸåé¢ä¿èªäœãã€ã³ã¹ããŒã«ããŸããã cpanmãä»ããäŸåé¢ä¿ã®ã€ã³ã¹ããŒã«ã¯ãéåžžãCentOSã®ãã€ãã£ãrpmcentosã®ã€ã³ã¹ããŒã«ãããã¯ããã«æéãããããŸãã
cpanm Sparrow -q
Instruction cpanm Sparrow -q
ã¯ãå€ç®çã®ã¹ã¯ãªããéçºç°å¢ãã»ããã¢ããããŸãcpanm Sparrow -q
å®è¡ããŠããã³ã³ãããŒã§çŽæ¥Sparrowãéçºããããšãå¿ããªãã§ãã ããã
ããã§ã¯ãç»åãäœæããŠã¿ãŸãããã
$ docker build -t ruby_app . ... ... Successfully built 25e7cd784c99
ãã©ã°ã€ã³ã®éçºãå§ããŸããã
åºæ¬çãªã€ã³ãã©ã¹ãã©ã¯ãã£ãåããã€ã¡ãŒãžããããŸããDockerã³ã³ãããŒãèµ·åãããã®äžã§çŽæ¥ãã©ã°ã€ã³ã®éçºãéå§ã§ããŸãã
$ docker run -t -i ruby_app /bin/bash $ mkdir ruby-app $ cd ruby-app $ git init . $ git remote add origin https://github.com/melezhik/ruby-app.git $ touch README.md $ git add README.md $ git config --global user.email $ git config --global user.name $ git commit -a -m 'first commit' $ git push -u origin master
äžèšã®ã³ãã³ãã䜿çšããŠããã©ã°ã€ã³ã®ãããžã§ã¯ããã³ãã¬ãŒããäœæãããã¹ãŠããªã¢ãŒãgitãªããžããªã«ã³ãããããŸããã ãªããžããªã®URLãèŠããŠãããŠãåŸã§docker build
ããŠæ¬æ Œçãªã€ã¡ãŒãžã¢ã»ã³ããªãå®è¡ãããšãã«å¿
èŠã«ãªããŸãã
ããã§ã¯ãå°ãäœè«ããŸãã ã¿ã¹ã¯ãæãåºããŠãã ããã 䟿å®äžãç¬ç«ããéšåã«åå²ããŠã¿ãŸãããã
- ã¢ããªã±ãŒã·ã§ã³ãŠãŒã¶ãŒã¢ã«ãŠã³ãã®äœæ
- rvmã䜿çšããRubyã®ã€ã³ã¹ããŒã«
- ã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒã«ã€ããããŠã³ããŒãããäŸåé¢ä¿ã解åããŠã€ã³ã¹ããŒã«ããŸã
è«ççã«ç¬ç«ããã¿ã¹ã¯ã®ããã«ãSparrowã«ã¯ã¢ãžã¥ãŒã«ã¡ã«ããºã ããããããã䜿çšããŸãã ããããæåã«ãã¿ã¹ã¯ã®å®è¡ãç°ãªãã¢ãžã¥ãŒã«ã«å§ä»»ããã¡ã€ã³ã¹ããŒãªãŒãäœæããŸãããã ãããã£ãŠããã¹ãŠãåãå®è¡äžã®Dockerã³ã³ãããŒäžã«ãããŸãã
$ nano hook.bash action=$(config action) for s in $action do run_story $s done set_stdout install-ok $ nano story.check install-ok
ã³ãŒãã«é¢ããããã€ãã®ã³ã¡ã³ãã ããã¯ãã¡ã€ã«ïŒhook.bashïŒã§æå®ããã3ã€ã®ã»ã«ã³ããªã¹ããŒãªãŒïŒã¢ãžã¥ãŒã«ïŒãš1ã€ã®ã¡ã€ã³ã¹ããŒãªãŒãããããã¹ãŠãã©ã®ããã«æ©èœãããã瀺ãããã«ãã¢ãžã¥ãŒã«å
ã®ã¹ã¯ãªããã®ã¹ã¿ããäœæããŸãã ã¯ããå
¥åãã©ã¡ãŒã¿ãŒaction
ã®ããã©ã«ãå€ã¯suite.ini
ãã¡ã€ã«ã§èšå®ããå¿
èŠããããŸãã
$ nano suite.ini action create-user install-ruby install-app
ã¹ã¯ãªããã¹ã¿ããäœæããŸãã
$ mkdir -p modules/create-user $ mkdir -p modules/install-ruby $ mkdir -p modules/install-app $ nano modules/create-user/story.bash echo create-user-ok $ nano modules/install-ruby/story.bash echo install-ruby-ok $ nano modules/install-app/story.bash echo install-app-ok
ãŸãããã¹ããã¡ã€ã«ïŒ
$ nano modules/create-user/story.check create-user-ok $ nano modules/install-ruby/story.check install-ruby-ok $ nano modules/install-app/story.check install-app-ok
ãã¹ãŠãstrunã§å®è¡ããŸã-Sparrowã¹ã¯ãªãããå®è¡ããã³ã³ãœãŒã«ã¹ã¯ãªããïŒ
$ strun /tmp/.outthentic/93/ruby-app/story.t .. # [/ruby-app/modules/create-user] # create-user-ok ok 1 - output match 'create-user-ok' # [/ruby-app/modules/install-ruby] # install-ruby-ok ok 2 - output match 'install-ruby-ok' # [/ruby-app/modules/install-app] # install-app-ok ok 3 - output match 'install-app-ok' # [/ruby-app] # install-ok ok 4 - output match 'install-ok' 1..4 ok All tests successful. Files=1, Tests=4, 0 wallclock secs ( 0.00 usr 0.02 sys + 0.09 cusr 0.01 csys = 0.12 CPU) Result: PASS
çŽ æŽãããã ãã¹ãŠã®ã¹ã¯ãªãããæ£åžžã«åäœããããšãããããŸãããããå°æ¥ã®ãã©ã°ã€ã³ã®éªšçµã¿ã«ãªããŸãã ã¢ãžã¥ãŒã«ã®ãã©ã°ãã·ãã¥ã¬ãŒãããã ãã§ãã
ãŠãŒã¶ãŒäœæã¹ã¯ãªãã
ãŠãŒã¶ãŒåã¯ã«ã¹ã¿ãã€ãºå¯èœã§ãããããã©ã«ãå€ã¯ãã¡ã€ã«suite.ini
決å®ããããšããäºå®ããé²ããŸãã
$ cat suite.ini action create-user install-ruby install-app user_name app-user
ã¹ã¯ãªããã®å®è£
ïŒ
$ nano modules/create-user/story.bash user_id=$(config user_name) echo create user id: $user_id useradd -r -m -d /home/$user_id $user_id || exit 1 ls -d /home/$user_id || exit 1 id $user_id || exit 1 echo create-user-ok
ãããŠãèµ·åããŸãïŒããã§ã¯ã action
ãã©ã¡ãŒã¿ãŒã䜿çšããŠå¥ã®ã¹ã¯ãªãããå®è¡ããæ©äŒãåããŸããïŒã
$ strun --param action=create-user /tmp/.outthentic/135/ruby-app/story.t .. # [/ruby-app/modules/create-user] # create user id: app-user # /home/app-user # uid=997(app-user) gid=995(app-user) groups=995(app-user) # create-user-ok ok 1 - output match 'create-user-ok' # [/ruby-app] # install-ok ok 2 - output match 'install-ok' 1..2 ok All tests successful. Files=1, Tests=2, 0 wallclock secs ( 0.03 usr 0.00 sys + 0.11 cusr 0.04 csys = 0.18 CPU) Result: PASS
ã¹ã¯ãªãããæ©èœãããŠãŒã¶ãŒãäœæãããããšãããããŸãã ã¹ã¯ãªããå
ã®ã»ãšãã©ã®Bashã³ãã³ãã¯ãæ
£çšçãªcmd || exit 1
çµããããšã«æ³šæããŠãã ããã cmd || exit 1
ã strun
ã¯ã¹ã¯ãªããå®è¡ã³ãŒãããã§ãã¯ãã倱æããå Žåã察å¿ãããã¹ãã¯æ¬¡ã®ããã«å€±æããŸã-ã·ã¹ãã ã«å¯ŸããŠç¡å¹ãªååã®ãŠãŒã¶ãŒãäœæããŠãã ããïŒ
$ strun --param action=create-user --param user_name='/' /tmp/.outthentic/160/ruby-app/story.t .. # [/ruby-app/modules/create-user] # create user id: / # useradd: invalid user name '/' not ok 1 - scenario succeeded not ok 2 - output match 'create-user-ok' # [/ruby-app] # install-ok ok 3 - output match 'install-ok' 1..3 # Failed test 'scenario succeeded' # at /usr/local/share/perl5/Outthentic.pm line 167. # Failed test 'output match 'create-user-ok'' # at /usr/local/share/perl5/Outthentic.pm line 213. # Looks like you failed 2 tests of 3. Dubious, test returned 2 (wstat 512, 0x200) Failed 2/3 subtests Test Summary Report ------------------- /tmp/.outthentic/160/ruby-app/story.t (Wstat: 512 Tests: 3 Failed: 2) Failed tests: 1-2 Non-zero exit status: 2 Files=1, Tests=3, 0 wallclock secs ( 0.02 usr 0.00 sys + 0.10 cusr 0.00 csys = 0.12 CPU) Result: FAIL
ããã§å°ãäœè«ããŸãã æ¬è³ªçã«ãã¹ã¯ãªããå®äºã³ãŒãã®æ€èšŒã§ååãªå Žåãæ€èšŒãã¡ã€ã«ãå¿
èŠãªçç±ãèªåããŠã¿ãŸãããã åççãªè³ªåã Sparrowãã¬ãŒã ã¯ãŒã¯ã®æ€èšŒã«ãŒã«ã¯ãã¹ã¯ãªããã®å®è¡ãå¶åŸ¡ãŸãã¯æ€èšŒãã代æ¿æ¹æ³ãšèããããšãã§ããŸãã Sparrowã®ã€ããªãã®ãŒã§ã¯ãå®è¡ãããã¹ã¯ãªããã¯å®è¡ãããã¹ã¯ãªããã§ãããšããæå³ã§å±¥æŽã§ãããã»ãšãã©ã®å Žåããã®äœæ¥ã«ã€ããŠäœãããå ±åãããŸããæ¯figçã«èšãã°ããæŽå²ã«è·¡ãæ®ããã ãã®ãã¬ãŒã¹ã¯æšæºåºåã¹ããªãŒã ã®æšæºåºåã§ããããã®å
容ãæ€èšŒã§ããŸãã ãªã圹ç«ã€ã®ãïŒ
å
·äœäŸãšããŠãrvmãä»ããŠRubyã€ã³ã¹ããŒã«ã¹ã¯ãªãããåŒçšããããšãã§ããŸããããã¯ãèšç»ã®ãªã¹ãã®æ¬¡ã«é²ã¿ãŸãã
rvmããã®Rubyã€ã³ã¹ããŒã«ã¹ã¯ãªãã
ã€ã³ã¹ããŒã«ã¹ã¯ãªããã¯æ¬¡ã®ããã«ãªããŸãã
$ nano modules/install-ruby/story.bash yum -y install which curl -sSL https://rvm.io/mpapis.asc | gpg2 --import - || exit 1 \curl -sSL https://get.rvm.io | bash -s stable --ruby || exit 1 source /usr/local/rvm/scripts/rvm gem install bundler --no-ri --no-rdoc echo ruby version: $(ruby --version) bundler --version echo install-ruby-ok
ãããŠãããã¯æ€èšŒãã¡ã€ã«ã§ãïŒ
$ nano modules/install-ruby/story.check regexp: ruby version: ruby 2\.3 install-ruby-ok
次ã«ããã®ã¹ã¯ãªãããå®è¡ããŸãã
$ strun --param action=install-ruby # # # ... # ... # ... # ruby version: ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux] # Bundler version 1.12.5 # install-ruby-ok ok 1 - output match /ruby version: ruby 2\.3/ ok 2 - output match 'install-ruby-ok' # [/ruby-app] # install-ok ok 3 - output match 'install-ok' 1..3 ok All tests successful. Files=1, Tests=3, 91 wallclock secs ( 0.03 usr 0.00 sys + 3.24 cusr 1.03 csys = 4.30 CPU) Result: PASS
ã€ã³ã¹ããŒã«ãããŠããRubyã®ããŒãžã§ã³ãæ€èšŒããããã«ãæ€èšŒã«ãŒã«ãæ£èŠè¡šçŸãšããŠäœ¿çšããããšã«æ³šæããŠãã ããã
regexp: ruby version: ruby 2\.3
ãã¡ãããrvmã䜿çšãããšãå¿
èŠãªããŒãžã§ã³ãæ瀺çã«ã€ã³ã¹ããŒã«ã§ããŸãããã¹ããã¡ã€ã«ã§å®çŸ©ããããã§ãã¯ã«ãããæå°éã®åŽåã§ã¹ã¯ãªããã®è¿œå æ€èšŒãè¿œå ã§ããå Žåãããã«äŸãæããŸãã
ããã§ãã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«ã¹ã¯ãªããã«é²ãããšãã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ããŒã«ã¹ã¯ãªãã
æãåºãããŠãã ããã 以äžãå¿
èŠã§ãã
- ç¹å®ã®URLã®tarballãããŠã³ããŒãããŸã
- ã¢ãŒã«ã€ãã解åããŸã
- 解åãããã©ã«ããŒã«ç§»åãã
bundle install --target ./local
ãå®è¡ããŠäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸã
以äžã§ãã ãã¡ãããå®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãäœããã®çš®é¡ã®ãµãŒãã¹ãéå§ããããè¿œå ã®æäœãå®è¡ããå¿
èŠããããŸãããããã§ãã©ã°ã€ã³ã®æäœãå®èšŒããã«ã¯ååã§ãã
ç¹°ãè¿ããŸãããç°¡åã«ããããã«ã次ã®ãã®ã§æ§æãããRubyã¢ããªã±ãŒã·ã§ã³ãçšæããŸã ã
Gemfile
äŸåé¢ä¿ãæžã蟌ãŸããå Žæhello.rb
ã³ã³ãœãŒã«ã«Hello World
è¡ãåã«å°å·ããå®è¡æã®ããã¿hello.rb
ã¢ãŒã«ã€ãå
šäœãããã¯ãããã¹ãŠãã¢ãŒã«ã€ããµãŒããŒãšããŒã«ã«nginxã«ã¢ããããŒãããŸããããã§ãé
åžãURLã§å©çšå¯èœã«ãªããŸãã
127.0.0.1/app.tar.gz
ã¹ã¯ãªããã³ãŒããæŽæ°ããŸãã
$ cat suite.ini action create-user install-ruby install-app user_name app-user source_url 127.0.0.1/app.tar.gz $ cat modules/install-app/story.bash user_id=$(config user_name) source_url=$(config source_url) yum -y -q install sudo echo downloading $source_url ... sudo -u $user_id -E bash --login -c "curl -f -o ~/app.tar.gz $source_url -s" || exit 1 echo unpacking tarball ... sudo -u $user_id -E bash --login -c "cd ~/ && tar -xzf app.tar.gz" || exit 1 echo installing dependencies via bundler sudo -u $user_id -E bash --login -c "cd ~/app && bundle install --quiet --path vendor/bundle " || exit 1 sudo -u $user_id -E bash --login -c "cd ~/app && bundle exec ruby hello.rb " || exit 1 echo install-app-ok $ nano modules/install-app/story.check install-app-ok Hello World
å°ããªã¹ã¯ãªããã³ã¡ã³ãïŒ
ãã©ã°ã€ã³suite.iniãã©ã°ã€ã³ã®èšå®ã§æå®ããããŠãŒã¶ãŒã®äžããã€ã³ã¹ããŒã«ãè¡ããŸãã ãã®ããã«ã¯ã sudo
ããã±ãŒãžãå¿
èŠã§ã
æåŸã®ã³ãã³ãã¯ã hello.rb
ã¢ããªã±ãŒã·ã§ã³hello.rb
å®è¡ãhello.rb
- ãã¹ããã¡ã€ã«ã§ã¯ãã¹ã¯ãªããã®ããã¬ãŒã¹ãã
stdout
ãHello Worldãè¡ïŒã«è¡šç€ºãããŠããå¿
èŠããããŸãã
ãã®ãããã¹ã¯ãªãããå®è¡ããŸãã
$ strun --param action=install-app /tmp/.outthentic/16462/ruby-app/story.t .. # [/ruby-app/modules/install-app] # Package sudo-1.8.6p7-17.el7_2.x86_64 already installed and latest version # downloading 127.0.0.1/app.tar.gz ... # unpacking app ... # installing dependencies via bundler # Hello World # install-app-ok ok 1 - output match 'install-app-ok' ok 2 - output match 'Hello World' # [/ruby-app] # install-ok ok 3 - output match 'install-ok' 1..3 ok All tests successful. Files=1, Tests=3, 2 wallclock secs ( 0.01 usr 0.00 sys + 1.61 cusr 0.50 csys = 2.12 CPU) Result: PASS
ã¢ããªã±ãŒã·ã§ã³ãå®éã«ã€ã³ã¹ããŒã«ããã hello.rb
ã¹ã¯ãªããhello.rb
èµ·åãããã®ãhello.rb
ãŸãã å¥ã®ãåå·ç
ãã¢ãµãŒãããã¹ããã¡ã€ã«ã«è¿œå ããŠãSparrowæ€èšŒã·ã¹ãã ã®æ©èœãå®èšŒããŸãã
$ nano modules/install-app/story.check install-app-ok Hello World generator: <<CODE !bash if test -d /home/$(config user_name)/app; then echo assert: 1 directory /home/$(config user_name)/app exists else echo assert: 0 directory /home/$(config user_name)/app exists fi CODE
ãããŠãã¹ã¯ãªãããå床å®è¡ããŸãã
$ strun
åºåã§ã¯æ¬¡ã®ããã«ãªããŸãã
$ ok 3 - directory /home/app-user/app exists
Sparrowãã©ã°ã€ã³ã®å
Ž
ããã§ãã©ã°ã€ã³ã®äœæãå®äºããŸããã å€æŽãã³ãããããgitãªããžããªã«ããã·ã¥ããŸãã
$ git add . $ git commit -a -m 'all done' $ git push $ exit
äžèŠã«ãªã£ãdockerã³ã³ããã¯æ®ããŸãããåé€ã§ããŸãïŒ
$ docker rm 5e1037fa4aef
Dockerã³ã³ãããŒã®å®å
šãªã€ã¡ãŒãžãã«ããµã€ã¯ã«
Dockerfileããããã«å€æŽããŸããSparrowãã©ã°ã€ã³ã®ã³ãŒããé
眮ãããªã¢ãŒãgitãªããžããªãžã®ãªã³ã¯ãå¿
èŠã§ããããšãå¿ããªãã§ãã ãããæçµããŒãžã§ã³ã¯æ¬¡ã®ããã«ãªããŸãã
FROM tutum/centos MAINTAINER "melezhik" <melezhik@gmail.com> RUN yum clean all RUN yum -y install nano git-core RUN yum -y install make RUN yum -y install gcc RUN yum -y install perl perl-devel \ perl-Test-Simple perl-Digest-SHA perl-Digest-MD5 perl-CPAN-Meta \ perl-CPAN-Meta-Requirements perl-Getopt-Long \ perl-JSON perl-Module-CoreList perl-Module-Metadata perl-parent perl-Path-Tiny perl-Try-Tiny \ perl-App-cpanminus perl-JSON-PP perl-Algorithm-Diff perl-Text-Diff \ perl-Spiffy perl-Test-Base perl-YAML perl-File-ShareDir-Install perl-Class-Inspector \ perl-File-ShareDir perl-File-ShareDir-Install perl-Config-General RUN cd /bin/ && curl -L https://cpanmin.us/ -o cpanm && chmod +x cpanm RUN cpanm Sparrow -q RUN echo ruby-app https://github.com/melezhik/ruby-app.git > /root/sparrow.list RUN sparrow plg install ruby-app RUN sparrow plg run ruby-app
ããã§ããã¹ãŠã®ã€ã¡ãŒãžã¢ã»ã³ããªãµã€ã¯ã«ãå®è¡ããŠããã¹ãŠãæ°ãã«ã倱ããããšãã§ããŸãã
$ docker build -t ruby_app --no-cache=true .
ãã®çµæãç®çã®ã·ã¹ãã ã§Dockerã€ã¡ãŒãžãååŸããŸãã
ãããã«
Sparrowå€ç®çã¹ã¯ãªããã·ã¹ãã ã䜿çšãããšãDockerã€ã¡ãŒãžãæ§ç¯ããããã®å¹æçãªããŒã«ãšãªããŸãã äž»èŠãªDockerfileãã·ã³ãã«ãã€ç°¡æœãªãŸãŸã«ããŠãå¿
èŠãªã·ã¹ãã ã®å®éã®æ§æã¹ã¯ãªãããéçºããããã»ã¹ãç°¡çŽ åããŠãè€éãªæ§æãæ§ç¯ã§ããŸãã
ãæž
èŽããããšãããããŸããã
ãã€ãã®ããã«ãç§ã¯è³ªåãšå»ºèšçãªæ¹å€ãåŸ
ã£ãŠããŸãïŒ :)
ã¢ã¬ã¯ã»ã€