
å
容
質çå¿ç
Dockerãšã¯äœã§ããïŒ
ãŠã£ãããã£ã¢ã§ã®Dockerã®å®çŸ©ã¯æ¬¡ã®ãšããã§ãã
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¬ãã«ã®ä»®æ³åç°å¢ã§ã®ã¢ããªã±ãŒã·ã§ã³ã®å±éãšç®¡çãèªååããããã®ãœãããŠã§ã¢ã ãã¹ãŠã®ç°å¢ãšäŸåé¢ä¿ãå«ãã¢ããªã±ãŒã·ã§ã³ãã³ã³ããã«ãããã¯ãã§ããŸãããŸããã³ã³ããã管çããããã®ç°å¢ãæäŸããŸãã
ããïŒ ã©ã®ãããã®æ
å ±ã ç°¡åã«èšãã°ãDockerã¯éçºè
ãã·ã¹ãã 管çè
ãããã³ãã®ä»ã®å°é家ãLinuxãªã©ã®ã¿ãŒã²ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§å®è¡ããããã«ãµã³ãããã¯ã¹ïŒ ã³ã³ãããšåŒã°ãã ïŒã«ã¢ããªã±ãŒã·ã§ã³ãå±éã§ããããŒã«ã§ãã Dockerã®äž»ãªå©ç¹ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®äŸåé¢ä¿ãéçºçšã®æšæºåãããã¢ãžã¥ãŒã«ã«ããã¯ã§ããããšã§ãã ä»®æ³ãã·ã³ãšã¯ç°ãªããã³ã³ããã¯ãã®ãããªè¿œå ã®è² è·ãäœæããªããããã·ã¹ãã ãšãªãœãŒã¹ãããå¹ççã«äœ¿çšã§ããŸãã
ã³ã³ãããšã¯äœã§ããïŒ
ä»æ¥ã®æ¥çæšæºã¯ãä»®æ³ãã·ã³ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããšã§ãã ä»®æ³ãã·ã³ã¯ããµãŒããŒã®ã¡ã€ã³ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ä»®æ³ããŒããŠã§ã¢ã§å®è¡ãããã²ã¹ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã å
ã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã
ä»®æ³ãã·ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã»ã¹ãå®å
šã«åé¢ããã®ã«æé©ã§ããã¡ã€ã³ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®åé¡ã¯ã²ã¹ãOSã®ãœãããŠã§ã¢ã«ã»ãšãã©åœ±é¿ãäžããããã®éãåæ§ã§ãã ããããããªãã¯ãã®ãããªå€ç«ã«ãéãæããªããã°ãªããŸããã ã²ã¹ãOSããŒããŠã§ã¢ãä»®æ³åããã«ã¯ãããªãã®èšç®è² è·ãå¿
èŠã§ãã
ã³ã³ããã¯ç°ãªãã¢ãããŒãã䜿çšããŸããä»®æ³ãã·ã³ãšåæ§ã®ã¬ãã«ã®åé¢ãæäŸããŸãããã¡ã€ã³ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®äœã¬ãã«ã¡ã«ããºã ãé©åã«äœ¿çšããããšã«ãããè² è·ã倧å¹
ã«åæžããŠãããè¡ããŸãã
ãªã䜿çšããå¿
èŠãããã®ã§ããïŒ
Dockerã®é¢éžã¯æ¬åœã«å£®å€§ã§ããã ã³ã³ãããŒèªäœã¯æ°ãããã¯ãããžãŒã§ã¯ãªããšããäºå®ã«ãããããããDocker以åã¯ãã³ã³ãããŒã¯ããã»ã©äžè¬çã§ãªã人æ°ããããŸããã§ããã Dockerã¯ãã³ã³ããã®äœæãšäœ¿çšã倧å¹
ã«ç°¡çŽ åããæšæºAPIãæäŸããããšã§ç¶æ³ãå€ããã³ãã¥ããã£ãã³ã³ããã©ã€ãã©ãªã§é£æºã§ããããã«ããŸããã 2014幎åã°ã«The Registerã§å
¬éãããèšäºã«ãããšãGoogleã¯1é±éã«20åå以äžã®ã³ã³ããããµããŒãããŠããŸã ã
ãDockerããšããèšèã®Googleãã¬ã³ã

Dockerã®ç¶ç¶çãªæé·ã«å ããŠãéçºäŒç€ŸDocker Inc. 20åãã«ä»¥äžã®äŸ¡å€ããããŸããïŒ å¹çæ§ãšç§»æ€æ§ã®å©ç¹ã«ãããDockerã¯ãŸããŸãå€ãã®ãµããŒããåãå§ãã ã³ã³ããåã®åãã®å
é ã«ç«ã£ãŠããŸãã çŸä»£ã®éçºè
ãšããŠãç§ãã¡ã¯ãã®åŸåãç解ããããããåŸãããå©çãèŠã€ããªããã°ãªããŸããã
ãã®ããã¥ã¢ã«ã¯äœãæããŠãããŸããïŒ
ããã¯ãDockerã䜿çšãããã¹ãŠã®åŽé¢ã«é¢ããåäžã®å®å
šãªã¬ã€ãã§ãã Dockerãšãã®ãšã³ã·ã¹ãã ã«é¢ããç¥è©±ãæ確ã«ããããšã«å ããŠãã¯ã©ãŠãã§ç¬èªã®Webã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããã³ãããã€ããéã«å°ãçµéšãç©ãããšãã§ããŸãã Amazon Web Servicesã䜿çšããŠéçãµã€ãããããã€ãã2ã€ã®åçWebã¢ããªã±ãŒã·ã§ã³ãElastic BeanstalkãšElastic Container Serviceã䜿çšããŠEC2ã«ãããã€ããŸã ã äœãå±éããããšããªãå Žåã§ãããã®ã¬ã€ãã¯å¿
èŠãªãã®ãã¹ãŠãæäŸããŸãã
ãã®ããã¥ã¡ã³ãã®äœ¿çšæ¹æ³
ãã®ããã¥ã¡ã³ãã«ã¯ããã€ãã®ã»ã¯ã·ã§ã³ãå«ãŸããŠãããåã»ã¯ã·ã§ã³ã¯Dockerã®ç¹å®ã®åŽé¢ã«å°å¿µããŠããŸãã åã»ã¯ã·ã§ã³ã§ã¯ãã³ãã³ããå
¥åããããã³ãŒããèšè¿°ããŸãã ãã¹ãŠã®ã³ãŒãã¯githubãªããžããªã§å©çšå¯èœã§ã ã
ã¯ããã«
泚ïŒãã®ãã¥ãŒããªã¢ã«ã§ã¯ãDockerããŒãžã§ã³1.12.0-rc2ã䜿çšããŸãã äºææ§ããªãå Žåã¯ã åé¡ãéä¿¡ããŠãã ããã ãããããé¡ãããŸãïŒ
åææ¡ä»¶
ãã®ãã¥ãŒããªã¢ã«ãå®äºããããã«å¿
èŠãªã®ã¯ãã³ãã³ãã©ã€ã³ãšããã¹ããšãã£ã¿ã®åºæ¬çãªã¹ãã«ã ãã§ãã Webã¢ããªã±ãŒã·ã§ã³ã®éçºçµéšã¯åœ¹ç«ã¡ãŸãããå¿
é ã§ã¯ãããŸããã äœæ¥ã®éçšã§ãããã€ãã®ã¯ã©ãŠããµãŒãã¹ã«ééããŸãã 次ã®ãµã€ãã§ã¢ã«ãŠã³ããäœæããå¿
èŠããããŸãã
ã³ã³ãã¥ãŒã¿ãŒã®ã»ããã¢ãã
å¿
èŠãªããŒã«ããã¹ãŠã€ã³ã¹ããŒã«ããŠæ§æããã®ã¯é£ããäœæ¥ã§ããã幞ããªããšã«Dockerã¯éåžžã«å®å®ããŠãããã©ã®OSã§ãDockerãã€ã³ã¹ããŒã«ããŠå®è¡ããã®ã¯éåžžã«ç°¡åãªäœæ¥ã«ãªããŸããã ãã®ãããDockerãã€ã³ã¹ããŒã«ããŸãã
Docker
æ°ãªãªãŒã¹åãOS XãšWindowsã§Dockerãèµ·åããã®ã¯åé¡ããããŸããã ããããéçºããŒã ã¯çŽ æŽãããä»äºãããŠãããä»æ¥ã§ã¯ããã»ã¹å
šäœãã©ãã«ãç°¡åã§ã¯ãããŸããã ãã®å
¥éãã¥ãŒããªã¢ã«ã«ã¯ã Mac ã Linuxãããã³Windowsã®è©³çŽ°ãªã€ã³ã¹ããŒã«æé ãå«ãŸããŠããŸã ã
ãã¹ãŠãæ£ããã€ã³ã¹ããŒã«ãããŠãããã©ããã確èªããŸãã
$ docker run hello-world Hello from Docker. This message shows that your installation appears to be working correctly. ...
Python
Pythonã¯éåžžãOS Xããã³ã»ãšãã©ã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã«ããªã€ã³ã¹ããŒã«ãããŠããŸãã Pythonãã€ã³ã¹ããŒã«ããå¿
èŠãããå Žåã¯ã ãã¡ãããã€ã³ã¹ããŒã©ãŒãããŠã³ããŒãããŠãã ãã ã
ããŒãžã§ã³ã確èªããŠãã ããïŒ
$ python --version Python 2.7.11
pipã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãã pipãã€ã³ã¹ããŒã«ãããŠããªãå Žåã¯ãã·ã¹ãã ã®ããŒãžã§ã³ãããŠã³ããŒãããŸãã
確èªããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
$ pip --version pip 7.1.2 from /Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg (python 2.7)
JavaïŒãªãã·ã§ã³ïŒ
éçºäžã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã¹ãã¬ãŒãžãšæ€çŽ¢ã«Elasticsearchã䜿çšããŸãã ElasticsearchãããŒã«ã«ã§å®è¡ããã«ã¯ãJavaãå¿
èŠã§ãã ãã®ãã¥ãŒããªã¢ã«ã§ã¯ããã¹ãŠãã³ã³ããå
ã§å®è¡ããããããããŒã«ã«ã§Javaã䜿çšããå¿
èŠã¯ãããŸããã Javaãã€ã³ã¹ããŒã«ãããŠããå Žåã java -version
ã§åæ§ã®åºåãçæãããŸãã
$ java -version java version "1.8.0_60" Java(TM) SE Runtime Environment (build 1.8.0_60-b27) Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
1.0 Busyboxã§éã¶
å¿
èŠãªãã®ããã¹ãŠã€ã³ã¹ããŒã«ãããã®ã§ãäœæ¥ãå§ããŸãããã ãã®ã»ã¯ã·ã§ã³ã§ã¯ãã·ã¹ãã ã§Busyboxã³ã³ãããŒãèµ·åãã docker docker run
ãèµ·åãdocker run
ã
éå§ããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
$ docker pull busybox
èŠåïŒDockerãã·ã¹ãã ã«ã€ã³ã¹ããŒã«ããæ¹æ³ã«å¿ããŠã permission denied
ã¡ãã»ãŒãžã衚瀺permission denied
å ŽåããããŸãã Macã䜿çšããŠããå Žåã¯ãDockerãšã³ãžã³ãå®è¡ãããŠããããšã確èªããŠãã ããã Linuxã䜿çšããŠããå Žåã¯ã sudo
ãã®ã³ãã³ããå®è¡ããŸãã ãŸãã¯ããã®åé¡ãåãé€ãããã«dockerã°ã«ãŒããäœæã§ããŸã ã
pull
ã³ãã³ãã¯ã Dockerã¬ãžã¹ããªããbusyboxã€ã¡ãŒãžãããŠã³ããŒãããããŒã«ã«ã«ä¿åããŸãã docker images
ã䜿çšããŠãã·ã¹ãã äžã®ã€ã¡ãŒãžã®ãªã¹ãã衚瀺ã§ããŸãã
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE busybox latest c51f86c28340 4 weeks ago 1.109 MB
1.1 Docker Run
ãããïŒ æ¬¡ã«ããã®ç»åã䜿çšããŠdocker ã³ã³ãããå®è¡ããŸãã ãããè¡ãã«ã¯ã docker run
magicã³ãã³ãã䜿çšããŸãã
$ docker run busybox $
åŸ
ã£ãŠãäœãèµ·ãããªãã£ãïŒ ããã¯ãã°ã§ããïŒ ãŸããããã å
éšã§ã¯ãå€ãã®ããšãèµ·ãããŸããã Dockerã¯ã©ã€ã¢ã³ãã¯ã€ã¡ãŒãžïŒãã®å Žåã¯busyboxïŒãèŠã€ããã³ã³ãããŒãããŒããããã®ã³ã³ãããŒå
ã§ã³ãã³ããå®è¡ããŸããã docker run busybox
ãäœæããŸããããã³ãã³ããæå®ããªãã£ããããã³ã³ãããŒãããŒãããã空ã®ã³ãã³ããéå§ãããããã°ã©ã ãçµäºããŸããã ãããããã¯äžçš®ã®in蟱ãªã®ã§ããã£ãšé¢çœãããšãããŸãããã
$ docker run busybox echo "hello from busybox" hello from busybox
ãã£ããŒãæåŸã«ããçš®ã®çµè«ã ãã®å ŽåãDockerã¯ã©ã€ã¢ã³ãã¯ã³ã³ããå
ã§echo
ã³ãã³ããçŽ çŽã«å®è¡ããŠããçµäºããŸããã ããããããã¹ãŠãéåžžã«è¿
éã«è¡ãããŠããããšã«æ°ã¥ããã§ãããã 次ã«ãä»®æ³ãã·ã³ãèµ·åãããã®äžã§ã³ãã³ããå®è¡ãããªãã«ããæ¹æ³ãæ³åããŠãã ããã ã³ã³ãããé«éã ãšèšãçç±ãæããã«ãªããŸããïŒ
ã§ã¯ã docker ps
èŠãŠã¿ãŸãããã å®è¡äžã®ãã¹ãŠã®ã³ã³ããã®ãªã¹ãã衚瀺ãããŸãã
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ã³ã³ããã¯çŸåšãªãããã空ã®æååã衚瀺ãããŸãã ããŸã䟿å©ã§ã¯ãªãã®ã§ããã£ãšäŸ¿å©ãªãªãã·ã§ã³ãå®è¡ããŠã¿ãŸãããïŒ docker ps -a
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 305297d7a235 busybox "uptime" 11 minutes ago Exited (0) 11 minutes ago distracted_goldstine ff0a5c3750b9 busybox "sh" 12 minutes ago Exited (0) 12 minutes ago elated_ramanujan
ããã§ãèµ·åãããã¹ãŠã®ã³ã³ããã®ãªã¹ãã確èªã§ããŸãã STATUS
åã§ã¯ãã³ã³ãããæ°ååã«äœæ¥ãå®äºããããšãããããŸãã
ãããããã³ã³ããã§è€æ°ã®ã³ãã³ããå®è¡ããæ¹æ³ãçåã«æã£ãŠããã§ãããã è©ŠããŠã¿ãŸãããïŒ
$ docker run -it busybox sh /
-it
ãã©ã°ãæå®ããrun
ã³ãã³ãã¯ãã€ã³ã¿ã©ã¯ãã£ãttyãã³ã³ããã«æ¥ç¶ããŸãã ããã§ãå
éšã§å¥œããªã ãã³ãã³ããå®è¡ã§ããŸãã è©ŠããŠã¿ãŠãã ããã
å±éºïŒ ïŒã¹ãªã«ãå¿
èŠãªå Žåã¯ãã³ã³ããã§rm -rf bin
ãè©ŠããŠãã ããã ãã ãã å€éšã§ã¯ãªãã³ã³ããå
ã§å®è¡ããŠãã ããã ãããå€éšã§è¡ããšãã³ã³ãã¥ãŒã¿ãŒäžã§éåžžã«æªããªãã ls
ã echo
ãªã©ã®ã³ãã³ããæ©èœããªããªããŸãã ã³ã³ããå
ã®ãã¹ãŠãæ©èœããªããªã£ãããçµäºããŠdocker run -it busybox sh
åèµ·åããŸãã Dockerã¯èµ·åæã«æ°ããã³ã³ãããäœæããããããã¹ãŠãåã³æ©èœããŸãã
docker run
ã®æ©èœã®ãšããµã€ãã£ã³ã°ãªãã¢ãŒã¯ããã§çµããã§ãã ã»ãšãã©ã®å Žåããã®ã³ãã³ãã¯é »ç¹ã«äœ¿çšããŸãã ãã®ãããåŠçæ¹æ³ãç解ããããšãéèŠã§ãã run
詳现ã«ã€ããŠrun
ã docker run --help
ã䜿çšãããšããµããŒããããŠãããã©ã°ã®å®å
šãªãªã¹ãã衚瀺ãããŸãã éããªãdocker run
ã䜿çšããããã€ãã®æ¹æ³ã衚瀺ãããŸãã
ç¶è¡ããåã«ãã³ã³ããã®åé€ã«ã€ããŠç°¡åã«èŠãŠã¿ãŸãããã docker ps -a
ã䜿çšãããšãå®æããã³ã³ãããŒã®æ®ããåŒãç¶ã衚瀺ã§ããããšãäžã§ç¢ºèªã§ããŸããã ãã®ãã¥ãŒããªã¢ã«ã§ã¯ã docker run
æ°ådocker run
ãŸããæ®ãã®ããŒã ã¬ã¹ã³ã³ãããŒã¯ãã£ã¹ã¯é åã䜿ãæãããŸãã ããã§ãã³ã³ããã®äœ¿çšãçµããåŸã«ã³ã³ãããåé€ããããšãã«ãŒã«ã«ããŸããã ãããè¡ãã«ã¯ã docker rm
䜿çšããŸãã äžèšã®åºåããIDïŒè€æ°å¯ïŒãã³ããŒãããã©ã¡ãŒã¿ãŒãã³ãã³ãã«æž¡ãã ãã§ãã
$ docker rm 305297d7a235 ff0a5c3750b9 305297d7a235 ff0a5c3750b9
åé€ãããšãèå¥åãåã³è¡šç€ºãããŸãã å€ãã®ã³ã³ãããåé€ããå¿
èŠãããå Žåã¯ãæåã§ã³ããŒããŠè²Œãä»ãã代ããã«ããããè¡ãããšãã§ããŸãã
$ docker rm $(docker ps -a -q -f status=exited)
ãã®ã³ãã³ãã¯ã exited
ã¹ããŒã¿ã¹ã®ãã¹ãŠã®ã³ã³ãããåé€ããŸãã -q
ãã©ã°ã¯æ°å€IDã®ã¿ãè¿ãã -f
ãã©ã°ã¯æå®ãããæ¡ä»¶ã«åºã¥ããŠåºåããã£ã«ã¿ãŒããŸãã æåŸã®äŸ¿å©ãªè©³çŽ°--rm
ãã©ã°ã--rm
docker run
--rm
ã«æž¡ããšãã³ã³ããã¯å®äºæã«èªåçã«åé€ãããŸãã ããã¯ãDockerã䜿çšãã1åéãã®èµ·åããã³å®éšã«éåžžã«åœ¹ç«ã¡ãŸãã
docker rmi
äžèŠãªç»åãåé€ããããšãã§ããŸãã
1.2çšèª
åã®ã»ã¯ã·ã§ã³ã§ã¯ãå€ãã®Dockeråºæã®å°éçšèªã䜿çšããŸããããå€ãã¯æ··ä¹±ãæãå¯èœæ§ããããŸãã ç¶è¡ããåã«ãDockerãšã³ã·ã¹ãã ã§ãã䜿çšãããçšèªã®ããã€ããèŠãŠã¿ãŸãããã
- ç»å -ã³ã³ããã®åºç€ãšãªãã¢ããªã±ãŒã·ã§ã³ã®ç»åã äžèšã®äŸã§ã¯ã docker
docker pull
ã䜿çšããŠbusyboxã€ã¡ãŒãžãããŠã³ããŒãããŸãã ã - ã³ã³ãã -ã€ã¡ãŒãžã«åºã¥ããŠäœæããã¢ããªã±ãŒã·ã§ã³èªäœãèµ·åããŸãã docker
docker run
ã§ã³ã³ãããäœæãã以åã«ããŠã³ããŒãããbusyboxã€ã¡ãŒãžã䜿çšããŸããã å®è¡äžã®ã³ã³ããã®ãªã¹ãã¯ã docker ps
ã§ç¢ºèªã§ããŸãã - Docker Daemon ïŒ DockerããŒã¢ã³ïŒ-Dockerã³ã³ãããŒã®äœæãèµ·åãããã³ç Žå£ãæ
åœãããã¹ããã·ã³ã§å®è¡ãããããã¯ã°ã©ãŠã³ããµãŒãã¹ã ããŒã¢ã³ã¯ãã¯ã©ã€ã¢ã³ãã察話ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§å®è¡ãããããã»ã¹ã§ãã
- Docker Client-ãŠãŒã¶ãŒãããŒã¢ã³ãšå¯Ÿè©±ã§ããããã«ããã³ãã³ãã©ã€ã³ãŠãŒãã£ãªãã£ã Kitematicãªã©ãã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ãåããä»ã®ã¯ã©ã€ã¢ã³ããã©ãŒã ããããŸãã
- Docker Hub -Dockerã€ã¡ãŒãžãç»é²ããŸãã 倧ãŸãã«èšã£ãŠãå©çšå¯èœãªãã¹ãŠã®ç»åã®ã¢ãŒã«ã€ãã å¿
èŠã«å¿ããŠãç¬èªã®ã¬ãžã¹ã¿ãç¶æããããã䜿çšããŠç»åãååŸã§ããŸãã
2.0 Webã¢ããªã±ãŒã·ã§ã³ãšDocker
ãããïŒ ããã§ã docker run
æ¹æ³ãåŠã³ãããã€ãã®ã³ã³ããã§éãã§çšèªãç解ããŸããã ãã®ç¥èã身ã«ã€ããŠãDockerã§Webã¢ããªã±ãŒã·ã§ã³ããããã€ãããšããæ¬ç©ã®è©±ã«é²ãæºåãã§ããŸããïŒ
2.1éçãµã€ã
å°ããå§ããŸãããã ãŸããæãåçŽãªéçWebãµã€ããæ€èšããŸãã Docker Hubããã€ã¡ãŒãžãããŠã³ããŒãããã³ã³ãããŒãèµ·åããŠãWebãµãŒããŒãç°¡åã«èµ·åã§ããããšã確èªããŸãã
è¡ãã 1ããŒãžã®ãµã€ãã®å Žåããã®ãã¥ãŒããªã¢ã«çšã«äºåã«äœæãããããregister - prakhar1989/static-site
é
眮ããã€ã¡ãŒãžãå¿
èŠã§ãã docker run
ããŠãã€ã¡ãŒãžãçŽæ¥ããŠã³ããŒãã§ããŸãã
$ docker run prakhar1989/static-site
ã€ã¡ãŒãžã¯ããŒã«ã«ã«ååšããªããããã¯ã©ã€ã¢ã³ãã¯æåã«ã¬ãžã¹ã¿ããã€ã¡ãŒãžãããŠã³ããŒãããŠããèµ·åããŸãã ãã¹ãŠãåé¡ãªãå Žåãã¿ãŒããã«ã§Nginx is running...
ã¡ãã»ãŒãžã衚瀺ãããŸãã ããã§ãµãŒããŒãå®è¡ãããŸãã åäœäžã®ãµã€ããèŠãæ¹æ³ã¯ïŒ ãµãŒããŒã¯ã©ã®ããŒãã§åäœããŸããïŒ ãããŠãæãéèŠãªã®ã¯ããã¹ãã³ã³ãããŒããã³ã³ãããŒã«çŽæ¥å°éããæ¹æ³ã§ããïŒ
ãã®å Žåãã¯ã©ã€ã¢ã³ãã¯ããŒããéããªããããããŒããå
¬éããã«ã¯docker run
ãåèµ·åããå¿
èŠããããŸãã åæã«ãã¿ãŒããã«ãå®è¡äžã®ã³ã³ããã«æ¥ç¶ãããŠããªãããšã確èªããŸãããã ãã®å Žåãã¿ãŒããã«ãå®å
šã«éããããšãã§ããã³ã³ããã¯åŒãç¶ãæ©èœããŸãã ããã¯åé¢ã¢ãŒããšåŒã°ããŸãã
$ docker run -d -P --name static-site prakhar1989/static-site e61d12292d69556eabe2a44c16cbd54486b2527e2ce4f95438e504afb7b02810
-d
ãã©ã°ã¯ã¿ãŒããã«ããã¿ãããã -P
ãã©ã°ã¯ãã¹ãŠã®éããŠããããŒããå
¬éããã³ã©ã³ãã ã«ããæåŸã«--name
ãã©ã°ã¯ã³ã³ããã«ä»ããååã§ãã ããã§ã docker port [CONTAINER]
ã䜿çšããŠããŒãã衚瀺ã§ããŸãã
$ docker port static-site 80/tcp -> 0.0.0.0:32769 443/tcp -> 0.0.0.0:32768
ãã©ãŠã¶ã§httpïŒ// localhostïŒ32769ãéããŸãã
泚ïŒdocker-toolboxã䜿çšããå Žåã docker-machine ip default
ãdocker-machine ip default
ããŠIPã¢ãã¬ã¹ãååŸããå¿
èŠãããå ŽåããããŸãã
ããŒããæå®ããããšãã§ããŸãã ã¯ã©ã€ã¢ã³ãã¯æ¥ç¶ããªãã€ã¬ã¯ãããŸãã
$ docker run -p 8888:80 prakhar1989/static-site Nginx is running...

ã³ã³ãããŒãåæ¢ããã«ã¯ã docker stop
ãå®è¡ããŠãã³ã³ãããŒIDïŒIDïŒãæå®ããŸãã
åæããŠããã¹ãŠãéåžžã«ç°¡åã§ããã å®ãµãŒããŒã«ã€ã³ã¹ããŒã«ããã«ã¯ãDockerãã€ã³ã¹ããŒã«ããŠäžèšã®ã³ãã³ããå®è¡ããã ãã§ãã ç»åå
ã§WebãµãŒããŒãèµ·åããæ¹æ³ãèŠãŠããã®ã§ãããããçåã«æãããŸãããç¬èªã®dockerç»åãäœæããæ¹æ³ã¯ãããŸããïŒ ãã®ãããã¯ã«ã€ããŠã¯ã次ã®ã»ã¯ã·ã§ã³ã§åŠç¿ããŸãã
2.2ç»å
åã«ç»åã«ã€ããŠè§ŠããŸãããããã®ã»ã¯ã·ã§ã³ã§ã¯ãDockerç»åãšã¯äœããç¬èªã®ç»åãäœæããæ¹æ³ã«ã€ããŠè©³ããèŠãŠãããŸãã æåŸã«ãç¬èªã®ã€ã¡ãŒãžã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãããŒã«ã«ã§èµ·åãã AWSã«ãããã€ããŠå人ã«èŠããŸãã ãã£ããã ãã£ãããïŒ å§ããŸãããã
ç»åã¯ã³ã³ããã®åºæ¬ã§ãã æåŸã®äŸã§ã¯ãã¬ãžã¹ã¿ããBusyboxãšåŒã°ããããŒãªãŒã€ã¡ãŒãžãããŠã³ããŒããããã®ã€ã¡ãŒãžã«åºã¥ããŠã³ã³ãããŒãéå§ããããã«Dockerã¯ã©ã€ã¢ã³ãã«èŠæ±ããŸããã ããŒã«ã«ã§å©çšå¯èœãªç»åã®ãªã¹ãã衚瀺ããã«ã¯ã docker images
䜿çšãdocker images
ã
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE prakhar1989/catnip latest c7ffb5626a50 2 hours ago 697.9 MB prakhar1989/static-site latest b270625a1631 21 hours ago 133.9 MB python 3-onbuild cf4002b2c383 5 days ago 688.8 MB martin/docker-cleanup-volumes latest b42990daaca2 7 weeks ago 22.14 MB ubuntu latest e9ae3c220b23 7 weeks ago 187.9 MB busybox latest c51f86c28340 9 weeks ago 1.109 MB hello-world latest 0a6ba66e537a 11 weeks ago 960 B
ããã¯ãç§ãã¬ãžã¹ã¿ããããŠã³ããŒãããç»åã®ãªã¹ããšãç§ãèªåã§äœæããç»åã®ãªã¹ãã§ãïŒããã«ãããè¡ãæ¹æ³ãããããŸãïŒã TAG
ã¯ç¹å®ã®ã¹ãããã·ã§ãããŸãã¯ç»åã®ã¹ãããã·ã§ããã§ããã IMAGE ID
ã¯å¯Ÿå¿ããç»åã®äžæã®èå¥åã§ãã
ç°¡åã«ããããã«ãã€ã¡ãŒãžãgitãªããžããªãšããŠæ±ãããšãã§ããŸãã ã€ã¡ãŒãžã¯å€æŽã«ã³ãããã§ããè€æ°ã®ããŒãžã§ã³ãæã€ããšãã§ããŸãã ç¹å®ã®ããŒãžã§ã³ãæå®ããªãå Žåãã¯ã©ã€ã¢ã³ãã¯ããã©ã«ãã§latest
ããŒãžã§ã³ã䜿çšããŸãã ããšãã°ã ubuntu
ã€ã¡ãŒãžã®ç¹å®ã®ããŒãžã§ã³ãããŠã³ããŒãã§ããŸãã
$ docker pull ubuntu:12.04
æ°ããDockerã€ã¡ãŒãžãååŸããã«ã¯ãã¬ãžã¹ããªïŒDocker Hubãªã©ïŒããããŠã³ããŒãããããç¬èªã®ã€ã¡ãŒãžãäœæããŸãã Docker Hubã«ã¯äœäžãã®ç»åããããŸãã docker search
ã䜿çšããŠãã³ãã³ãã©ã€ã³ããçŽæ¥æ€çŽ¢ã§ããŸãã
ããŒã¹ã€ã¡ãŒãžãšåã€ã¡ãŒãžã®éããç解ããããšãéèŠã§ãã
- åºæ¬ç»åã¯ã芪ç»åãæããªãç»åã§ãã ãããã¯éåžžãubuntuãbusyboxãdebianãªã©ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã€ã¡ãŒãžã§ãã
- åã€ã¡ãŒãžã¯ãåºæ¬çãªã€ã¡ãŒãžã«åºã¥ããŠæ§ç¯ãããè¿œå æ©èœãåããã€ã¡ãŒãžã§ãã
å
¬åŒç»åãšã«ã¹ã¿ã ç»åãããããããã¯ããããåºæ¬çãªãã®ã§ãããåäŸã®ãã®ã§ããå ŽåããããŸãã
- å
¬åŒç»åã¯ãDockerããŒã ã«ãã£ãŠå
¬åŒã«ãµããŒããããŠããç»åã§ãã éåžžããã®ååã«ã¯1ã€ã®åèªããããŸãã äžèšã®ãªã¹ãã§ã¯ã
python
ã ubuntu
ã busybox
ããã³hello-world
ãããŒã¹ã€ã¡ãŒãžã§ãã - ã«ã¹ã¿ã ç»åã¯ãç§ãããªãã®ãããªåçŽãªãŠãŒã¶ãŒã«ãã£ãŠäœæãããç»åã§ãã ãããã¯åºæ¬çãªã€ã¡ãŒãžã«åºã¥ããŠããŸãã éåžžã
user/image-name
圢åŒã«åºã¥ããŠuser/image-name
ãä»ããããŸãã
2.3æåã®å€èŠ³
ç»åãšã¯äœããããããç解ã§ããã®ã§ãä»åºŠã¯ç¬èªã®ç»åãäœæããŸãã ãã®ã»ã¯ã·ã§ã³ã®ç®çã¯ãã·ã³ãã«ãªFlaskã¢ããªã±ãŒã·ã§ã³ã§ç»åãäœæããããšã§ãã ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãç«ããã©ã³ãã ãªGIFã衚瀺ããå°ããªã¢ããªã±ãŒã·ã§ã³ãäœæããŸããã ããŠãç«ãå«ããªã®ã¯èª°ã§ããïŒ ãã®ãªããžããªãããŒã«ã«ãã·ã³ã«ã¯ããŒã³ããŸãã
ãŸããã¢ããªã±ãŒã·ã§ã³ãããŒã«ã«ã§å®è¡ãããããšã確èªããŸãããã cd
ã§flask-app
ãã£ã¬ã¯ããªãå
¥åããäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸãã
$ cd flask-app $ pip install -r requirements.txt $ python app.py * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
ãã¹ãŠãé 調ã§ããã°ãäžèšã®äŸã®ãããªåºåã衚瀺ãããŸãã httpïŒ// localhostïŒ5000ã«ç§»åããŠãã¢ããªã±ãŒã·ã§ã³ã®åäœã確èªããŸãã
æ³šïŒ pip install
ã³ãã³ãããpermission deniedããšã©ãŒã§ã¯ã©ãã·ã¥pip install
å Žåã¯ã sudo
å®è¡ããŠã¿ãŠãã ããã ã·ã¹ãã ã¬ãã«ã§ã«ã¹ã¿ã ããã±ãŒãžãã€ã³ã¹ããŒã«ããªãå Žåã¯ã pip install --user -r requirements.txt
ã³ãã³ãã䜿çšããŸãã
è¯ãããã§ããã ããã§ãã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠã€ã¡ãŒãžãäœæããå¿
èŠããããŸãã åè¿°ã®ããã«ããã¹ãŠã®ãŠãŒã¶ãŒç»åã¯ããŒã¹ç»åã«åºã¥ããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯Pythonã§èšè¿°ãããŠãããããåºæ¬çãªPython 3ã€ã¡ãŒãžãå¿
èŠã§ãã ç¹ã«ã python:3-onbuild
ããŒãžã§ã³ãå¿
èŠã§ãpython:3-onbuild
ããŒã¹ã€ã¡ãŒãžã®python:3-onbuild
ã
onbuild
ããŒãžã§ã³ã¯äœã§ããïŒ
ãããã®ã€ã¡ãŒãžã«ã¯ããã€ãã®ONBUILDããªã¬ãŒãå«ãŸããŠãããéåžžã¯ã¢ããªã±ãŒã·ã§ã³ãè¿
éã«ãããã€ããã®ã«ååã§ãã ã¢ã»ã³ããªäžã«ã requirements.txt
ãã¡ã€ã«ãã³ããŒããããã®ãã¡ã€ã«ã䜿çšããŠpip install
ãèµ·åããã次ã«çŸåšã®ãã£ã¬ã¯ããªã/usr/src/app
ã³ããŒãããŸãã
ã€ãŸãã onbuild
ããŒãžã§ã³ã«ã¯ãéå±ãªã¢ããªã±ãŒã·ã§ã³ã®èµ·åããã»ã¹ãèªååãããã«ããŒãå«ãŸããŠããŸãã ãããã®ã¿ã¹ã¯ãæåã§å®è¡ããïŒãŸãã¯ã¹ã¯ãªãããäœæããïŒä»£ããã«ãã€ã¡ãŒãžããã¹ãŠãè¡ããŸãã ããã§ãã€ã¡ãŒãžãäœæããããã®ãã¹ãŠã®èŠçŽ ãã€ãŸããæ©èœããWebã¢ããªã±ãŒã·ã§ã³ãšåºæ¬ã€ã¡ãŒãžãã§ããŸããã ã©ããã£ãŠããã®ïŒ åçïŒ Dockerfileã䜿çšããŸã ã
2.4 Dockerfile
Dockerfileã¯ã Dockerã¯ã©ã€ã¢ã³ãã³ãã³ãã®ãªã¹ããå«ãåçŽãªããã¹ããã¡ã€ã«ã§ãã ããã¯ãã€ã¡ãŒãžãäœæããããã»ã¹ãèªååããç°¡åãªæ¹æ³ã§ãã æãã¯ãŒã«ãªã®ã¯ãDockerfileã®ã³ãã³ããLinuxã®ã³ãã³ããšã»ãšãã©åãã§ããããšã§ãã ã€ãŸããååãšããŠãdockerfilesã®æäœãéå§ããããã«æ°ããæ§æãåŠã¶å¿
èŠã¯ãããŸããã
ã¢ããªã±ãŒã·ã§ã³ã®ãã£ã¬ã¯ããªã«ã¯DockerfileããããŸããããã¹ãŠãåããŠè¡ããããæåããäœæããå¿
èŠããããŸãã ãæ°ã«å
¥ãã®ããã¹ããšãã£ã¿ã§æ°ãã空ã®ãã¡ã€ã«ãäœæããFlaskã¢ããªã±ãŒã·ã§ã³ã眮ãããŠããã®ãšåããã£ã¬ã¯ããªã«ä¿åããŸãã ãã¡ã€ã«ã«Dockerfile
ååãä»ããŸãã
æåã«ãåºæ¬çãªç»åã瀺ããŸãã ãããè¡ãã«ã¯ã FROM
ããŒã¯ãŒãã䜿çšããŸãã
FROM python:3-onbuild
ããã«ãéåžžããã¡ã€ã«ãã³ããŒããŠäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããããã®ã³ãã³ãã瀺ããŸãã ãããã幞ããªããšã«ãããŒã¹ã€ã¡ãŒãžã®onbuild
ããŒãžã§ã³ããããã®ã¿ã¹ã¯ãåŠçããŸãã 次ã«ãéãå¿
èŠãããããŒããæå®ããå¿
èŠããããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ããŒã5000ã§å®è¡ãããã®ã§ãããã瀺ããŸãã
EXPOSE 5000
æåŸã®ã¹ãããã¯ãã¢ããªã±ãŒã·ã§ã³ãèµ·åããã³ãã³ããæå®ããããšã§ãã ããã¯åãªãpython ./app.py
ã§ãã ãããè¡ãã«ã¯ã CMDã³ãã³ãã䜿çšããŸãã
CMD ["python", "./app.py"]
CMD
ã®äž»ãªç®çã¯ãèµ·åæã«å®è¡ããã³ãã³ããã³ã³ããã«äŒããããšã§ãã ããã§ã Dockerfile
æºåDockerfile
ã§ããŸããã ããã¯æ¬¡ã®ãããªãã®ã§ãã
ããã§ãç»åãäœæã§ããŸãã docker build
ããŒã ã¯ã Dockerfile
åºã¥ããŠã€ã¡ãŒãžãäœæãããšããè€éãªã¿ã¹ã¯ã«é¢äžããŠããŸãã
以äžã®ãªã¹ãã«ããã»ã¹ã瀺ããŸãã èªåã§ã³ãã³ããå®è¡ããåã«ïŒæåŸã®ããããå¿ããªãã§ãã ããïŒãèªåã®ãŠãŒã¶ãŒåã§ã¯ãªããŠãŒã¶ãŒåãååšããããšã確èªããŠãã ããã ãŠãŒã¶ãŒåã¯ã Dockerããã®ç»é²æã«äœ¿çšããããã®ãšäžèŽããå¿
èŠããããŸãã ãŸã ç»é²ããŠããªãå Žåã¯ãã³ãã³ããå®è¡ããåã«ç»é²ããŠãã ããã docker build
éåžžã«åçŽã§ãã- -t
ãã©ã°ãšDockerfile
ååšãããã£ã¬ã¯ããªãžã®ãã¹ãå«ããªãã·ã§ã³ã®ã¿ã°ãåãå
¥ããŸãã
$ docker build -t prakhar1989/catnip . Sending build context to Docker daemon 8.704 kB Step 1 : FROM python:3-onbuild
python:3-onbuild
ããªãå Žåãã¯ã©ã€ã¢ã³ãã¯ãŸããããããŠã³ããŒãããŠãããã€ã¡ãŒãžã®äœæãéå§ããŸãã ãã®ãããç»é¢ãžã®åºåã¯ç§ã®åºåãšç°ãªãå ŽåããããŸãã 泚ææ·±ãèŠãŠãonbuildããªã¬ãŒãèŠã€ããŠãã ããã ãã¹ãŠãããŸãããã°ãç»åã®æºåã¯å®äºã§ãïŒ docker images
ãèµ·åãããšããªã¹ãã«ã€ã¡ãŒãžã衚瀺ãããŸãã
æåŸã®ã¹ãããã¯ãã€ã¡ãŒãžãéå§ããŠæäœæ§ã確èªããããšã§ãïŒãŠãŒã¶ãŒåãèªåã®ãã®ã«çœ®ãæããŸãïŒã
$ docker run -p 8888:5000 prakhar1989/catnip * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
æå®ãããURLã«ç§»åãããšãã¢ããªã±ãŒã·ã§ã³ãåäœããŠããããšãããããŸãã

ããã§ãšãããããŸãïŒ åããŠã®Dockerã«ãã¯ã®äœæã«æåããŸããïŒ
2.5 AWSã®Docker
åã ã¡ã«èŠããããªãã¢ããªã¯äœãè¯ãã§ããããïŒ ãã®ã»ã¯ã·ã§ã³ã§ã¯ããã°ãããã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãŠãã«ãããã€ããæ¹æ³ãåŠã³ãŸãã AWS Elastic Beanstalkã䜿çšããŠãæ°ã¯ãªãã¯ã§ãã®åé¡ã解決ããŸãã Beanstalkãã©ã®ããã«ã¢ããªã±ãŒã·ã§ã³ãç°¡åã«ç®¡çããã³ã¹ã±ãŒãªã³ã°ã§ãããã確èªããŸãã
Dockerããã·ã¥
AWSã«ãããã€ããåã«æåã«è¡ãããšã¯ãã¬ãžã¹ããªã«ã€ã¡ãŒãžãå
¬éããŠãAWSããããŠã³ããŒãã§ããããã«ããããšã§ãã ããã€ãã®Dockerã¬ãžã¹ã¿ããããŸãïŒãŸãã¯ãç¬èªã® ã¬ãžã¹ã¿ãäœæã§ããŸã ïŒã ã¯ããã«ã Docker Hubã䜿çšããŸãããã ãã ããïŒ
$ docker push prakhar1989/catnip
ãããæåã®æçš¿ã§ããå Žåãã¯ã©ã€ã¢ã³ãã¯ãã°ã€ã³ãæ±ããŸãã Docker Hubãžã®ãã°ã€ã³ã«äœ¿çšãããã®ãšåãæ
å ±ãå
¥åããŸãã
$ docker login Username: prakhar1989 WARNING: login credentials saved in /Users/prakhar/.docker/config.json Login Succeeded
ç»åã®ååãèªåã®ãã®ã«çœ®ãæããããšãå¿ããªãã§ãã ããã ã¯ã©ã€ã¢ã³ããç»åãå
¬éããå Žæãç解ã§ããããã«ã username/image_name
圢åŒãç¶æããããšã¯éåžžã«éèŠã§ãã
ãã®åŸãDocker Hubã§ç»åãèŠãããšãã§ããŸãã ããšãã°ãããã«ç§ã®ç»åã®ããŒãžããããŸã ã
泚ïŒç¶è¡ããåã«æ確ã«ããå¿
èŠãããéèŠãªç¹ã®1ã€ã¯ãAWSã«ãããã€ããããã«ããããªãã¯ã¬ãžã¹ã¿ïŒãŸãã¯äžè¬ã«ä»ã®ã¬ãžã¹ã¿ïŒã«ã€ã¡ãŒãžãä¿åããå¿
èŠããªãããšã§ãã 次ã®æ°çŸäžãã«ã®ãŠãã³ãŒã³ã®ã¹ã¿ãŒãã¢ããã®ã³ãŒããæžããŠããå Žåã¯ããã®ã¹ããããã¹ãããã§ããŸãã ããã€ãã®æ§ææé ãã¹ãããããŠãå±éãç°¡çŽ åããããã«ã€ã¡ãŒãžãå
¬éããŸãã
ããã§ç»åããªã³ã©ã€ã³ã«ãªããDockerã¯ã©ã€ã¢ã³ãã¯ç°¡åãªã³ãã³ãã§ç»åãæäœã§ããŸãã
$ docker run -p 8888:5000 prakhar1989/catnip
éå»ã«ããŒã«ã«ã®äœæ¥ç°å¢ãã€ã³ã¹ããŒã«ããååãšæ§æãå
±æããããšããŠèŠåŽããããšããããªãããããããã«ã¯ãŒã«ãç解ã§ããŸãã ããããDockerã匷åãªçç±ã§ãïŒ
è±ã®æš
AWS Elastic BeanstalkïŒEBïŒã¯ãAmazon Web Servicesã®PaaSïŒãµãŒãã¹ãšããŠã®ãã©ãããã©ãŒã ïŒã§ãã HerokuãGoogle App Engineãªã©ã䜿çšããå Žåããã¹ãŠãããªãã¿ã§ãã éçºè
ãšããŠãEBã«ã¢ããªã±ãŒã·ã§ã³ã®èµ·åæ¹æ³ãæ瀺ãããšãEBã¯ã¹ã±ãŒãªã³ã°ãç£èŠãæŽæ°ãªã©ãä»ã®ãã¹ãŠãå®è¡ããŸãã 2014幎4æãEBã¯Dockerã³ã³ãããŒãèµ·åããæ©èœãè¿œå ããŸããããã®ç¹å®ã®æ©äŒã䜿çšããŠå±éããŸãã EB , , - .
, AWS . , . . , , , .
å§ããŸãããïŒ
- AWS .
- Elastic Beanstalk. compute, . .

- "Create New Application" .
- ( ) , , .
- New Environment Web Server Environment .
- . Docker . Environment type . Next.

- EB . Dockerrun.aws.json
flask-app
Name
, . , . "upload your own" . - , URL. URL , - .
- Additional Resources . Next Configuration Details .
t1.micro
. , AWS. , . , , . .- Environment Tags and Permissions , Next . Review . , Launch .
- . . , .
, Dockerrun.aws.json
. AWS, . EB .
{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "prakhar1989/catnip", "Update": "true" }, "Ports": [ { "ContainerPort": "5000" } ], "Logging": "/var/log/nginx" }
, . , EB .
. EB .

URL . , .
ããã§ãšãããããŸãïŒ -! , , EB . , , . AWS single-container Docker environment , EB.
, , , . -. è¡ããïŒ
3.0
, . , Flask-. , . : .
, , . ( ). Redis Memcached -. , "" , .
, , -. , ? , , . ( ) .
, , . , . , , . . , ( ) .
3.1 SF Food Trucks
, , SF Food Trucks ( , â . . ). - ( ), -, , . .

(Flask), Elasticsearch . , Github . , - .
, (), , . Flask Elasticsearch. , : Flask, Elasticsearch (ES). , , .
, . , ? Flask- . Elasticsearch⊠, - :
$ docker search elasticsearch NAME DESCRIPTION STARS OFFICIAL AUTOMATED elasticsearch Elasticsearch is a powerful open source se... 697 [OK] itzg/elasticsearch Provides an easily configurable Elasticsea... 17 [OK] tutum/elasticsearch Elasticsearch image - listens in port 9200. 15 [OK] barnybug/elasticsearch Latest Elasticsearch 1.7.2 and previous re... 15 [OK] digitalwonderland/elasticsearch Latest Elasticsearch with Marvel & Kibana 12 [OK] monsantoco/elasticsearch ElasticSearch Docker image 9 [OK]
, Elasticsearch. ES, docker run
, , ES.
$ docker run -dp 9200:9200 elasticsearch d582e031a005f41eea704cdc6b21e62e7a8a42021297ce7ce123b945ae3d3763 $ curl 0.0.0.0:9200 { "name" : "Ultra-Marine", "cluster_name" : "elasticsearch", "version" : { "number" : "2.1.1", "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71", "build_timestamp" : "2015-12-15T13:05:55Z", "build_snapshot" : false, "lucene_version" : "5.3.1" }, "tagline" : "You Know, for Search" }
Flask. Dockerfile
. python:3-onbuild
. , , pip
, , Javascript- . Nodejs. , ubuntu
.
: , , . , Docker Hub Dockerfile
Github. â .
Dockerfile Flask- :
. Ubuntu LTS , apt-get
, â Python Node. yqq
"Yes" . node. .
ADD
â /opt/flask-app
. . , . , , . Node, npm , package.json . Python, CMD
, .
, ( prakhar1989
username ).
$ docker build -t prakhar1989/foodtrucks-web .
, ubuntu, . docker build
.
$ docker run -P prakhar1989/foodtrucks-web Unable to connect to ES. Retying in 5 secs... Unable to connect to ES. Retying in 5 secs... Unable to connect to ES. Retying in 5 secs... Out of retries. Bailing out...
! , Elasticsearch. ? â .
3.2 Docker
, , . , , .
, docker ps
, :
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e931ab24dedc elasticsearch "/docker-entrypoint.s" 2 seconds ago Up 2 seconds 0.0.0.0:9200->9200/tcp, 9300/tcp cocky_spence
, ES 0.0.0.0:9200
, . , ES, ? , , .
es = Elasticsearch(host='es')
Flask-, ES 0.0.0.0
( 9200
), , ? , , IP 0.0.0.0
- , . . , , ES? , .
, . , :
$ docker network ls NETWORK ID NAME DRIVER 075b9f628ccc none null be0f7178486c host host 8022115322ec bridge bridge
bridge â , . , ES, bridge. , :
$ docker network inspect bridge [ { "Name": "bridge", "Id": "8022115322ec80613421b0282e7ee158ec41e16f565a3e86fa53496105deb2d7", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "172.17.0.0/16" } ] }, "Containers": { "e931ab24dedc1640cddf6286d08f115a83897c88223058305460d7bd793c1947": { "EndpointID": "66965e83bf7171daeb8652b39590b1f8c23d066ded16522daeb0128c9c25c189", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" } }, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" } } ]
, e931ab24dedc
Containers
. IP-, â 172.17.0.2
. ? : Flask- IP:
$ docker run -it --rm prakhar1989/foodtrucks-web bash root@35180ccc206a:/opt/flask-app
. bash
. --rm
, . curl
, . , 172.17.0.2:9200
ES! ãããïŒ
, , :
/etc/hosts
Flask-, , es
172.17.0.2
. IP- , .- bridge , .
: . . /etc/hosts
, .
-, :
$ docker network create foodtrucks 1a3386375797001999732cb4c4e97b88172d983b08cd0addfcb161eed0c18d89 $ docker network ls NETWORK ID NAME DRIVER 1a3386375797 foodtrucks bridge 8022115322ec bridge bridge 075b9f628ccc none null be0f7178486c host host
network create
bridge . . , .
. --net
. , ElasticSearch, bridge .
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e931ab24dedc elasticsearch "/docker-entrypoint.s" 4 hours ago Up 4 hours 0.0.0.0:9200->9200/tcp, 9300/tcp cocky_spence $ docker stop e931ab24dedc e931ab24dedc $ docker run -dp 9200:9200 --net foodtrucks --name es elasticsearch 2c0b96f9b8030f038e40abea44c2d17b0a8edda1354a08166c33e6d351d0c651 $ docker network inspect foodtrucks [ { "Name": "foodtrucks", "Id": "1a3386375797001999732cb4c4e97b88172d983b08cd0addfcb161eed0c18d89", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ {} ] }, "Containers": { "2c0b96f9b8030f038e40abea44c2d17b0a8edda1354a08166c33e6d351d0c651": { "EndpointID": "15eabc7989ef78952fb577d0013243dae5199e8f5c55f1661606077d5b78e72a", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" } }, "Options": {} } ]
, , es
. , , , .
$ docker run -it --rm --net foodtrucks prakhar1989/foodtrucks-web bash root@53af252b771a:/opt/flask-app
ãã£ãïŒ åäœããŸãïŒ /etc/hosts
, es:9200
â ES. ãããïŒ Flask- -:
$ docker run -d --net foodtrucks -p 5000:5000 --name foodtrucks-web prakhar1989/foodtrucks-web 2a1b77e066e646686f669bab4759ec1611db359362a031667cacbe45c3ddb413 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2a1b77e066e6 prakhar1989/foodtrucks-web "python ./app.py" 2 seconds ago Up 1 seconds 0.0.0.0:5000->5000/tcp foodtrucks-web 2c0b96f9b803 elasticsearch "/docker-entrypoint.s" 21 minutes ago Up 21 minutes 0.0.0.0:9200->9200/tcp, 9300/tcp es $ curl -I 0.0.0.0:5000 HTTP/1.0 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 3697 Server: Werkzeug/0.11.2 Python/2.7.6 Date: Sun, 10 Jan 2016 23:58:53 GMT
http://0.0.0.0:5000 , . , , , 4 . bash- .
, . , . !
$ git clone https://github.com/prakhar1989/FoodTrucks $ cd FoodTrucks $ ./setup-docker.sh
以äžã§ãïŒ -, !
Docker Links
, , , docker network
, Docker 1.9 .
, network
, . , linking deprecated. , link
, network
( links legacy, â . .)
3.3 Docker Compose
. , . :
- Docker Machine - , -.
- Docker Compose â - .
- Docker Swarm â .
â Docker Compose, , .
Docker Compose . OrchardUp Fig. , . Hacker News - , , .
, Fig :
, : . API : ( , ) (shared volumes), - , , . : .
, "", , . Fig: . " " ( , " ") " ".
, . , Fig , Docker Inc. , Docker Compose.
, Compose ? -. docker-compose.yml
, .
, docker-compose.yml
SF-Foodtrucks , , .
Docker Compose. Windows Mac, Docker Compose â Docker Toolbox. Linux Docker Compose . Compose Python, pip install docker-compose
. :
$ docker-compose version docker-compose version 1.7.1, build 0a9ab35 docker-py version: 1.8.1 CPython version: 2.7.9 OpenSSL version: OpenSSL 1.0.1j 15 Oct 2014
, docker-compose.yml
. yml
- , ,
version: "2" services: es: image: elasticsearch web: image: prakhar1989/foodtrucks-web command: python app.py ports: - "5000:5000" volumes: - .:/code
. : es
web
. , image
â . es
Docker Hub elasticsearch
. Flask- â , .
command
ports
. volumes
, web
. , , . .
: docker-compose.yml
Compose.
ãããïŒ , docker-compose
. , . Flask ES, :
$ docker stop $(docker ps -q) 39a2f5df14ef 2a1b77e066e6
docker-compose
. Foodtrucks docker-compose up
.
$ docker-compose up Creating network "foodtrucks_default" with the default driver Creating foodtrucks_es_1 Creating foodtrucks_web_1 Attaching to foodtrucks_es_1, foodtrucks_web_1 es_1 | [2016-01-11 03:43:50,300][INFO ][node ] [Comet] version[2.1.1], pid[1], build[40e2c53/2015-12-15T13:05:55Z] es_1 | [2016-01-11 03:43:50,307][INFO ][node ] [Comet] initializing ... es_1 | [2016-01-11 03:43:50,366][INFO ][plugins ] [Comet] loaded [], sites [] es_1 | [2016-01-11 03:43:50,421][INFO ][env ] [Comet] using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sda1)]], net usable_space [16gb], net total_space [18.1gb], spins? [possibly], types [ext4] es_1 | [2016-01-11 03:43:52,626][INFO ][node ] [Comet] initialized es_1 | [2016-01-11 03:43:52,632][INFO ][node ] [Comet] starting ... es_1 | [2016-01-11 03:43:52,703][WARN ][common.network ] [Comet] publish address: {0.0.0.0} is a wildcard address, falling back to first non-loopback: {172.17.0.2} es_1 | [2016-01-11 03:43:52,704][INFO ][transport ] [Comet] publish_address {172.17.0.2:9300}, bound_addresses {[::]:9300} es_1 | [2016-01-11 03:43:52,721][INFO ][discovery ] [Comet] elasticsearch/cEk4s7pdQ-evRc9MqS2wqw es_1 | [2016-01-11 03:43:55,785][INFO ][cluster.service ] [Comet] new_master {Comet}{cEk4s7pdQ-evRc9MqS2wqw}{172.17.0.2}{172.17.0.2:9300}, reason: zen-disco-join(elected_as_master, [0] joins received) es_1 | [2016-01-11 03:43:55,818][WARN ][common.network ] [Comet] publish address: {0.0.0.0} is a wildcard address, falling back to first non-loopback: {172.17.0.2} es_1 | [2016-01-11 03:43:55,819][INFO ][http ] [Comet] publish_address {172.17.0.2:9200}, bound_addresses {[::]:9200} es_1 | [2016-01-11 03:43:55,819][INFO ][node ] [Comet] started es_1 | [2016-01-11 03:43:55,826][INFO ][gateway ] [Comet] recovered [0] indices into cluster_state es_1 | [2016-01-11 03:44:01,825][INFO ][cluster.metadata ] [Comet] [sfdata] creating index, cause [auto(index api)], templates [], shards [5]/[1], mappings [truck] es_1 | [2016-01-11 03:44:02,373][INFO ][cluster.metadata ] [Comet] [sfdata] update_mapping [truck] es_1 | [2016-01-11 03:44:02,510][INFO ][cluster.metadata ] [Comet] [sfdata] update_mapping [truck] es_1 | [2016-01-11 03:44:02,593][INFO ][cluster.metadata ] [Comet] [sfdata] update_mapping [truck] es_1 | [2016-01-11 03:44:02,708][INFO ][cluster.metadata ] [Comet] [sfdata] update_mapping [truck] es_1 | [2016-01-11 03:44:03,047][INFO ][cluster.metadata ] [Comet] [sfdata] update_mapping [truck] web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
IP . , ? - . detached mode:
web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) Killing foodtrucks_web_1 ... done Killing foodtrucks_es_1 ... done $ docker-compose up -d Starting foodtrucks_es_1 Starting foodtrucks_web_1 $ docker-compose ps Name Command State Ports ---------------------------------------------------------------------------------- foodtrucks_es_1 /docker-entrypoint.sh elas ... Up 9200/tcp, 9300/tcp foodtrucks_web_1 python app.py Up 0.0.0.0:5000->5000/tcp
, . ? Compose . ? Compose ? , .
, . :
$ docker-compose stop Stopping foodtrucks_web_1 ... done Stopping foodtrucks_es_1 ... done
, foodtrucks
, . , Compose .
$ docker network rm foodtrucks $ docker network ls NETWORK ID NAME DRIVER 4eec273c054e bridge bridge 9347ae8783bd none null 54df57d7f493 host host
ã¯ã©ã¹ïŒ , Compose .
$ docker-compose up -d Recreating foodtrucks_es_1 Recreating foodtrucks_web_1 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f50bb33a3242 prakhar1989/foodtrucks-web "python app.py" 14 seconds ago Up 13 seconds 0.0.0.0:5000->5000/tcp foodtrucks_web_1 e299ceeb4caa elasticsearch "/docker-entrypoint.s" 14 seconds ago Up 14 seconds 9200/tcp, 9300/tcp foodtrucks_es_1
. , - :
$ docker network ls NETWORK ID NAME DRIVER 0c8b474a9241 bridge bridge 293a141faac3 foodtrucks_default bridge b44db703cd69 host host 0474c9517805 none null
, Compose foodtrucks_default
, , . , . hostname, . , /etc/hosts
.
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bb72dcebd379 prakhar1989/foodtrucks-web "python app.py" 20 hours ago Up 19 hours 0.0.0.0:5000->5000/tcp foodtrucks_web_1 3338fc79be4b elasticsearch "/docker-entrypoint.s" 20 hours ago Up 19 hours 9200/tcp, 9300/tcp foodtrucks_es_1 $ docker exec -it bb72dcebd379 bash root@bb72dcebd379:/opt/flask-app
! , es
. ? :
root@bb72dcebd379:/opt/flask-app
åºæ¥äžããïŒ åäœããŸãïŒ - es
. , Docker 1.10 , DNS-. , release notes .
Docker Compose . , , . Docker Compose.
, Compose. AWS!
3.4 AWS Elastic Container Service
docker-compose
: docker-compose up
. , , , , . , AWS.
, , Docker â . . . , - AWS, Azure , Rackspace , DigitalOcean . Elastic Beanstalk, AWS Elastic Container Service ( ECS) .
AWS ECS â , . EC2 API. Beanstalk , ECS . ECS â .
, ECS (CLI) Docker Compose ECS! docker-compose.yml
, AWS . ããå§ããŸãããïŒ
CLI. CLI- Windows. CLI Mac Linux . , :
$ ecs-cli --version ecs-cli version 0.1.0 (*cbdc2d5)
â . EC2 Console keypair. . â . ecs
us-east-1
. .

CLI:
$ ecs-cli configure --region us-east-1 --cluster foodtrucks INFO[0000] Saved ECS CLI configuration for cluster (foodtrucks)
configure
, , . , . AWS CLI , , .
CloudFormation .
$ ecs-cli up --keypair ecs --capability-iam --size 2 --instance-type t2.micro INFO[0000] Created cluster cluster=foodtrucks INFO[0001] Waiting for your cluster resources to be created INFO[0001] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0061] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0122] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0182] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0242] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS
, ( ecs
), ( --size
) , . --capability-iam
, , IAM.
docker-compose.yml
. , , aws-compose.yml
. ( ):
es: image: elasticsearch cpu_shares: 100 mem_limit: 262144000 web: image: prakhar1989/foodtrucks-web cpu_shares: 100 mem_limit: 262144000 ports: - "80:5000" links: - es
docker-compose.yml
mem_limit
cpu_shares
.
, version
services
, AWS 2 Compose. t2.micro
, 250 . Docker Hub. , ecs-cli build
. Docker Compose .
$ docker push prakhar1989/foodtrucks-web
çŸäººïŒ , ECS!
$ ecs-cli compose --file aws-compose.yml up INFO[0000] Using ECS task definition TaskDefinition=ecscompose-foodtrucks:2 INFO[0000] Starting container... container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es INFO[0000] Starting container... container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web INFO[0000] Describe ECS container status container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2 INFO[0000] Describe ECS container status container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2 INFO[0036] Describe ECS container status container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2 INFO[0048] Describe ECS container status container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2 INFO[0048] Describe ECS container status container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2 INFO[0060] Started container... container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web desiredStatus=RUNNING lastStatus=RUNNING taskDefinition=ecscompose-foodtrucks:2 INFO[0060] Started container... container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=RUNNING taskDefinition=ecscompose-foodtrucks:2
, Docker Compose â . --file
( docker-compose.yml
). , desiredStatus=RUNNING lastStatus=RUNNING
.
ãã£ãããïŒ . ?
ecs-cli ps Name State Ports TaskDefinition 845e2368-170d-44a7-bf9f-84c7fcd9ae29/web RUNNING 54.86.14.14:80->5000/tcp ecscompose-foodtrucks:2 845e2368-170d-44a7-bf9f-84c7fcd9ae29/es RUNNING ecscompose-foodtrucks:2
http://54.86.14.14 , Food Trucks - ! , AWS ECS .


, ECS- 'foodtrucks', . .
以äžã§ãã â AWS!
4.0
. , , ! , . , , - , , .
, . , , .
4.1
. . , . , , . , , , .
â . . â .
è¿œå ã®ãªãœãŒã¹
, !
4.2
. ? , -?
( , â . .) prakhar@prakhar.me issue . , , .
( -, â . .).
. . , . .