ãã®èšäºã§ã¯äœãæ€èšããŸããïŒ
ããŒã0ïŒçè«ïŒã§ãã³ã³ããããããäœã§ãããããããŠäœãé£ã¹ããã«ã€ããŠèª¬æããŸã
ããŒã1ãã5ã«ã¯ãrabbitmqãã¥ãŒã䜿çšããŠPythonã§ãã€ã¯ããµãŒãã¹ãäœæãããšããçè«ãšå®è·µããããŸãã
ããŒã6-ããšãã
ããŒã0.0ïŒã¿ã€ã€ã®ãŠã©ãŒã ã¢ãã
Dockerãšã¯äœã§ããïŒ ããã¯ãLinuxåå空éã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ãçžäºã«åé¢ããæ°ããæ¹æ³ã§ãã 管çãæ¡åŒµã移è¡ãéåžžã«ç°¡åã§ãããã¢ããªã±ãŒã·ã§ã³éçºãããã±ãŒãžæ§ç¯ãã5åéã®ãã¹ãïŒ1-2ã³ãã³ãã®å®è¡ãã§ãã¯ãã¯ããŒãºã¢ã³ããã©ãŒã²ãããªã©ããã¿ãã¯ãªãŒã³ã¢ãããããïŒãŸã§ãå¹ åºãã¿ã¹ã¯ã«é©ããŠããŸãã ãªããµã€ãã§è©³çŽ°ãã芧ãã ããã æåã®æ®µéã§ã¯ãã³ã³ãããã¬ã€ã€ãŒã§æ§æãããŠããããšãæ³åããã ãã§ãã ãã¡ã€ã«ã·ã¹ãã ã®ç¶æ ã®ã¹ãããã·ã§ããããã ããã«ã€ããŠã¯å°ãåŸã§èª¬æããŸãã
ãã®èšäºã®ã©ãã€ã³ãã©ã¹ãã©ã¯ãã£ã¯ãLinuxãæèŒããåãOSã§ããäžé£ã®ä»®æ³ãã·ã³\ vps \äœã§ãåçŸã§ããŸãã Debian OSãæèŒããåãå°çšãµãŒããŒã§ãã¹ãŠãè¡ããŸããã 以äžãåãDebian 9 OSã§äœæ¥ããŠãããšä»®å®ããŸããOSããOSãžã®ã³ãã³ããšã¢ãããŒãã¯ç°ãªãå Žåãããã1ã€ã®èšäºã§ãã¹ãŠã説æããã®ã¯éçŸå®çã§ãããããæã銎æã¿ã®ãããµãŒããŒOSãéžæãããŸããã ä»®æ³ãã·ã³ãã€ã³ã¹ããŒã«ããŠãã€ã³ã¿ãŒããããžã®ã¢ã¯ã»ã¹ãèš±å¯ããã®ãé£ãããªãããšãé¡ã£ãŠããŸãã
docker-ceãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãïŒ å ¬åŒã®ç· ïŒ
ç§ã¯ãã§ã«æžããããã®ãåãã€ããã¯ãªãã®ã§ãããã§ããã¥ã¡ã³ããžã®ãªã³ã¯ãæäŸãããªã¹ãã§çŽç²ãª Debian9 x64ã«ã€ã³ã¹ããŒã«ããããã®ã³ãã³ããæäŸããŸãã ã¹ãŒããŒãŠãŒã¶ãŒã«ä»£ãã£ãŠå®è¡ãããã³ãã³ãã¯ïŒæåã§å§ãŸããéåžžã®ãŠãŒã¶ãŒã³ãã³ãã¯$ã§å§ãŸããŸãã
# apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common # curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | apt-key add - # add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable" # apt update && apt install docker-ce
ããŒã0.1 VMãšã®æ¯èŒ
Dockerã¯ããã»ã¹ïŒã¿ã¹ã¯ïŒãåé¢ããæ段ã§ãããããã¯Dockerãä»®æ³ãã·ã³ãšããŠæ±ãããšã¯äžå¯èœã§ããããšãèŠããŠããããšãéèŠã§ãã ããã¯ãå ·äœçã«ã¯Linuxã«ãŒãã«ã®ã³ã³ãããŒåããŒã«ïŒcgroups +åå空éïŒã®ã©ãããŒã§ãã ããããä»®æ³åã®ãããªå€ãã®åæ§ã®æ©èœããããŸãã
- ç¬ç«æ§-ã³ã³ããã¯ãããã«ãŒãµãŒãã¹ãæèŒããä»»æã®OSã«ç§»åã§ããã³ã³ããã¯æ©èœããŸãã ïŒæ£åŒã«-ã¯ããå®éãäºææ§ããããŒãè¹ãè¶ãšåãããããã©è²ãã©ããã¯ããããŸãããä»ã®çµéšãããå Žåã¯ãå ±æããŠãã ããïŒ
- èªçµŠèªè¶³-ã³ã³ããã¯ãèµ·åãããå Žæã§ããã°ã©ãã§ãæ©èœãå®è¡ããŸãã
ããã§ããéåžžã®ä»®æ³åãšã¯ç°ãªããŸãã
- ã³ã³ããã®å éšã«ã¯ãããã»ã¹ã®æäœã«å¿ èŠãªæå°éã®ãœãããŠã§ã¢ã»ããããããŸãã ããã¯æ¬æ ŒçãªOSã§ã¯ãªããç£èŠãæ®ãã®å Žæã®ç£èŠãªã©ãè¡ãå¿ èŠããããŸãã
- ä»®æ³åãžã®ç°ãªãã¢ãããŒãã䜿çšãããŸãã ããã«ã€ããŠèªãã§ãã ãã ã ç§ã¯ååãã®ãã®ãæå³ããŸã-ããªãã¿ã®ãã¹ãOSã¯ãããŸããã
- ã³ã³ãããšã³ã³ãããçæããããŒã¿ã«ã¯ç¹å¥ãªæ³šæãæãå¿ èŠããããŸãã ã³ã³ããã¯ããŒã¿åŠçããŒã«ã§ãããã¹ãã¬ãŒãžããŒã«ã§ã¯ãããŸããã äŸãšããŠãã³ã³ããã¯éæã¡æ©ã§ãããå ¥åããŒã¿ã¯æ¿ãšéã§ãããäœæ¥ã®çµæã¯éãæ¿ã«æã¡èŸŒãããšã§ãã åæã«ãéã®ããããŒãã¯éæã¡æ©èªäœã®äžéšã§ã¯ãããŸãããçµæã¯åé¢ãããããŒã«ã¯åé¢ãããŸãã åºåãã³ã³ããå ã«ä¿åããªãã§ãã ããïŒã§ããŸãããããã«ãŒãŠã§ã€ã§ã¯ãããŸããïŒã ãããã£ãŠãã³ã³ããã¯ã¯ãŒã«ãŒïŒäœæ¥æžã¿ããã¥ãŒã«ã¬ããŒããããïŒã§ãããããŸãã¯ãããšãã°WebãµãŒããŒã®å Žåãå€éšããªã¥ãŒã ã䜿çšããå¿ èŠããããŸãã ïŒããã¯ãã¹ãŠéåžžã«ç°¡åã§ãçŸæç¹ã§ã¯æ²ããããšã¯ãããŸããïŒã
ããŒã0.2ã³ã³ããå ã®ããã»ã¹
Dockerãäœã§ããããããã£ãã®ã§ãåçŒé¡ã§äžèº«ãèŠãŠã¿ãŸãããã 次ã®ä»®å®ãèŠããŠããå¿ èŠããããŸãã
- ã³ã³ããã¯åç¶ããŸãããã³ã³ãããçãŸããããã»ã¹ã¯åç¶ããŸãã
- ã³ã³ããå ã§ã¯ããã®ããã»ã¹ã®pid = 1
- pid = 1ã®ããã»ã¹ã®è¿ãã§ãä»ã®ããã»ã¹ãïŒOSã®æ©èœã®ç¯å²å ã§ïŒå¥œããªã ãçæã§ããŸãããpid = 1ã®ããã»ã¹ã匷å¶çµäºïŒåèµ·åïŒãããšãã³ã³ããã¯çµäºããŸãã ïŒãã€ã³ã1ãåç §ïŒ
- ã³ã³ããå ã«ã¯ã FHSæšæºã«åŸã£ãŠéåžžã®ãã£ã¬ã¯ããªã¬ã€ã¢ãŠãã衚瀺ãããŸãã å Žæã¯ãå ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ïŒã³ã³ããã®ååŸå ïŒãšåãã§ãã
- ã³ã³ããå ã§äœæãããããŒã¿ã¯ãã³ã³ããå ã«æ®ããä»ã®ã©ãã«ãä¿åãããŸããïŒãã¹ãOSãããã®ã¬ã€ã€ãŒã«ã¢ã¯ã»ã¹ããããšãã§ããŸãïŒã ã³ã³ãããåé€ãããšããã¹ãŠã®å€æŽã倱ãããŸãã ãããã£ãŠãããŒã¿ã¯ã³ã³ããã«ä¿åãããããã¹ãOSã«åãåºãããŸãã
ããŒã0.3ãããã®ã³ã³ããã®å ¥æå ä¿ç®¡æ¹æ³
å ¬åŒããã³éå ¬åŒã®ç»åã®ãããªãã¯ã¹ãã¢ãšãã©ã€ããŒãã¹ãã¢ããããŸãã ãããã¯docker registryãšåŒã°ããŸãã æã人æ°ã®ããã®ã¯Dockerããã§ãã ãµãŒãã¹ããããã³ã°ãããšããæåã«ããã«è¡ãã誰ãããã§ã«ãããè¡ã£ãŠãããã©ããã確èªããŸããïŒ
ãŸããåŠç¿æã«ããªãã«ãšã£ãŠå€§ããªå©ãã«ãªããŸãã å®æããDockerfileãããã«è¡šç€ºããããããã¯ãŒã«ãªãããããšããããã©ããã£ãŠããã®ããèŠãããšãã§ããŸãã ãããã®å€ãã¯githubããã³ä»ã®åæ§ã®ãªãœãŒã¹ã«ä¿åãããŸãã
ãããªãã¯ã¬ãžã¹ããªã«å ããŠããã©ã€ããŒãã®ãã®ããããŸã-ææãšç¡æã ãµãŒãã¹ã«èŠããã§ããã¯ãããããã®äººã«ã¬ãžã¹ããªå ã®ãã®ããããã«ãŒããã«ããªã¢ããã¹ãŠèŠãŠã¿ãŸãããããšå«ã¶ãšãã¯ãææã®ãã®ãå¿ èŠã«ãªããŸãã ãããŠçå®ã¯ãDevOpsããã«ãŒãç©æ¥µçã«äœ¿çšãããšãã人ãèªååãäœçŸãã®ã³ã³ãããæ§ç¯ãããšããé ããæ©ããããããããã«ããŠç¶æããæ¹æ³ããçãå§ããŸãã
ãã¡ããããã¹ãŠãããã»ã©æªãããã§ã¯ãããŸããã 1æ¥æ°å人ãš1æ¥ã«2ã3ãã«ãã®å Žåãã¬ãžã¹ããªãæ©èœããŸãã ããã«å人çãªäœ¿çšã®ããã«ã
ã¬ãžã¹ããªã圹ç«ã€ã®ã¯ãªãã§ããïŒ ããã¯ãããªããä»ã®äººããŸãã¯èªååã®éã§ã®ä¿ç®¡ãšã³ã³ããã®äº€æã®åäžã®å Žæã§ãã ãããŠããã¯æ¬åœã«ã¯ãŒã«ãªããšã§ãã å®æããã³ã³ããã¯ããã£ã1ã€ã®ããŒã ã§é 眮ããã³ããã¯ã¢ããã§ããŸããééã1ãã³ãïŒVMã«æ¯ã¹ãŠïŒã§ããã°ããã©ã¹é¢ã¯ããã«ããããŸãã Dockerã¯ããŒã«ã§ãããDockerã¬ãžã¹ããªã«ã¯äœæ¥ã³ã³ããã®ããŒã¿ã¯ä¿åãããªãããšãèŠããŠããå¿ èŠããããŸãã ãããã£ãŠãéçºè ã¯éåžžã«äŸ¿å©ãªã¯ãŒã¯ãããŒãæã€ããšãã§ããŸããéçºè ã¯è£œåãäœæããæ°ããã³ã³ãããæ§ç¯ããããããªããžããªã«ããã·ã¥ããŸãã ãã¹ã¿ãŒã¯ãããåãåãããã¹ãããå éãããŸãã Devopsã¯ãããšãã°ãããããã®ããŒã«çŽå®¹åšã䜿çšããŸãã ãŸãããµãŒããŒã1å°ã§ããããš100å°ã§ããããšãansibleãšã¬ãžã¹ããªã䜿çšããŠãã³ã³ãããprodã«ããŒãªã³ã°ããããšã¯ããªãã«ãšã£ãŠçµ¶å¯Ÿã«éèŠã§ã¯ãããŸããã ãããCIã®å šäœã§ã-ãã«ããµãŒããŒã«ãã£ãŠæ°ããããŒãžã§ã³ãèªåçã«ããŠã³ããŒãã§ããŸãã ãã®ãããå人ã§äœ¿çšããå Žåã§ããã¬ãžã¹ããªã§VPS \ DSãååŸããããšã匷ããå§ãããŸããã³ã³ããã亀æããããšã¯éåžžã«äŸ¿å©ã§ãã
ãªããžããªããç»åãããŠã³ããŒãïŒ
docker pull wallarm/node
ç»åããªããžããªã«ã¢ããããŒãïŒ
docker push example.com:5000/my_image
ãŸãããã©ã€ããŒããªããžããªã«ãã°ã€ã³ããå¿ èŠããããŸããããã«ã¯ã³ãã³ããå¿ èŠã§ã
docker login
ãŠãŒã¶ãŒåãšãã¹ã¯ãŒããå ¥åããå¿ èŠããããŸãã
次ã®1ã€ã®ã³ãã³ãã§ã¬ãžã¹ããªãéå§ã§ããŸãã
docker run -d -p 5000:5000 --restart=always --name registry registry:2
ãªããµã€ãã®è©³çŽ° ã SSLãèªå¯-ããã¯ãã¹ãŠå¯èœã§ãã
ããŒã0.4ã³ã³ãããŒãšã€ã¡ãŒãžïŒã€ã¡ãŒãžïŒ
Dockerã€ã¡ãŒãžã¯ã¬ã€ã€ãŒã®ã»ããã§ãã åã¬ã€ã€ãŒã¯ãDockerfileã§ã®ããŒã ã®äœæ¥ã®çµæã§ãã 倧ãŸãã«èšãã°ãç»åã¯ã³ã³ãããèµ·åããããã®ãã³ãã¬ãŒãã§ãã ãã®ã€ã¡ãŒãžã«åºã¥ããŠèµ·åãããã®ã¯ãã³ã³ãããŸãã¯ã€ã³ã¹ã¿ã³ã¹ã®ã¿ã§ãã ã€ãŸã 1ã€ã®ã€ã¡ãŒãžããããã®ã€ã¡ãŒãžã®ããã€ãã®åäžã³ããŒïŒã³ã³ãããŒïŒãå®è¡ã§ããŸãã ãããŠãããã€ãã®æäœã®åŸããã®ã³ã³ãããããã³ãã¬ãŒããäœæã§ããŸã-æ°ããã€ã¡ãŒãžã ãã®äžåèªã¯ãã¹ãŠ/ var / lib / dockerã«ä¿åãããŸãã
ããã¥ã¡ã³ã
ã·ã¹ãã å ã®ã€ã¡ãŒãžã®ãªã¹ãã¯ã次ã®ã³ãã³ãã§è¡šç€ºã§ããŸãã
# docker images
ã³ã³ãããªã¹ãïŒ
docker ps
-aã¹ã€ãããåæ¢ããããšã瀺ãã-sã¹ã€ããã¯ãã®ãµã€ãºã瀺ããŸãã ã€ãŸã å®éããã®ã³ã³ãããå®è¡æã«ã©ãã ããã£ã¹ã¯ã¹ããŒã¹ãå æãããã
ããŒã0.5ã³ã³ãããšã€ã¡ãŒãžã«ååãä»ããæ¹æ³
ç»åã«ã¯ãåœåã«é¢é£ãã3ã€ã®ãã£ãŒã«ãããããŸãã
1ïŒãªããžããª
2ïŒã¿ã°
3ïŒç»åID
ãªããžããª-æ¬ç©ãŸãã¯éæ¬ç©ãããã¯ããªãã®ç»åãã©ããããŸãã¯ã©ãããããŠã³ããŒã/ã¢ããããŒãããããããŸãã¯ããªãããããã©ãã«ãã¢ããããŒãããã€ããããªãå Žåã¯åãªãäœãäžãã®ååã§ãã
ã¿ã°ã¯éåžžã補åã®ããŒãžã§ã³ã§ãã çè«çã«ã¯ãããã¯ä»»æã®æåã»ããã§ãã ïŒèš±å¯ãªã¹ã[a-z0-9.-]ãªã©ããïŒãã¿ã°ããªãå Žåã ææ°ã®åèªãèªåçã«äœ¿çšãããŸãã ã¿ã°ã¯ãã·ã³ãã«ãä»ããŠé 眮ãããŸãïŒãªããžããªã«ä»£ãã£ãŠãããã·ã¥\ãã«æã«æå®ãããŠããªãå Žåã¯èªåçã«çœ®æãããŸãã
ImageID-ããŒã«ã«ã§çæãããç»åã®äžæã®IDããã®æ¹æ³ã§æäœã§ããŸãã
ãããã£ãŠãããªããŸãã¯ã³ã³ããã®äœæè ã¯ããªããžããªããã³/ãŸãã¯ã¿ã°ãããã³ã·ã¹ãã ã«ããŒã«ã«ã«åœ±é¿ãäžããŸã-IDã ãããããšããã§ã誰ãç°æ人ã®ãªããžããªåãåå©çšããããšãæ°ã«ããŸãããå¥ã®è³ªåã¯ããªãããããããã·ã¥ïŒããã·ã¥ãããŒãïŒã§ããªããã®ã§ã
äŸïŒ
1/2 / 3-blah.blah.blah-ããŒã«ã«ã€ã¡ãŒãžã®ååãããªãããããçºæãã
projects / my_first_dockerã¯ããŒã«ã«ã€ã¡ãŒãžã®ååã§ããããŸã
projects / my_first_dockerïŒlatestã¯åãååã§ãããã¿ã°ãä»ããŠããŸãã åã®ãã®ãšåçã
projects / my_first_dockerïŒ1.13.33-ãã ããããã¯ãã®ãªããžããªå ã®ã€ã¡ãŒãžã®ç¹å®ã®ããŒãžã§ã³ã§ãã
projects / my_first_dockerïŒ1.13.34
projects / my_first_dockerïŒ1.13.35
...ãªã©-ãããã¯ãã¹ãŠåããããžã§ã¯ãã§ãããç»åã®ããŒãžã§ã³ã¯ç°ãªããŸãã
Dockerã®åªããæ©èœã®1ã€ã¯ãã¬ã€ã€ãŒã®åå©çšã§ãã ããã¯ãã¬ã€ã€ãŒãå€æŽãããŠããªãå Žåãã€ã¡ãŒãžã®æ°ããããŒãžã§ã³ãä»ã®ã³ã³ãããŒã®ã¬ã€ã€ãŒã䜿çšã§ããããšãæå³ããŸãã ããšãã°ãdebianã«ãŒãã¬ã€ã€ãŒã¯ããã¹ãŠã®debianããŒã¹ã®ã³ã³ãããŒã§äœ¿çšãããŸãã 2çªç®ã®ã¬ã€ã€ãŒãããšãã°nginxãã€ã³ã¹ããŒã«ãã3çªç®ã®ã¬ã€ã€ãŒãæ§æãé 眮ããå Žåãæ§æãå€æŽããŠæ°ããã€ã¡ãŒãžãäœæãããšã2ã€ã®å€ãã¬ã€ã€ãŒãš1ã€ã®æ°ããã¬ã€ã€ãŒã§æ§æãããŸãã ããããåãã§å€§æ¥ãããªãã§ãã ããã ãã®åå©çšã«ããå€ãã®ã¹ããŒã¹ãç¯çŽã§ããŸãããããã«ãŒã¯ãããã¿ããšã«äœæãããããã®ã¬ã€ã€ãŒãæŽçã§ããŸãã åå©çšã®ããã«ãããã®å±€ã¯äºãã«å°çã®ãããªäŸåé¢ä¿ãæã¡ãæçµçã«ãå€ãã®ã³ã³ãããçµã¿ç«ãŠããã倧èŠæš¡ãªã€ã³ã¹ããŒã«ã§ã¯ãããã¯ç§ãäžèšã§è¿°ã¹ãéåžžã«ãããªãã«ããªã¢ã«ãªããŸãã ããããããªãã«èµ·ããããšãšããŠèšãããããšãåãåããªãã§ãã ãããç§ã¯ããªãã£ã¹å šäœãèªååãšçžãŸã£ãŠäœããçµæ¥åéãããšãã«ã1æ¥ã«æ°åã®æ°ãããã«ããæèŒããè² è·ã·ã¹ãã ã«ã€ããŠè©±ããŸãã éåžžã®ãµãŒããŒã«ã¯ãã®ãããªããã«ããªã¢ã¯ãããŸãã-ããã«ã¯æ°åã®ã³ã³ãããããããŸããã äžæ¹ã§ãéåžžã«ç°¡åã«ã¯ãªãŒãã³ã°ãããŸã-rm -rfã ãã§ãã ããªãã«ãšã£ãŠæãéèŠãªã®ã¯ã³ã³ããã§ããã³ã³ããã¯ãªããžããªã«ãããåçŽã«èªåçã«å床ããŠã³ããŒããããŸãã ãšã«ãããäœæ¥ã®çµæãã³ã³ããã«ä¿åããªãã§ãã ããã
ãã®ä»ã®äŸïŒ
wallarm / node-ããã¯ãWallarm瀟ã®æé«ã®WAFããã§ã«ããã®ãããªãã¯ããã«ãŒããããŠã³ããŒããããã€ã¡ãŒãžã§ãã
debianïŒstretch-debianã€ã¡ãŒãžãã€ã¡ãŒãžã®ããŒãžã§ã³-stretchïŒæ°åã§ã¯ãªãåèªïŒ
centosïŒ7-debianã«äŒŒãŠããŸãã
mongoïŒ3.2-ãããªãã¯ãªããžããªããããŠã³ããŒããããmongodbããŒãžã§ã³3.2ã€ã¡ãŒãž
nginx-ææ°ã®å®å®ããnginx-åæ§ã«ã
ãããŠãã»ãšãã©ã®å Žåãããã§å¿ èŠãªãœãããŠã§ã¢ã®ããŸããŸãªããŒãžã§ã³ã確èªã§ããŸãã ããšãã°ãmongoã䜿çšãããšã3.2ãš3.4ãš3.6ã®äž¡æ¹ãããã«ã¯éçºããŒãžã§ã³ãããŠã³ããŒãã§ããŸãã ããã³ããŸããŸãªäžéäœã ãããŠä»ã®ããããã
ãããã©ãã»ã©äŸ¿å©ãæ³åããŠã¿ãŠãã ãã-Monga 3.2ãå転ããŠããã®ã§ãè¿ãã§å¥ã®ããŒãžã§ã³ãè©ŠããŠã¿ãŠãã ããã æ°ããããŒãžã§ã³ã®ã³ã³ãããããŠã³ããŒãããŠå®è¡ããã ãã§ãã ãŸããä»®æ³ãã·ã³ãéžæããŠæ§æããããã¯ãªãŒãã³ã°ãããããå¿ èŠã¯ãããŸããã Dockerã€ã¡ãŒãžãåé€ããå¿ èŠãããã®ã¯ãdocker rmiã³ãã³ããå ¥åããã ãã ããã§ãã ãããŠãããã¯æ¯é¡ã®ãªã軜éã§ãã ããšãã°ã200ã¡ãŒãã«ã ãŸããããã«ã¯ãŒã«ã«ãããå Žåã¯ãalpine linuxããŒã¹ã®æ¢è£œã®ãœãªã¥ãŒã·ã§ã³ã䜿çšã§ããŸãã bind9-alpineã 1ã€ã®æªéã 3æ§æ 15ã¡ã¬ãã€ã!!! ããã¯ãããã«äœ¿çšã§ããå®å šãªã€ã³ã¹ããŒã«ã§ãã
èŠããŠãããŠãã ãããåãã€ã¡ãŒãžã«ã¯ãä»»æã®æ°ã®ãªããžããªåãšã¿ã°ãå«ããããšãã§ããŸãããåãã€ã¡ãŒãžIDãæã€ããšã«ãªããŸãã åæã«ããã®ç»åã®ãã¹ãŠã®ã¿ã°ãåé€ããããŸã§ãç»åã¯åé€ãããŸããã ã€ãŸã debianã€ã¡ãŒãžãããŠã³ããŒãããŠæ°ããã¿ã°ãèŠæ±ãããšããªã¹ãã«ã¯2ã€ã®ã€ã¡ãŒãžããããŸãããååã¯åãã§ãããimageidã¯åãã§ãã debianïŒstretchãåé€ãããšãã¿ã°ã®1ã€ãåé€ããã ãã§ãç»åèªäœã¯çãããŸãŸã«ãªããŸãã
æ¢åã®ã€ã¡ãŒãžã«å¥ã®ååãèšå®ããã«ã¯ã次ã®ã³ãã³ãã䜿çšããŸãã
docker tag <existing image name> <new image name>
ç»åãåé€ããã«ã¯ïŒ
docker rmi <image>
ãã ããã³ã³ããã«ã¯2ã€ã®ååããããŸãã
1ïŒã³ã³ããID
2ïŒåå
id-ããã§ãåã-ããã¯ãã€ã¡ãŒãžã®å®è¡äžã®ç¹å®ã®äžæã®ã€ã³ã¹ã¿ã³ã¹ã®äžæã®ååã§ãã ç°¡åã«èšãã°ãå®è¡äžã®ã€ã¡ãŒãžã®äžæã®ååã§ãã ã€ã¡ãŒãžã¯äœåºŠã§ãå®è¡ã§ããåã³ããŒã«ã¯äžæã®ååãä»ããããŸãã
åå-ããããããã¯ç·æ§ãšã¹ã¯ãªããäœæã«ãšã£ãŠãã䟿å©ãªååã§ãã äºå®ãããŸããŸãªã€ã¡ãŒãžãèµ·åããããšã§ãèµ·åããã³ã³ããã®ååã確èªããããã³ã³ããã®èµ·åæã«ãã®ææ°ãè¡ããŸã§ãèµ·åããååãæ£ç¢ºã«ç¥ãããšã¯ã§ããŸããã stdoutã«ãã°ã€ã³ã§ããå Žåãã³ã³ããåã¯å€±ãããŸãã ãã®ããã-nameããŒã䜿çšããŠå®è¡äžã®ã³ã³ããã®ååãäºåèšå®ããããã«ãããååã§æäœã§ããŸãã
ã³ã³ãããªã¹ãïŒ
docker ps
ã³ã³ãããåé€ããã«ã¯ïŒ
docker rm <container>
ããŒã0.6ããŠããããã¯ãã¹ãŠå€åœã®ã³ã³ããã§ãããã©ããã£ãŠãŒãããèªåã®ãã®ãäœãããšãã§ããŸããïŒ
ã³ã³ãããäœæããã«ã¯ããã«ãã¡ã«ããºã -docker buildããããŸãã Dockerfileã®åœä»€ã»ããã䜿çšããŠãç¬èªã®ã€ã¡ãŒãžãæ§ç¯ããŸãã å éšã«ã³ã³ãããæ§ç¯ãããšããshã·ã§ã«ã䜿çšãããã³ãã³ããå®è¡ãããŸãã
次ã®ããšãç¥ã£ãŠããå¿ èŠããããŸãã
- å®äºããåã³ãã³ã-ãã®ã³ãã³ãã«ãã£ãŠçæãããå€æŽã®çµæã§ãã¡ã€ã«ã·ã¹ãã ã¬ã€ã€ãŒãäœæããŸãã ã€ãŸã ããšãã°ãapt install htopã³ãã³ããå®è¡ãããšããã®ã³ãã³ãã®å®è¡çµæïŒãã€ããªãã©ã€ãã©ãªãªã©ïŒãå«ãã¬ã€ã€ãŒãäœæãããŸãã æçµçã«ããã®ãããªåã¬ã€ã€ãŒã¯äºãã«éãåããããå ã®ïŒãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã€ã¡ãŒãžïŒã«éããããæçµçµæãåŸãããŸãã ããã«ãããããã€ãã®å¶éãçããŸãã
- ã¬ã€ã€ãŒã¯äºãã«ç¬ç«ããŠããŸãã ããã¯ãã³ã³ããå ã®ãã«ãããã»ã¹äžã«å®è¡ããããµãŒãã¹ã¯ãããèªäœã®ã¬ã€ã€ãŒå ã«ã®ã¿ååšããããšãæå³ããŸãã é¡èãªäŸã¯ãmysqlã§ããŒã¿ããŒã¹ããã£ã±ãã«ããè©Šã¿ã§ãã ããã¯éåžžã©ã®ããã«èµ·ãããŸããïŒ mysqlãµãŒããŒãèµ·åãã次ã®ã³ãã³ãã§ããŒã¿ããŒã¹ã«å ¥åããå¿ èŠããããŸãã ããã¯ãããã§ã¯æ©èœããŸããã mysqlã®èµ·åçµæïŒãã°ãªã©ïŒãä¿åããã¬ã€ã€ãŒãäœæãããmysqlãçµäºããŸãã 次ã®ã¬ã€ã€ãŒïŒããŒã¹ãã£ã«ã³ãã³ãã®å®è¡æïŒã§ã¯ãããã¹ã«ã¯èµ·åãããªããªãããšã©ãŒãçºçããŸãã ãã®åé¡ã®è§£æ±ºçã¯ã&&ã䜿çšããŠããŒã ãçµ±äžããããšã§ãã
- 3ïŒãã ããæ°žç¶ããŒã¿ã¯æåã®ã³ãã³ãããæåŸã®ã³ãã³ããŸã§äºãã«éãåããããã¬ã€ã€ãŒããšã«æ°žç¶çã«ä¿åãããŸãã ãããã£ãŠãæåã®ã³ãã³ãã§ãã¡ã€ã«ãäœæãããšãæåŸã®ã³ãã³ãã§ã¢ã¯ã»ã¹ã§ããŸãã
ããŒã0.7æåŸã«ããããã¯Dockerã®æ¹æ³ã§ã¯ãããŸããã
Dockerã¯ããã«ãå ã®ã»ãšãã©ã®ãã¿å±€ã§ãã ããã«ãåæ¢ããã³ã³ããã®æãæ®ãããšãã§ããŸãã 1ã€ã®ã³ãã³ãã§ãã¹ãŠãåé€ãã
docker system prune
ããã¯æž¯æ¹ŸåŽåè ã®æ¹æ³ã§ã¯ãããŸããã
ããã«ãŒã¯ãèšèšäžã1ã€ã®ããã»ã¹ïŒä»»æã®æ°ã®åå«ãå«ãïŒãä»®æ³åããŸãã ãã¡ããã1ã€ã®ã³ã³ããã«10åã®ããã»ã¹ãè©°ã蟌ãããšãéªéããããšã¯ãããŸããã
ããã¯ãããšãã°ã¹ãŒããŒãã€ã¶ãŒã䜿çšããŠå®è¡ã§ããŸãã
ããããããªãã¯èšãã圌ãã®ãã¹ãŠã®äººçãäžç·ã«ãªããå ±æãããã¹ãã§ã¯ãªããµãŒãã¹ã«ã€ããŠã¯ã©ãã§ããïŒ åå人ãdrugugçšã«çæããã³ã³ãã³ãã䜿çšããŸããïŒ
ãããçŸããæ£ç¢ºã«è¡ãããã«ãdocker-composeããããŸã-ããã¯ãã³ã³ããã®Nãšãã®é¢ä¿ãèšè¿°ããyamlãã¡ã€ã«ã§ãã 亀差ããã³ã³ãããçžäºã«éãããŒããå ±æããããŒã¿ã
äœæã®å Žåãå®éã«ã¯ãããžã§ã¯ããç°¡åã«ç®¡çã§ããŸãã ããšãã°ãnginx + uwsgi + mongoãã³ãã«ã¯3ã€ã®ã³ã³ããã§ãããnginx以å€ã®ãŠãŒã¶ãŒã¯uwsgiã«ãmongo以å€ã®ãŠãŒã¶ãŒã¯mongoã«è¡ããŸããã ãããŠã圌ãã¯åžžã«äžç·ã«äœãã§ããŸãã ïŒããã¯ãã©ã€ããŒãã±ãŒã¹ã§ãïŒã ããã§ã¯ã次ã®ç¶æ³ãçºçããŸã-ã¢ããªã±ãŒã·ã§ã³ïŒapiïŒã¯é »ç¹ã«æŽæ°ãããŸã-ããªãã¯ãããæ¯æ¥æžããŠããã·ã¥ããŸãã ãŸããããšãã°ãnginxãŸãã¯mongodbã®ãªãªãŒã¹ã¯ã¯ããã«å°ãªãé »åºŠã§è¡ãããŸãããããã1ãæãããã«é·ããªããŸãã ã§ã¯ãå€æŽããã¹ãŠ1ãæã§çºçãããã³ã«ããªããã®ééçŽãæ§ç¯ããã®ã§ããããïŒ nginxãæŽæ°ãããšããæ¥ãããã¿ã°åãšãããžã§ã¯ãã®åæ§ç¯å šäœãå€æŽããnginxã§æ°ããã³ã³ãããããŠã³ããŒãããã ãã§ãã
ããŒã1ïŒç·Žç¿ã¯ãã€ã§ããïŒ
ãã®æ®µéã§ãã³ã³ããã«è§ŠããŠå¿ èŠãªã³ãã³ããæããããšãã§ããŸãã ç§ã¯ãæåã§ãã¥ãŒããªã¢ã«ããããŒã ãé転ããããšã®ãµããŒã¿ãŒã§ãã ãããã£ãŠãã¹ã¯ãªãŒã³ã·ã§ããã®ã¿ã
1. debianã€ã¡ãŒãžãããŠã³ããŒãããŠã¿ãŸããã
![ç»å](https://habrastorage.org/webt/9f/pq/je/9fpqjemaarlnz2smq4gzpye_6i4.png)
2.äœãèµ·ãã£ãã®ãèŠãŠã¿ãŸãããã ç§ã®å Žåããã£ã«ã¿ãŒã«debianãšããåèªã䜿çšããŸããã ããããªããšãä»ã®ç»åã®æãçµè«ã«èœã¡ãŠããŸããŸãã 䜿çšããå¿ èŠã¯ãããŸããã ãã®çµæãç°ãªãã¿ã°ãæã€2ã€ã®åäžã®imageidããããŸãïŒæåã®2ã€ããããŸãïŒã
Z.Y. æªæ¥ãžããã«ã¡ã¯ïŒ debian10ã«äœãã§ããŠãã®èšäºãèªãã§ãã人ã«ãšã£ãŠã¯ãç§ã®ãã®ãšåãçµæã«ã¯ãªããªãã§ãããã çç±ããç解ããã ããã°å¹žãã§ãã
![](https://habrastorage.org/webt/63/sw/gf/63swgfgljzxsoo6qzr4gbvkyldi.png)
3. debianïŒstretch imageå ã§bashããã»ã¹ãå®è¡ããŸãã ãã®pidãèŠãŠãã ãã-ããã¯1ã«çããã§ãã ããªãã¡ ãããç§ãã¡ãèžã£ãŠããäž»ãªããã»ã¹ã§ãã 泚æããŠãã ãã-ps auxãç°¡åã«å®è¡ã§ããŸããã§ãã-ã³ã³ããã«å¿ èŠãªããã±ãŒãžããããŸããã aptã䜿çšããŠãéåžžã©ããé ä¿¡ã§ããŸãã
![](https://habrastorage.org/webt/kf/2y/ar/kf2yard1a0ntvyt9sjq41typ7sy.png)
4.ã³ã³ãããçµäºãïŒexit | Ctrl + DïŒãbashã®åèµ·åãè©Šã¿ãŸã-ããã¯äžéšã³ã³ãœãŒã«ã«ãããŸãïŒã¹ã¯ãªãŒã³ã·ã§ãããç°¡åã«ããããã«ãå¥ã®ã³ã³ãœãŒã«ãéãããšãã§ããŸãïŒã äžéšã®ãŠã£ã³ããŠã§-å®è¡äžã®ã³ã³ããã®ãªã¹ããåç §ããŠãã ãã
![](https://habrastorage.org/webt/_b/1t/vz/_b1tvzdpmmhm7q9mx-yla-szpjc.png)
ããïŒ procpsã¯ã©ãã«è¡ããŸãããïŒ ã¯ãã©ãã«ããããŸããã 圌ã¯ããã«ããŸããã§ããã ã€ã¡ãŒãžãåèµ·åãããšãã«ãã€ã³ã¹ããŒã«ãããããã°ã©ã ãªãã§åããã£ã¹ãã䜿çšããŸããã ãããŠãç§ãã¡ã®ä»äºã®çµæã¯ã©ãã«è¡ããŸãããïŒ ãããŠããã«åœŒã¯åãã€ããŠãã-çµäºç¶æ ã§ã 以åã«ç«ã¡äžããŠåŸã§åæ¢ããä»ã®ã³ã³ããã®æã®ããã«ã
![](https://habrastorage.org/webt/rn/c7/ef/rnc7efey8tt92u28amu4toggiqm.png)
ããã¯ãã¹ãŠãŽãã§ãã ããããããã¯ãŸã 埩掻ããããšãã§ããŸãïŒ
1.æåã®ã¿ãŒããã«ã§ã³ã³ãããçµäºããŸã
2. 2çªç®ã®ã¿ãŒããã«ã§ãã³ã³ããã®IDãã³ããŒããŸããããã¯ãåæ¢ãããã®ãšããŠtimeshtampã«ãã£ãŠé©åã§ã
3. 1ã€ã®ã¿ãŒããã«ã§ãstartã³ãã³ãã§ãã®ã³ã³ãããèµ·åããŸãã 圌ã¯ããã¯ã°ã©ãŠã³ãã«è¡ã
4. 2çªç®ã®ã¿ãŒããã«ã§ãå®è¡äžã®ã³ã³ããã®ãªã¹ãã確èªããŸããã¿ã€ã ã¹ã¿ã³ããŸã§ã«ã7ç§éå®è¡ãããŠããã³ã³ããã¯æããã«ç§ãã¡ã®ãã®ã§ãã
5.è³ãåããŸãã execã³ãã³ãã䜿çšããŠæ¢ã«å®è¡äžã®ã³ã³ãããŒã«æ¥ç¶ãã2çªç®ã®bashã€ã³ã¹ã¿ã³ã¹ãå®è¡ããŸãã
6. ps auxãå®è¡ããŸã-æåã®bashã¯pid 1ãšãšãã«ååšããããšã«æ³šæããŠãã ããã ã³ã³ããå ã§pid = 7ã®bashã䜿çšããŠç®¡çããŸãã ãããŠä»ãå€ã«åºãã°ã³ã³ããã¯çããŸãã
![](https://habrastorage.org/webt/iq/tk/0v/iqtk0vd9z5-akk-1h71ysjjteya.png)
ã ããïŒ
run -Xã®ã€ã¡ãŒãžãååŸããããã»ã¹Yã§ã³ã³ãããŒZãäœæããŸã
exec-ã³ã³ãããŒZãååŸãããã®äžã®ããã»ã¹Nãéå§ããŸãããããã»ã¹Yã¯ä»¥åãšåæ§ã«æ©èœããŸãã
çµè«ïŒ
1ïŒä»®æ³åããããã»ã¹ã®ã¿ãçããŠããå Žåãã³ã³ããã¯ããã¯ã°ã©ãŠã³ããšãã©ã¢ã°ã©ãŠã³ãã®äž¡æ¹ã§çããããšãã§ããŸãã
2ïŒã³ã³ããã¯ã€ã¡ãŒãžãããããã€ãããã€ã³ã¹ã¿ã³ã¹ã§ã
3ïŒããŒã¿ãæ倱ããããšãªãã³ã³ãããåæ¢ããã³èµ·åã§ããŸãïŒãã ãã䟡å€ã¯ãããŸãããããã¯docker-wayã§ã¯ãããŸããïŒ
ããŒã2ïŒç¬èªã®dockerã€ã¡ãŒãžãäœæãã
dockerfileã®äœ¿çšæ¹æ³ãåŠç¿ããŸãã
以äžã«2ã€ã®éçºã¢ãããŒãã瀺ããŸãã
1ïŒæºåãæŽããŠèªåèªèº«ã匱äœåããã
2ïŒæåããèªåã§è¡ã
æåã®ãªãã·ã§ã³ã¯ããã¹ãŠã®äœæ¥ãå®å šã«å®äºããŠããããšã確信ããŠããå Žåã§ãã ããšãã°ãnginxã§æ¢è£œã®å ¬åŒã³ã³ãããå ¥æã§ããã®ã«ããªãnginxãã€ã³ã¹ããŒã«ããã®ãã ããã¯ãåãããŒã ã«æå±ããŠããªãã·ã¹ãã ããããšãã°ãdebianã§ã¯å€ãããŒãžã§ã³ããããããã«ãŒããã§ã¯ææ°ã®å®å®ããã·ã¹ãã ã§æ§ç¯ãããŠããã·ã¹ãã ã«ç¹ã«åœãŠã¯ãŸããŸãã ããã«ãèªåã¢ã»ã³ããªã¯ãã§ã«è¡ãããŠããŸã-æ°ããããŒãžã§ã³ãããã«å°çããŸãã
2çªç®ã®ãªãã·ã§ã³-ããªãã¯åŠæ³çã§ããããç»åã®äœè ã®ã¢ãããŒãã奜ãã§ã¯ãããŸããïŒäŸãã°ãå ¬åŒã®ãã®ã¯ãããŸããã§ããããVasya Pupkinã®ããã«ã®ã¿ãããŸããïŒã 誰ãã¯ã·ãªãŒããããã©ã®ããã«ããããæ°ã«ãããããããèªåã§è¡ã£ãŠãã ããããŸãããŸãã¯ãjenkinsã§debããã±ãŒãžããã«ãããããã®dockerã€ã¡ãŒãžãªã©ãç¬èªã®ããžãã¯ãäœæããå Žåã¯ãã©ãã«ãèŠã€ãããŸãããããããããã¯éåžžã«äŸ¿å©ã§ãïŒ
Dockerfileã¯ãæå®ããã€ã¡ãŒãžã®ã¯ãªãŒã³ã³ã³ããã§å®è¡ãããäžé£ã®åœä»€ãå«ããã¡ã€ã«ã§ãããåºåã§ã¯ã€ã¡ãŒãžãååŸãããŸãã
æå®ããå¿ èŠãããæãéèŠãªããšã¯ãFROMããã³CMDãã£ã¬ã¯ãã£ãã§ãïŒååçã«ã¯ãå¿ ãããããã§ã¯ãããŸããïŒããã®ãããªãã¡ã€ã«ã®äŸã瀺ããŸã
![](https://habrastorage.org/webt/cj/fr/of/cjfrofsisd3mxqe165ybgklo9mu.png)
ãFROM-åºç€ãšããŠäœ¿çšããã€ã¡ãŒãžã
MAINTAINERã¯ããã®éçºã®äœæè ïŒãã®æ°ããã€ã¡ãŒãžã®äœæ¥ãéå§ãã人ïŒã§ã
ãRUNã¯ãã³ã³ãããŒå ã§å®è¡ãããã³ãã³ãã§ãããããã«åºã¥ããŠæ°ããã€ã¡ãŒãžãååŸãããŸãã泚æããŠãã ãã-éåžžã®bash転éãš&&-ã³ãŒããèªã¿ããããçŸããããŸãã
ãŸããããžãã¯ãèšè¿°ããããã«ãå°ãªããšã10åã®RUN-ã³ãã³ãïŒãã ãããããããæ°ããè¡ïŒãèšè¿°ããããšãã§ããŸãã
EXPOSE-docker-composeã䜿çšããå Žåãã©ã®ããŒãã§ãã©ã®ãããã³ã«ã§ã³ã³ãããŒã®å€éšããã¢ã¯ã»ã¹å¯èœã«ãªããŸããããã§èŠããŠããå¿ èŠãããã®ã¯ãããã¯ããã«å©çšã§ãããšããæå³ã§ã¯ãªãããšã§ããã€ãŸãã€ãŸããhostïŒcontainer mappingã䜿çšããŠãã®ããŒãã®ãããã³ã°ãéå§ãããŸã§ãäžã«å ¥ãããšã¯ã§ããŸããããããã£ãŠãã©ã®æ®µéã§ã©ã®ããŒããç»é²ããããç¥ãå¿ èŠããããŸãïŒ
1ïŒã³ã³ãããŒå ã§ãã¢ããªã±ãŒã·ã§ã³ã¯0.0.0.0:80ããªãã¹ã³ããŸãïŒãããŠåžžã«0.0.0.0 !!!ãlocalhostã«ãã€ã³ãã§ããŸãã-ãã®æ¹æ³ã§ã¢ããªã±ãŒã·ã§ã³ã¯å€éšããã¢ã¯ã»ã¹ã§ããªããªããŸãïŒã mysqlã«é¢ããŠãã§ããã³ã³ããã®èµ·åæã«ãããã³ã°ãæå®ãããŸã§ã誰ãã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ããªãããšã«æ³šæããŠãã ããã
2ïŒdocker run -p 80:80 image
ãããŠããã®æ¹æ³ã§ã®ã¿-ããŒã80ã®ãã¹ããåç §ããŠãããŒã80ã®ã³ã³ããã«ãããããŸããã³ã³ãããèµ·åãããšãããã®ããŒãã¯éããŠããŠãã³ã³ããå ã§ã¢ããªã±ãŒã·ã§ã³ã¯ããŒã80ããªãã¹ã³ããŸãããããã£ãŠããã¹ãããŒã80ããã¢ããªã±ãŒã·ã§ã³ã®80ããŒãã«è»¢éãããŸããåœç¶ãããŒãã¯ã©ãã§ãäœæã§ããŸãããã®ãããnginxãå éšã§ããŒã80ããªãã¹ã³ããŠããå€ãã®ã³ã³ãããŒãèµ·åã§ããå€éšããã®ãããã³ã°ã¯æ¬¡ã®ããã«å®è¡ã§ããŸãïŒ8000ïŒ80ã8001ïŒ80ã8002ïŒ80 ...ãªã©ãã¢ã€ãã¢ã¯æ確ã§ãããããã£ãŠã1ã€ã®æ§æã§1ã€ã®ã€ã¡ãŒãžãäœæãããããè€æ°å䞊è¡ããŠç¬ç«ããŠå®è¡ã§ããŸãã
CMD-ãããéèŠãªå Žæã§ããããã¯ãã³ã³ããã®èµ·åæã«å®è¡ããããã®éãã£ãšæ©èœããã³ãã³ãã§ããã¯ãèŠããŠããŸããïŒããã»ã¹ã®å®è¡äžãã³ã³ããã¯åç¶ããŸããããã§ã®ã¢ãããŒãã¯systemdã®å Žåãšåãã§ã-ããã»ã¹ã¯ããã¯ã°ã©ãŠã³ãã«ç§»è¡ããªãã§ãã ãã-å¿ èŠã¯ãããŸãããããã»ã¹ã¯ãã®ã³ã³ããå ã§1ã€ã ãã§ãããããã£ãŠããšããã§ããã®ã³ã°ãžã®ããŸããŸãªã¢ãããŒããããšãã°ãåºåãSTDOUTãŸãã¯ãã°ã«æ®ãããšãã§ããŸããäž»ãªããšã¯ãéå§åŸã®ããã»ã¹ïŒã¡ã€ã³ããã»ã¹ïŒãã©ã€ãã®ãŸãŸã§ããããšã§ãããã©ãŒã¯ãã©ãŒã¯ã¯å¥œããªã ã䜿çšã§ããŸãã
CMDã«å ããŠãå¥ã®ã¿ã€ãã®ã·ã£ãŒãããºã ããããŸã-ENTRYPOINTãããã¯éåžžãCMDå€ãåŒæ°ãšããŠåãåãã·ã§ã«ã¹ã¯ãªããã§ãã
次ã®ããšãèŠããŠããå¿ èŠããããŸã
ã1ïŒã³ã³ããã§ããã»ã¹ãéå§ããæåŸã®ã³ãã³ã= sum ENTRYPOINT + CMDã
2ïŒãšã³ããªãã€ã³ããšcmdã®çµã¿åããã®ä»»æã®ããªã¢ã³ããdockerãã¡ã€ã«ã«æžã蟌ãããšãã§ããŸã-ã©ã¡ããäžæ¹ããŸãã¯äž¡æ¹ãäžåºŠã«æ®ããŸãã
äŸïŒ
ENTRYPOINT ["/entrypoint.sh"]
CMD ["haproxy"ã "-c"ã "/etc/haproxy/haproxy.conf"]
åèšãã³ã³ãããèµ·åãããšã次ã®ã³ãã³ããèµ·åãããŸã
ãsh -c "/entrypoint.sh haproxy- c /etc/haproxy/haproxy.conf "ã
ã¹ã¯ãªããå ã§ãããã®åŒæ°ãã©ããããã¯ãããªãã決ããã®ã¯ããªã次第ã§ãã
ãªããã®è€éããå¿ èŠãªã®ã§ããïŒé©ä»»è ã¯ãšã³ããªãŒãã€ã³ããäœæããŠãããããæ©äŒãæããã«ããŸããçŽç²ã«èªåã§ã€ã¡ãŒãžãäœæããå Žåã¯ãçŽç²ã«CMDã1ã€ã ãæ®ããENTRYPOINTããŸã£ããäœæããªãã§ãã ããã
ã·ããªãª1ïŒ
åŒæ°ãªãã§ã³ã³ãããŒãèµ·åããïŒ
docker run haproxy
ã¯ENTRYPOINT + CMDãå®è¡ããŸãïŒ
sh -c "/entrypoint.sh haproxy -c /etc/haproxy/haproxy.conf"
ã©ã¡ããã³ã³ããã«çž«ãä»ããããŠããŸãã entrypoint.shã¹ã¯ãªããã§ã¯ãäœæè ã¯æ¬¡ã®ããžãã¯ãäœæããŸãããæåã®åŒæ°ãhaproxyã®å Žåãhaproxy = haproxy -db -W $ @ããããŠãçµæãå®è¡ããŸãããã®çµæã次ã®ã³ãã³ããèµ·åãããŸãã
haproxy -db -W -c /etc/haproxy/haproxy.conf"
ã·ããªãª2ïŒ
åŒæ°ãæå®ããŠã³ã³ãããŒãéå§ã
ãŸããdocker run haproxy bash
where bash-dockerfileããã®CMDã³ãã³ãããªãŒããŒã©ã€ãããŸãããã®çµæãENTRYPOINT + CMDã¯ä»¥äžãæäŸããŸãïŒ
sh -c "/entrypoint.sh bash"
èè ã®ããžãã¯ã«ããã°ãæåã®åŒæ°ãïŒ= Haproxyã®å Žåããã®ããã»ã¹ãéå§ããã ãã§ãããã®çµæãã³ã³ãããåçŽã«ã·ã§ã«ã«å ¥åããŸãã
ã·ããªãª3ïŒ
ç§ã¯é©åãªå Žæã§èšå®ã䜿çšããŠhaproxyã®èµ·åãæå®ããŸãã
docker run haproxy haproxy -c /opt/haproxy.conf
ããã§ãæåã®haproxyã¯ã€ã¡ãŒãžã®ååã§ããããã®åŸãã«ããã®ã¯å åŽã«æž¡ãããåŒæ°ã®ã¿ã§ãã CMDãåå®çŸ©ãããšãçµæã¯æ¬¡ã®ããã«ãªããŸã
ãsh -c "/entrypoint.sh haproxy -c /opt/haproxy.conf"
ãããŠãã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã
haproxy -db -W -c /opt/haproxy.conf"
ããã¯ãå ¥åãæäœããããšã§ã§ããããšã®åå§çãªäŸã§ãã ENTRYPOINTãšCMDã®çµã¿åãããããŸããŸã«äœ¿çšããããã®å€æ°ã®ã·ããªãªãæ€èšã§ããŸãã Dockerfileã«ã¢ã¯ã»ã¹ã§ããªããšã³ããŠãŒã¶ãŒã§ã³ã³ãããèµ·åããæ¹æ³ãããã€ãæäŸã§ããããšãèŠããŠãããŠãã ããã
瀺ããã³ãã³ãã«å ããŠãä»ã«ãå€ãã®ã³ãã³ãããããŸããããšãã°ãADDãCOPY-ã³ã³ãããŒå ã«ããŒã¿ã»ãããé 眮ã§ããŸãããŸããADDãã¢ãŒã«ã€ãããœãŒã¹ãšããŠæå®ãããšãæå®ããå Žæã«ã³ã³ãã³ããå±éããŠé 眮ããŸãããŸãã«ããå€æŽãããªããã¡ã€ã«ã®ã»ããã«äŸ¿å©ã§ãã
Dockerfileå ã®é åºã¯éèŠã§ãïŒ ïŒæé©åã®èŠ³ç¹ããïŒ
Dockerfileã«å€æŽãå ãããã®åŸã€ã¡ãŒãžãåæ§ç¯ãããšãå€æŽã®éå§å ã®ã³ãã³ãã»ããã«åœ±é¿ããŸãã
äŸïŒ
COPY config config RUN apt install 100500-programms-pack
æ§æã®å°ãªããšã1ã€ã®æåãå€æŽãããšã100500ããã°ã©ã ã®ããã¯ãã€ã³ã¹ããŒã«ãããã³ã«äœåºŠãåŒã³åºããŸãããããããããã®è¡ãéã®é åºã§é 眮ãããŠããå Žåããã«ãã¯ã»ãŒç¬æã«è¡ãããŸã-ãªããªã ãããã®ããã°ã©ã ãå«ãã¬ã€ã€ãŒã¯æ¢ã«ååšããŸãã
ããŒã3ïŒFSã³ã³ãããŒãšãã¹ãã®éä¿¡
ããã§ã¯ãã³ã³ãããããã¹ãOSã®ããŒã¿ã«ã¢ã¯ã»ã¹ããæ¹æ³ãèŠãŠã¿ãŸããããããã«ã¯ããã€ãã®çç±ããããŸãïŒãã¡ã€ã«è»¢éãèšå®ããŸãã¯åã«åŠçãããããŒã¿ããã£ã¹ã¯ã«ä¿åãããåã«è¿°ã¹ãããã«ãã³ã³ããããªãã«ããå Žåã®ããã«ããŒã¿ã¯æ¶ããŸãããããããã¯ãã®ã³ã³ããã«æ®ããŸããåŸã§ããããåŒãåºãããšã¯äžå¿ èŠã§æããªäœæ¥ã§ãã Docker Way-ã³ã³ãããŒå ã«ãã¹ããã£ã¬ã¯ããª\ãã¡ã€ã«ãããŠã³ãããŸããããã«ç°¡åãªå Žåã¯ãå€éšã®ãã©ã«ããŒ\ãã¡ã€ã«ãå éšã®ãã©ã«ããŒ\ãã¡ã€ã«ã«ãããã³ã°ããŸããããã¯ããŠã³ãã§ãããããäžæ¹ã®å€æŽã¯åžžã«ä»æ¹ã«è¡šç€ºãããŸãããããã£ãŠããã¹ãOSããæ§æã«å€æŽãå ããããšã«ãããã³ã³ãããŒå ã®ãµãŒãã¹ã®åäœãå€ããããšãã§ããŸãããŸãããã®é-ãã¹ãäžã®ããŒã¿ããŒã¹ããå³å¯ã«å®çŸ©ããã䟿å©ãª1ã€ã®å Žæã«ä¿åããŸãããŸãã¯ãã°ã
ãã®ããšã¯-vã¹ã€ããã§è¡ãããŸãïŒ
-v /source/folder:/destination/folder -v /path/to/file:/path/to/config
ãã®å Žæã§ã¯ã䟿å©ãªäººãžã®å¥ã®ãªã³ã¯ãã€ãŸããç°¡åãªèª¬æä»ãã®dockerããŒã ã®èšäºã³ã¬ã¯ã·ã§ã³ãæäŸã§ããŸãã ã¿ã€ã
å Žåã«ãã£ãŠã¯ãèšå®ãããç°å¢å€æ°ã転éããæ¹ãç°¡åã§ãããããŠãDockerã䜿çšãããšãDockerfileïŒENVããŒ=å€ïŒã§ãã«ãçšã«é ç·ãããã³ã³ãããŒãèµ·åãããšãã«ããŒãä»ããŠãããã³ãã®ãããªå€æ°ãå€æ°ããå Žåã¯å¥ã®ãã¡ã€ã«ãä»ããŠé ç·ã§ããŸãã
ããŒã4ïŒãµãŒãã¹ã®äŸ¿å©ãªã©ã³ãã£ãŒ
ãã§ã«ããã€ãã®ã³ã³ãããèªåã§æ§ç¯ããŠããå Žåãåé¡ãçºçããŸããã©ã®ããã«åªåããã«ããããèªåçã«èµ·åã§ããŸããïŒçãã¯ç°¡åã§ã-systemdãéããŠïŒ
ããšãã°ããã¡ã€ã«ãäœæããŸãã
# >/etc/systemd/system/my-project.service # systemctl daemon-reload # systemctl edit --full my-project.service
ãããŠããã«è¡ã眮ããŸãïŒ
[Unit] Description=my first docker service Requires=docker.service After=docker.service [Service] Restart=always RestartSec=3 ExecStartPre=/bin/sh -c "/usr/bin/docker rm -f my-project 2> /dev/null || /bin/true" ExecStart=/usr/bin/docker run --rm -a STDIN -a STDOUT -a STDERR -p 80:80 -v /etc/my-project/:/etc/my-project --name my-project:2.2 ExecStop=/usr/bin/docker stop my-project [Install] WantedBy=multi-user.target
ããã§æ³šæãã¹ãããšïŒ
ExecStartPre-ã¹ã¿ãŒãã¢ãã\åèµ·åã§å®è¡ãããmy-projectãšããååã®äœããã®é害ã³ã³ãããçªç¶ãã£ãå Žåã«åŒ·å¶çµäºããã³ãã³ããããŠãããªãã¯ãããã©ãããæ¥ãã®ãïŒã°ãªãããæ²ãã£ãæïŒã決ããŠç¥ããªã-ãã®ã©ã€ã³ã§ããããã«ãããç§ãã¡ã¯ãããéå§ããããšã劚ãããã®ãæã¡è² ããããããã«ããã³ãã³ããç©æ¥µçã«çµäºããŸãã
--rm-ããŒã䜿çšãããšãã³ã³ãããåæ¢ããåŸã«åé€ã§ããŸãããµãŒãã¹ãåæ¢ããåŸããŽãã¯æ®ããŸãã
--name my-project-ã³ã³ããã®åå
-a STDIN -a STDOUT -a STDERR-stdã«ã¢ã¿ãã*-ããã»ã¹ã®å ¥å/åºå/ãšã©ãŒãããŒã«æ¥ç¶ããŸããããã¯ã°ã©ãŠã³ãã§ã¯ãããã¯ãã°ã«æžã蟌ãŸããªããã¹ãŠã®ãã®ãsystemd
-p log-ã³ã³ãããŒå ã®ãã¹ã->ããŒã80ã®0.0.0.0:80ã«ãããã³ã°ãããããšãæå³ããŸã
-v-ãã©ã«ããŒã
ããŒã®æ§æã«ãããã³ã°ããŸãããã€ãã®ç°ãªãããŒããæå®ã§ããŸããç¹ã«ããããã³ã«ïŒtcpãŸãã¯udpïŒãæå®ã§ããŸããããã©ã«ãã¯tcpã§ãã
ä¿åããŠãéããŠãå®è¡ããŸãïŒ
systemctl restart my-project.service && journalctl -u my-project.service --no-pager -f
ããã§ããµãŒãã¹ãéåžžã®systemdããŒã¢ã³ãšããŠç®¡çããjournalctl-ããŒã¢ã³ã®æšæºåºåã確èªããŸãã
ããŒã5ïŒçŸå®ã«è¿ã¥ããã€ã³ãã©ãæ§ç¯ãã
次ã®åæäŸããããŸãïŒ
send.py-> rabbitmq-> read.py
ããªãã¡3ã€ã®ã³ã³ããããããæåã®ã³ã³ãããã¿ã¹ã¯ããã¥ãŒã«å ¥ããæåŸã®ã³ã³ãããèªã¿åããè¡ããŸãããããã¯ãã¹ãŠsystemdã§ç®¡çãããŸãã
sender.pyã¯5ç§ããšã«1ã7ã®ä¹±æ°ããã¥ãŒã«å ¥ããã¯ãŒã«ãŒïŒreceiver.pyïŒã¯ãã®çªå·ãèªã¿åããåä¿¡ããæ°å€ãšçããã¢ã€ãã«ç§æ°ã§äœæ¥ãã·ãã¥ã¬ãŒãããŸãã
ãã€ã¯ããµãŒãã¹ãé©åãªäººãè¡ãããã«ããããšããŸã-ãµãŒãã¹ã³ãŒãã¯ã³ã³ããå ã«ãããèšå®ãšãã°ã¯å€éšã«ãããŸããããã«ãããæ°ããã³ã³ãããäœæããã«ãã¥ãŒã¢ãã¬ã¹ããã°ã€ã³ããã¹ã¯ãŒããªã©ãå€æŽã§ããŸãããã¡ã€ã«ãä¿®æ£ããŠã³ã³ãããåèµ·åããã ãã§ãããããã£ãŠã/ etcããã³/ var / logã«ãã£ã¬ã¯ããªãå¿ èŠã§ããããããããã°ãšèšå®ããããã³ã°ããŸããäžè¬ã«ããã®ã¢ãããŒãã¯äŸ¿å©ã§ãã 1ã€ãŸãã¯è€æ°ã®ãã€ã¯ããµãŒãã¹ãè¿ãã«å ±åã§ããããã«ãŒãåãããµãŒããŒã«ã¢ã¯ã»ã¹ãããšãæ§æãŸãã¯ãã°ãæ¢ãå Žæãåžžã«ããããŸãããããŠæãéèŠãªããšã¯ããµãŒããŒãå®å šã«ã¯ãªãŒã³ã§ããããšã§ãã ssh yes dockerãä»ã«äœãå¿ èŠã§ããïŒ ïŒãã¡ãããããšãã°ç£èŠãµãŒãã¹ããããããªã©ãå€ãã®ãã®ããããŸããããµãŒãã¹ã«äŸåãããã¹ãŠã®èŠçŽ ããã§ã«åãé€ããŠããŸãããããŠæãéèŠãªããšã¯ããµãŒãã¹ããã¹ãOSã«äŸåããªããªã£ãããšã§ãããµãŒããŒå šäœãDebianäžã«çœ®ããã³ã³ããå ã«äœã§ãå ¥ããŸããã¯ãããããã®åãè°è«ã¯ä»®æ³åã«ã€ãªãããŸãããããã§ã®è©±ã¯ã¯ããã«è»œéã§ããä»®æ³åãããOSå šäœã§ã¯ãªãããµãŒããŒå šäœã«ããŒã«ããã©ãã°ããŠããããïŒ
1. RabbitMQ
RabbitMQã¯ãã¢ããªã±ãŒã·ã§ã³éã®ã¡ãã»ãŒãžã³ã°ãããŒãžã£ãŒã§ãããã®å Žåãããªããã£ããã¥ãŒã䜿çšãããŸããã¿ã¹ã¯ã¯ãã®ãã¥ãŒã«é 眮ãããã¯ãŒââã«ãŒã«ãã£ãŠåãå ¥ããããŸããã³ã³ããå ã§ããŒãã³ãŒããããã¥ãŒèšå®ãæ§æããŸããåèšã§ãrabbitmqãã©ã«ããŒã«3ã€ã®ãã¡ã€ã«ïŒDockerfileãšconfigsã®2ã€ã®ãã¡ã€ã«ïŒããããŸãããããã®å 容ã¯ãªã¹ãã®äžã®ãã¿ãã¬ã§ããjsonãã¡ã€ã«å®çŸ©ã§ãã¥ãŒããŠãŒã¶ãŒãã¢ã¯ã»ã¹æš©ãèšå®ããŸãã
mkdir -p ~/Documents/my_project/{sender,receiver,rabbitmq} cd ~/Documents/my_project/rabbitmq ## , ( ) docker build -t rabbitmq:1.0 . >/etc/systemd/system/my_project-rabbitmq.service ## systemd systemctl edit --full my_project-rabbitmq.service ## systemctl start my_project-rabbitmq ## docker ps systemctl status my_project-rabbitmq
/etc/systemd/system/my_project-rabbitmq.service
[Unit] Description=my first docker service Requires=docker.service After=docker.service [Service] Restart=always RestartSec=3 ExecStartPre=/bin/sh -c "/usr/bin/docker rm -f rabbitmq 2> /dev/null || /bin/true" ExecStart=/usr/bin/docker run --rm -a STDIN -a STDOUT -a STDERR -p 5672:5672 --name rabbitmq rabbitmq:1.0 ExecStop=/usr/bin/docker stop rabbitmq [Install] WantedBy=multi-user.target
ã/ããã¥ã¡ã³ã/ my_project / rabbitmq / rabbitmq.conf
management.load_definitions = /etc/rabbitmq/definitions.json
ã/ããã¥ã¡ã³ã/ my_project / rabbitmq / definitions.json
{"rabbit_version":"3.7.2","users":[{"name":"username","password_hash":"P2bFyWm2oSwuzoRDw37nRYgagL0ciZSGus3kYnkG1aNaUWeD","hashing_algorithm":"rabbit_password_hashing_sha256","tags":""},{"name":"guest","password_hash":"SjeLNFEWLHwuC5QRAaZIF/SX/uMasQFyt5+dELgKK03TgsC8","hashing_algorithm":"rabbit_password_hashing_sha256","tags":"administrator"}],"vhosts":[{"name":"virtualhost"},{"name":"/"}],"permissions":[{"user":"guest","vhost":"/","configure":".*","write":".*","read":".*"},{"user":"username","vhost":"virtualhost","configure":".*","write":".*","read":".*"}],"topic_permissions":[],"parameters":[],"global_parameters":[],"policies":[],"queues":[],"exchanges":[],"bindings":[]}
ã/ããã¥ã¡ã³ã/ my_project / rabbitmq / Dockerfile
FROM rabbitmq:management ADD rabbitmq.conf /etc/rabbitmq/rabbitmq.conf ADD definitions.json /etc/rabbitmq/ RUN chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf /etc/rabbitmq/definitions.json CMD ["rabbitmq-server"]
2.ã¡ãã»ãŒãžã®éä¿¡è
cd ~/Documents/my_project/sender ## sender.py Dockerfile, docker build -t sender:1.0 . >/etc/systemd/system/my_project-sender.service ## systemd systemctl edit --full my_project-sender.service ## systemctl start my_project-sender ## docker ps systemctl status my_project-sender
/etc/systemd/system/my_project-sender.service
[Unit] Description=my first docker service Requires=docker.service After=docker.service [Service] Restart=always RestartSec=3 ExecStartPre=/bin/sh -c "/usr/bin/docker rm -f sender 2> /dev/null || /bin/true" ExecStart=/usr/bin/docker run --rm -a STDIN -a STDOUT -a STDERR -v /etc/my_project/sender:/etc/my_project/sender --name sender sender:1.0 ExecStop=/usr/bin/docker stop sender [Install] WantedBy=multi-user.target
sender.py
# -*- coding: utf-8 -*- import pika, yaml, base64, time, random config_file = open("/etc/my_project/sender/sender.yaml","r") config = yaml.load(config_file) pika_username = config["rabbitmq"]["username"] pika_password = base64.b64decode(config["rabbitmq"]["password"]) pika_addr = config["rabbitmq"]["host"] pika_port = config["rabbitmq"]["port"] pika_virtualhost = config["rabbitmq"]["virtualhost"] pika_queue = config["rabbitmq"]["queue"] def send_message_rabbitmq(message="Hello World!"): credentials = pika.PlainCredentials(pika_username, pika_password) parameters = pika.ConnectionParameters(pika_addr, pika_port, pika_virtualhost, credentials) connection = pika.BlockingConnection(parameters) channel = connection.channel() channel.queue_declare(queue=pika_queue, durable=True) channel.basic_publish(exchange='', routing_key=pika_queue, body=message, properties=pika.BasicProperties( delivery_mode=2, )) connection.close() while True: send_message_rabbitmq(str(random.randint(1,7))) time.sleep(5)
ã/ããã¥ã¡ã³ã/ my_project / sender / Dockerfile
FROM debian:stretch RUN apt-get update > /dev/null && apt-get -y -q install \ python3-pip > /dev/null RUN pip3 install pika pyyaml COPY sender.py /opt/ CMD ["/usr/bin/python3", "/opt/sender.py"]
/etc/my_project/sender/sender.yaml
-- rabbitmq: username: username password: MTIzNDU2Nzg5MA== host: 192.168.136.181 port: 5672 virtualhost: virtualhost queue: queue
3.åä¿¡è -ãŸãã¯ç§ãã¡ã®å€åãªåŽåè ã
cd ~/Documents/my_project/receiver ## receiver.py Dockerfile, docker build -t sender:1.0 . >/etc/systemd/system/my_project-sender.service ## systemd systemctl edit --full my_project-sender.service ## systemctl start my_project-sender ## docker ps systemctl status my_project-sender
/etc/systemd/system/my_project-receiver.service
[Unit] Description=my first docker service Requires=docker.service After=docker.service [Service] Restart=always RestartSec=3 ExecStartPre=/bin/sh -c "/usr/bin/docker rm -f receiver 2> /dev/null || /bin/true" ExecStart=/usr/bin/docker run --rm -a STDIN -a STDOUT -a STDERR -v /etc/my_project/receiver:/etc/my_project/receiver --name receiver receiver:1.0 ExecStop=/usr/bin/docker stop receiver [Install] WantedBy=multi-user.target
/etc/my_project/receiver/receiver.yaml
--- rabbitmq: username: username password: MTIzNDU2Nzg5MA== host: 192.168.136.181 port: 5672 virtualhost: virtualhost queue: queue
ã/ããã¥ã¡ã³ã/ my_project / receiver / receiver.py
# -*- coding: utf-8 -*- import pika, yaml, base64, time log_file = open("/var/log/my_project/receiver/receiver.log","a") config_file = open("/etc/my_project/receiver/receiver.yaml","r") config = yaml.load(config_file) pika_username = config["rabbitmq"]["username"] pika_password = base64.b64decode(config["rabbitmq"]["password"]) pika_addr = config["rabbitmq"]["host"] pika_port = config["rabbitmq"]["port"] pika_virtualhost = config["rabbitmq"]["virtualhost"] pika_queue = config["rabbitmq"]["queue"] credentials = pika.PlainCredentials(pika_username, pika_password) parameters = pika.ConnectionParameters(pika_addr, pika_port, pika_virtualhost, credentials) connection = pika.BlockingConnection(parameters) channel = connection.channel() channel.queue_declare(queue=pika_queue, durable=True) print(' [*] Waiting for messages. To exit press CTRL+C') def callback(ch, method, properties, body): print(" [x] Received %r" % (body,)) #this goes to stdout print("[x] Received %r" % (body,), file=log_file) #this goes to log file time.sleep(int(body.decode('ascii'))) channel.basic_ack(delivery_tag = method.delivery_tag) channel.basic_qos(prefetch_count=1) channel.basic_consume(callback, queue=pika_queue) channel.start_consuming()
ã/ããã¥ã¡ã³ã/ my_project / receiver / Dockerfile
FROM debian:stretch RUN apt-get update > /dev/null && apt-get -y -q install \ python3-pip > /dev/null RUN pip3 install pika pyyaml RUN mkdir /var/log/receiver COPY receiver.py /opt/ CMD ["/usr/bin/python3", "/opt/receiver.py"]
ãããè³ãåŸããŠèŠãŠãã ãããèšå®ããããã©ã¡ãŒã¿ãŒã¯ãã©ã€ã³ããããäžããã¯ãŒã«ãŒã®èœåãè¶ ããŠããŸããé£ã®åŽåè ãšäžç·ã«å¥ã®æž¯æ¹ŸåŽåè ãæã¡äžããŠã圌ããã©ã®ããã«ãããäžããããè³è³ããŠãã ãããã¹ã±ãŒã©ããªãã£ã¯äžèŠç°¡åã§ããåŽåè ãå¥ã®å Žæã«ç§»åããŸã-ãããŠåœŒã¯ããããã©ã€ã³ãããéããŸããäž»ãªãã®ã¯ãããã¯ãŒã¯æ¥ç¶ã§ãã
ããŒã6ïŒçŸå®
ã»ãšãã©ã®å Žåããã©ã¡ãŒã¿ãæåã§éžæããå¿ èŠããããŸããç¹ã«ãå®æãããããžã§ã¯ããdockerã«è»¢éããå Žåããã°ãæžã蟌ãå Žæãæ§æãã¡ã€ã«ã®å ŽæããããŠã³ã³ããããåé€ã§ããããã«æ§æãã¡ã€ã«ãäœæããæ¹æ³ã«è»¢éããå¿ èŠãããããŒãã培åºçã«ææ¡ããå¿ èŠããããŸãããããŠæãéèŠãªã®ã¯ããããäœã§ããããããªãã®ãµãŒãã¹ãã©ã®ã³ã³ããŒãã³ãã§æ§æãããŠãããã§ãïŒ Dockerfileã䜿çšããããšã®åªããç¹ã®1ã€ã¯ãç®ã®åã«äžé£ã®æ瀺ããããã€ã¡ãŒãžãå®æåã®ç¶æ ã«ããããšã§ãããµãŒãã¹ã®ã€ã³ã¹ããŒã«ãansible \ puppet \ chefã®ãããªèªåæ§æã·ã¹ãã ã«ç»é²ãããŠããªãå Žåãé«ã確çã§ããããè¡ãæ¹æ³ã«ã€ããŠã®å®å šãªæ瀺ããããŸãããçªç¶è¿ãã«ããã€ãã®ãµãŒãã¹ããã£ãå Žåã¯ããã«ããã§ããããããå ±æããããšã¯ãšãŠã楜ããã§ãïŒãŸãããµãŒãã¹ã®ããã±ãŒãžããŒãžã§ã³ãžã®äŸåã¯ãããšã話ã«ãããŸãããã¯ãã人ã ã¯virtualenvã®ãããªãã®ãæãã€ããŸãããããã¹ãŠãããªããããã£ãããšåé¢ãããŠãããšããããã¯ã¯ããã«æ¥œããããšãèªããªããã°ãªããŸããã
æ®å¿µãªããããã®äžçã§ã¯ãã¹ãŠããããã«ãŒããã§æ¢è£œã®ã€ã¡ãŒãžãååŸããŠäœ¿çšããã»ã©ã¹ã ãŒãºã§ã¯ãããŸãããäžèšã«å ããŠããµãŒãã¹ãéå§ããæ¹æ³ãéžæããå¿ èŠããããŸããããšãã°ã/ etc / init.d / uwsgi startãªã©ã¯æ©èœããªããªããŸãããªãã§ïŒuwsgiãdockerã«ããã·ã¥ããããšããç§ã®å°ããªæŽå²ã以äžã«ç€ºããŸãã
Dockerã§uwsgiãå®è¡ããå Žåãæ£ç¢ºã«2ã€ã®åé¡ããããŸããäž¡æ¹ãšãäœæè ã®åæåã¹ã¯ãªããã«ãããŸãã
1ïŒ/etc/init.d/uwsgi startã¯ãšã©ãŒã§å€±æããŸãããã®ããã«ãç®±ããåºããŠããã«ããœãŒã¹ã«é£ã³èŸŒã¿ãåé¡ãæ¢ãå§ããŸãããã®ã³ãã³ãã®å®è¡ã«ãããŸãã
start-stop-daemon --start --quiet \ --pidfile "$PIDFILE" \ --exec "$DAEMON" \ --test > /dev/null \ && return 2
ãã®æ®µéãŸã§ã¯ããã¹ãŠãæ£åžžã«æ©èœããããã»ã¹ãéå§ãããŸããæãéèŠãªã®ã¯ãinitã¹ã¯ãªããã倱æããåŸã§ãåäœãéå§ããããšã§ããåé¡ã¯ãDockerå ã§/ proc / {id} / exeãèªã¿åãæš©å©ããªãããšã§ãããã®åŸãããã»ã¹ããªããšã¿ãªãããèšå®ãããåäœã«åŸã£ãŠããªã¿ãŒã³ã³ãŒã0ãçºè¡ãããæ¡ä»¶ãæ£ã§ãããã€ãŸãæ£ããéšå&&ãå®è¡ãããçµæãšããŠããªã¿ãŒã³ã³ãŒã2ïŒãªã¿ãŒã³2ïŒãå ã®é¢æ°ã«çºè¡ãããèµ·åãšã©ãŒãçºçããŸãïŒããã¯äœæè ã«ãã£ãŠå®ããããŸããïŒ ïŒããŸããŸãªãœãããŠã§ã¢ãèµ·åãããšãã®ãã®æšªæ£ã«é¢ããè°è«ã¯ã14æ³ããç¶ããŠããŸãïŒgithub.com/moby/moby/issues/6800ã
åé¿çïŒ
ãã®ã¿ã¹ã¯ã®ããã«ããã€ãã®ãœãªã¥ãŒã·ã§ã³ãéžæããŸãããããããã®ãã¹ãŠãæåŸã®ãã®ã»ã©è¯ããããŸããã
aïŒ--startasã®--execããŒã®äžã«ããã³ãŒãã®/ usr / share / uwsgi / init / specific_daemonãã¡ã€ã«ãä¿®æ£ããŸããããã«ãããšïŒããããåè«ã§ããããã«ãããšåãããã«åäœããããããã©ãŒã©ã ã«ãããšïŒstartasã¹ã€ããã䜿çšãããšã/ proc / {id} / exeãã§ãã¯ã¯ã¹ããããããããã»ã¹ããã®pidã§å®è¡ãããŠãããã©ããããã§ãã¯ãããŸãã ïŒhttps://chris-lamb.co.uk/posts/start-stop-daemon-exec-vs-startasïŒbïŒ
ããŒ--cap-add = SYS_PTRACEã§ã³ã³ãããŒãèµ·åããŸãããã®å Žåãç·šéããå¿ èŠã¯ãããŸããã
cïŒauthor initã¹ã¯ãªããã䜿çšããªãã§ãã ããã
2ïŒ/etc/init.d/uwsgi startãå®è¡ããåŸãã¹ã¯ãªããã¯æ£åžžã«åäœããŠçµäºããŸããDockerã¯ãã®åŸèªç¶ã«çµäºããŸãïŒçç±ãèŠããŠããŸããïŒïŒãããã«ãæªéã¯èµ·åã¹ã¯ãªããã®äœæè ã«ãã£ãŠããŒãã³ãŒããããŠãããèšå®ã§å¿ èŠãã©ãããæå®ããããšã¯ã§ããŸããããã®æç¹ã§ãç§ã¯ãŸã ã³ã£ããããŠæåã«èµ·åã¹ã¯ãªãããä¿®æ£ããŸãããããããåäœããæ¹æ³ã§ã¯ãªãããšã«æ°ã¥ãã1ã€ã®èµ·åã©ã€ã³ãš1ã€ã®èšå®ãã¡ã€ã«ãå®è¡ããã ãã§ãããããããããªããã°ãªããŸããã§ããã
ãã®çµæãäœãè¡ããããïŒ
1ïŒä»¥äžã®ãã©ã¡ãŒã¿ãŒïŒããã³ããã©ã«ãæ§æã®æ®ãã®ãã©ã¡ãŒã¿ãŒïŒãæ§æã«è¿œå ãããŸããã
... stats = 0.0.0.0:9090 socket = 0.0.0.0:3031 pidfile = /run/uwsgi/pid socket = /run/uwsgi/socket ...
2ïŒDockerfileå ïŒ
... COPY app.ini /etc/uwsgi/apps-enabled/app.ini RUN mkdir /run/uwsgi && chown www-data /run/uwsgi CMD ["/usr/bin/uwsgi", "--ini", "/etc/uwsgi/apps-enabled/app.ini"]
ãããã£ãŠãã¢ã€ãã 1ãšã¢ã€ãã 2ã®æªéåããŒãããã®å·Šã®ãã§ãã¯ãåãé€ããæš©å©ãèšå®ããèªåã§pid \ socketãé 眮ããŸãã
ããã«ãéåžžã®ã³ãã¥ããã£ç·šéããã«ãŒã¯ã»ãã¥ãªãã£ã«ã€ããŠç¹ã«èããŠããŸãããã³ã³ããå ã§æŽæ°ããããšã¯ã§ããŸããïŒåèµ·åãããšãã¹ãŠã倱ãããŸãããããã£ãŠããã®åé¡ã¯ããããã®èªå·±æçŽãŸãã¯éçºã¢ãããŒãã®ããããã«ãã£ãŠè§£æ±ºãããŸããæ°ãããœãããŠã§ã¢ããŒãžã§ã³ãéåžžã«é »ç¹ã«å ¬éãããå Žåãææ°ããŒãžã§ã³ã§ã³ã³ãããæ§ç¯ãããœãããŠã§ã¢å šäœãæŽæ°ããŸãã
Dockerã«ã¯ããã€ãã®åé¡ããããŸãããããã®ããã€ãã¯ãæœè±¡åã®è¿œå ã¬ãã«-kubernetes \ docker swarmã«ãã£ãŠè§£æ±ºã§ããŸãããŸããkubernetesãä»ããŠãèµãåãããšãã§ããŸããäœåã¯ééããªãã¯ãŒã«ã§ãããããã¯å¥ã®è©±ã§ã;ïŒ...
ãµããä¹ ãã¶ãã§ããDockerã®äœ¿çšæ¹æ³ã®ããäžéšã«ã€ããŠèª¬æããããšããŸãããã³ã³ããåã®ç¯å²ã¯ã¯ããã«åºãã§ãã
èªãã§ãããŠããããšãïŒã³ã¡ã³ããææ¡ãåŸ ã£ãŠããŸãããããŠãç§ã¯æ¯æ¥ã®ç®¡çæ å ±ãç§ã®é»å ±ãã£ã³ãã«ã«å ¬éããŠããŸãã