ãã®èšäºã¯äžæžãäŸé€ Advent Calendar 2018ã®05æ¥ç®ã®èšäºã§ãã
ãšããããã§å ¬éã¯2018幎12æ05æ¥ã§ãããæžããã®ã¯2017幎06æã§ããèšäºã®æ¥ä»ã¯åŸè ã®æ¹ãèšå®ããŸãããã¡ãªã¿ã«éå¬ã¯ããã¡ãã£ãšåã§2017幎04æã§ããããããã æ æ°ã
åœæ¥å©çšãããªãœãŒã¹çŸ€ã¯ãã¡ãã«ãŸãšãŸã£ãŠãŸãã
ã¡ãªã¿ã«WordPressãããªããã®åã®éã library/wordpress
ãšããDockerå
¬åŒã€ã¡ãŒãžãå
¬éãããŠãã®ã§ããã£ã¡äœ¿ãæ¹ã楜ã ãšæããŸãã
ïŒä»¥äžãäžæžãã®ç¶æ ã§ãã£ããã®ãæžãããã£ãŠãã£ãœãã®ã§ãã®ãŸãŸãïŒ
åœæ¹åå¿è ãªãã ãã©ããŸããã«ãã£ãŠã人ãå°ãªããŠãå©çšè ãå¢ããããããªãŒããã§ãã£ãŠèª°ã詳ãããªã£ãŠããã«æããŠãããããããªãŒãããã®æãã§ãããŸããã
æ¬åœã¯è©³ãã人ã«ãæ¥ãŠããã£ãŠé§ç®åºãããã€ã€é²è¡ãããã£ããã ãã©ãæ¥çšãåããŸããã§ãããå ã«ãã£ã¡åãããšãã£ãŠããã
ãšããããã§ããã£ãå å®¹ãæžããŠãããŸãããå©ç¹ã«ã€ããŠãâãåèªãšç¥èãâãæãåããããšããæµãã§ãã
Dockerãšã¯äœã
端çã«èšããšã
- ä»®æ³ãã·ã³ã§ãã
- ä»®æ³ãã·ã³ãããªãã§ãã
ã䜿ããåŽãããããšèªåã®ãã·ã³ïŒç©çïŒã®äžã«å¥ã®ãã·ã³ãä»®æ³çã«çšæãããŠããã®äžã§è²ã èµ°ã£ããããããŒã£ãŠããæããå®éã¯ãä»®æ³ãã·ã³ããšåŒã°ããæè¡ãšã¯å¥ç©ã§ãä»®æ³ããŒããŠã§ã¢ããã£é£ã°ããŠçŽæ¥ç©çãªãœãŒã¹ã䜿ããšããªããããããïŒéãïŒããããããã
ããšã³ã³ãããå°åãã«ããŠã£ãŠããã®ãVMæ¹é¢ã«ã ãæ £ããŠããšããã«ã¯åºãŠããªãçºæ³ããªãŒãšæãã
äœãå¬ããã®ã
VMã§ãäœã§ããããã ãã©ãåºæ¬çã«ã¯ãã¹ããã·ã³ãšåããŠç°å¢ãäœããå¬ãããšãããã®ããããšæã£ãŠãŸããã»ãæ±æãšãããŒãžã§ã³ç®¡çãšããã
éçºè åãã«ã¯
- éçºç°å¢ãç°¡åã«çšæã§ãã
- å®éãããªæé
git clone
docker-compose up
- ãã£ãã
- ãããªã
- Node.js, Ruby, Python, etcã®ã€ã³ã¹ããŒã«
- Sass, Babel, Rails, image magic, etcã®ã€ã³ã¹ããŒã«
- ãŠã§ããµãŒãã®èšå®
- ãããã¯ãŒã¯ã®èšå®ïŒãã¶ãïŒ
誰ããDockerç°å¢ãçšæããŠãããŠããŠãããã䜿ããšããç¶æ³ã§ãã
ããŒã¿ããŒã¹ã®çšæãšãã gem install sass
ãšããããããèšèªç°å¢ã®çšæãšãããããã®ããã£é£ã°ããŠãäžçºã§watchãšãããŒã«ã«ãµãŒããšããèµ·åã§ããŸãã
DockerèªäœãWin/Macãšãã«GUIã§ã€ã³ã¹ããŒã«ã§ããã®ã§ãæºåã®é£æåºŠã¯äœãããšæã£ãŠãŸããïŒã§ãWindowsã ãšHyper-Vãå¿ é ã ã£ããããã®ããªïŒãèªåã¯å ã 䜿ã£ãŠãããåšããçMacãªãã§èª¿ã¹ãŠãªããïŒ
äžäœéçºè ã«ã¯
ä»åºŠã¯Dockerç°å¢ãçšæããåŽã®ã²ãšãMakefileãšãnpm scriptãçšæãããããã®äººéã
- ç°å¢ã®è©³çŽ°ãææžåããã
- ç°å¢ãä»ã®äººãšå ±æã§ãã
- éå»ã«äœã£ãç°å¢ãåå©çšãããæ¡åŒµãããã§ãã
èªåã®ãã·ã³ã«ãœã¡ãœã¡ã€ã³ã¹ããŒã«ããŠç°å¢äœã£ãŠããããããä»ã®éçºè ã«ã䜿ã£ãŠãããããšãããšãå²ãšé¢åãããã£ãããããããªãããã詊è¡é¯èª€ããŠããšææžåããã®åå«ã ãã
ããããã®ãå
šéš Dockerfile
ãš docker-compose.yml
ã«æ®ãã®ã§ããããŒãšããããã£ãŠã©ããã£ãŠå
¥ãããã ã£ãïŒããããããå
¥ããã£ãïŒãã¿ãããªã®ããªããªããŸããææžã«æ®ã£ãŠããã®ã§ãç°å¢ã®å
±æã¯ãã®ãã¡ã€ã«ãå
±æããã ãã§äºè¶³ããŸããïŒãã¹ã¯ãŒããšãã®ç§å¿æ
å ±ã«ã€ããŠã¯å¥éã«ããŠãè¯ããããïŒ
ããšã¯åŸãã倿Žãããæ¡åŒµãããããæ®ã£ãŠãã®ã§ãããã¯ãã
ã¢ããã³ã«ã¯
ãµãŒãã®ç®¡çè ãããšãã
- éçºç°å¢ãç°¡åã«çšæã§ãã
- æ¬çªç°å¢ãç°¡åã«çšæã§ãã
- ç°å¢ãç°¡åã«è€è£œã§ãã
ããã蟺ã¯å®å šã«æ³åã§ãã
æ¢åãããžã§ã¯ã
ãDockeråããããšãã§ããã®ã§ã¯ã
- äŸåããã±ãŒãžã®ã€ã³ã¹ããŒã«ãäžèŠã«
- grunt, gulp, rails, etc
- ãããžã§ã¯ãã®ãã£ã¬ã¯ããªã®å€ããããããã§ãã
ãããžã§ã¯ãã /home/ginpei/myproject
ã«ãã£ããšããŠã /home/ginpei/myproject-docker
ã¿ãããªã®ãçšæããŠãã£ã¡ã«Dockerç³»ãã¡ã€ã«ã眮ããããšãããŠãæ¢åã®ãã®ã¯æ¢åã®ãŸãŸã«ããŠããã°ãç°¡åã«ã§ããã®ã§ã¯ãªããïŒãšæããŸããã
ã§ãå®éãã£ãŠã¿ããå¥ã®åé¡ããã£ãŠãã¡ãããšã§ããã®ãããããŸããâŠâŠããšãã話ãããŸããããªããwatchãããŸãåããªãã£ããã ãã©ããŸããã®è©±ã¯ãããã
䜿ã£ãŠã¿ãã
ã¯ãŒã¯ã·ã§ããåã«ç¥èã®æŽçãããŸããã
䜿ãå Žå
Dockeræ¬äœã®ã€ã³ã¹ããŒã«ã¯å¥ã«ããŠã
- ãã¡ã€ã«çŸ€ãããŠã³ããŒã
git clone
- ã³ã³ããäœæ
docker-compose up
ã§ãããã
â»ãã ãçæ³çãªç°å¢ã«éã
äœãå Žå
Dockerfile
ã§ã³ã³ãããçšædocker-compose.yml
ã§ã³ã³ãã矀ã飿ºdocker-compose up
ã§èµ·å
ããã ãèšã£ãŠããããããšæããã©ãããããæµãã§ãã
åèª
- ã³ã³ãã ⊠仮æ³ãã·ã³å®äœçãªãå®éã«åããã®ãäœã£ãŠæšãŠã
- ã€ã¡ãŒãž ⊠ISOã€ã¡ãŒãžçãªãã³ã³ããã®çŽ ãããŠã³ããŒãããŠãããäœãã
- docker ⊠ã€ã¡ãŒãžããã³ã³ãããäœæããã³ãã³ã
- docker-compose âŠ è€æ°ã®dockerã³ãã³ãããŸãšããŠãã£ãŠãããã³ãã³ã
- ããªã¥ãŒã âŠ èšæ¶é åãã³ã³ãããäœããªãããŠãæ¶ããªã
ã³ã³ãã vs ã€ã¡ãŒãžã¯ãOOPã®ã¯ã©ã¹ vs ã€ã³ã¹ã¿ã³ã¹ã«è¿ãããªãšæã£ãŠãŸãã
ãã¡ã€ã«
Dockerfile
- ãã·ã³ã²ãšã€åïŒã€ã¡ãŒãžïŒã®èšå®
- Linuxã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ãšã
- ã€ã³ã¹ããŒã«ããããã±ãŒãžãšã
docker-compose.yml
- ãã·ã³éã®ç¹ããã®æå®ãšã
- ããŒã¿å°çšãã·ã³ãšã
- ç°¡åãªãã·ã³ã®èšå®ãšã
- å®ãã·ã³ãžã®é²åºã®èšå®ãšã
- ãã·ã³éã®ç¹ããã®æå®ãšã
- ãã®ä»
- Nginxã®èšå®ãã¡ã€ã«ãšã
ã¯ãŒã¯ã·ã§ãã
ããâã«åœæ¥äœ¿çšãããã€ãæ®ã£ãŠãŸãã
çšæããç°å¢ã¯ãããªã®:
all/
⊠ããŠã³ããŒãããçšã«è²ã æžããã ãphp/
⊠PHP + Nginx + MySQLrails/
⊠Ruby on Railsweb-front/
⊠gulp + sass + browser-syncwordpress/
âŠ åœæ¥çã§äžç·ã«äœã£ããã€
æåã« all/
ã§ docker-compose up
ããŠããããšãäžéãã®ã€ã¡ãŒãžãéã£ãŠããŸããçã§äžæã«ãããšãããã¯ãŒã¯ãã€ããããªã®ã§ãåèªèªå®
ã§ãã£ãŠããŠããããŸããã
php
, rails
, web-front
ã¯ãã¡ããçšæããç°å¢ã䜿ã£ãŠã¿ãããšãããã€ã§ããã ãããäœãããªããŠããããã«äœããèµ·åããŸãâŠâŠãšããããã«ã¯ãããªããŠã rake db:migrate
ãšã npm install
ãšããå¿
èŠã§ããä»åã¯ããã¯ããããããã ãšããããšã«ããŠãã£ãŠããããŸããã
æåŸã wordpress
ã¯èªåã§ docker-compose.yml
ãã¯ããåçš®èšå®ãæžããŠãç°å¢ãäœãããäœéšãããã€ã§ããæ§æã¯ã ããã php
ãšäžç·ã
ãã®ä»è©±ããããš
ã³ã³ãããå°åãã«ãã
Vagrantã ãšå šéšå ¥ãã®ãã·ã³ãçšæããŠæ®éã«ïŒå®ãã·ã³ãšåæ§ã«ïŒããããããæããªãã ãã©ãDockerãªããã³ã³ããäºã ã®æè¡å€§ç³»ã§ã¯ã°ãã°ãã«çšæããŠãããããã¯ãŒã¯ã§ç¹ããŠãããã¿ãããªæãããããççµåã£ãŠèšããã®ããªã
å šéšå ¥ãã«ããªãå©ç¹ã¯ããããã£ãŠãªãã§ããäžçªå€§äºãªãšãããªãã ãããã©ããã¶ããã€ã¡ãŒãžåæ§ç¯ã®ã³ã¹ããæžãããšããããããšãããªã®ããªã£ãŠæ³åããŠãŸãããã®ãã¡èª¿ã¹ããå ¬åŒããã¥ã¡ã³ãã«æžããŠãã£ãã®ã¯èŠããŠãã
ããŒãžã§ã³ãåºå®ãã
ãã«ããããã³ã«ãåããç°å¢ã«ãªã£ãŠã»ããããããªã®ã§ã€ã¡ãŒãžã®ããŒãžã§ã³æå®ã« latest
ã¯ãããŸãããããšã
ã€ã¡ãŒãžãšã³ã³ããããããŠããªã¥ãŒã
ã€ã¡ãŒãžã¯ããŠã³ããŒãããŠããŠé·ãããšãã¡ã€ã«ã«ä¿åãããŸããã³ã³ããã¯äœ¿ããã³ã«æ°èŠäœæããŠã䜿ãçµãã£ããåé€ãããŸãã
OOPã§ãããšããã®ã¯ã©ã¹ãšã€ã³ã¹ã¿ã³ã¹ã¿ãããªé¢ä¿ã
åé€ããããšããããšã¯ã³ã³ããå ã§ãã¡ã€ã«ç·šéããŠãå ã«æ»ã£ã¡ããã®ã§ãç·šéãããã¡ã€ã«ã¯ããªã¥ãŒã ãšããŠæ®ããŸããããªã¥ãŒã ã«ãäºçš®é¡ãã£ãŠããã¹ããã·ã³ã®ãã¡ã€ã«ãããŠã³ãïŒããŠäœ¿ãå ŽåãšãDockerå ã§ããããšã£ãšããŠããŒãã¿ããã«æå®ããã®ãšãããã
ã€ã¡ãŒãžãšã¬ã€ã€ãŒ
ã€ã¡ãŒãžã¯ããŠã³ããŒãããŠããã ããããªããŠãèªåã§ Dockerfile
ãæžããŠäœæã§ããã
ã€ã¡ãŒãžã¯ã§ããå¡ã ãã©ãå®ã¯çããã¿ããã«è€æ°ã®å±€ããæã£ãŠãããïŒã ãããå®ã¯ docker image ls
ã§åºãŠãããµã€ãºã¯ãã£ã¹ã¯ã«ä¿åããããã¡ã€ã«ãµã€ãºãšçŽçµããªããïŒ
åºæ¬çã«ã²ãšã€ã®ã¬ã€ã€ãŒã¯ Dockerfile
ã®æç€ºäžè¡ããšã«äœæãããããªã®ã§ãäžæãã¡ã€ã«ãäœæãããããªæç€ºã¯äžè¡ã®äžã§ãã®åé€ãŸã§ããã®ã奜ãŸãããïŒäžèšã®äŸãïŒããããªãã°äžæãã¡ã€ã«ãããç¶æ
ã®äžã«åé€ããç¶æ
ã®ã¬ã€ã€ãŒããã¶ããã ããªã®ã§ãã¬ã€ã€ãŒã®ãã¡ã€ã«ãµã€ãºãã§ãããªãã
RUN apt-get update && apt-get install -y \
ruby1.9.1 \
&& rm -rf /var/lib/apt/lists/*
ããšãã¬ã€ã€ãŒãã€ã¡ãŒãžãååãä»ããŠããã©ãããéãããšèšããã£ã¡ãã£ãŠè¯ãïŒ
Dockerãããªã«ãããªããã
ã£ãŠè©±ãããã€ãå ±æããŸããã
- Dockerã®æ¬çªéçš | ã€ã³ãã©ã»ããã«ãŠã§ã¢ | POSTD ⊠æ§ã ãªç°å¢ (OS) ã§è©Šãããã©ã²ãšã€æ®ããäœãããã®åé¡ããã£ãŠã€ããããšãã話ã
- Dockerç²ä¿¡ããŠãçæ§ãž âŠ ãã£ãšè¯ãããæ¹ããã ããŒãšãã話ããç¶ããã®æ¹ãæ¬è«ã£ãœããã¯ãŠãã§åè«ãèªããã
- å®éã«éçšããŠã¿ãŠããã£ããå€§èŠæš¡Mastodonã€ã³ã¹ã¿ã³ã¹ãéçšããã³ã – pixiv inside ⊠Dockerã§ãåãããOSSãDockerãªãã§åãããã£ãŠè©±ãã€ãŸãDockerçŽæ¥é¢ä¿ãªãã§ããïŒDocker以å€ã«ãéžæè¢ã¯ãããããšããããšãèšãããã£ããïŒ
- DockerïŒãªã«ããããããã®ïŒ for ããã³ããšã³ãïŒã ãããïŒãšã³ãžã㢠– console.lealog(); ⊠ä»å web-front ãšããããšã§ãã¹ããã·ã³ã«nodeãã€ã³ã¹ããŒã«ããããšãªã gulp ãšãã¢ã¬ãããã ãã©ãçµå±ããããã®ãã€ããããã£ãŠè©±ã
話ããªãã£ãããš
åæã®éžæè¢ã¯å°ãªãæ¹ãè¯ãããšããæ¹åºæ¬éã§ããããšç¥ããªããã®ã¯ç¥ããªãã®ã§ã
ã³ã³ããåæè¡
ç¥ããªããŠã䜿ããã®ã§ç¬¬äžæ©ã§è§Šããå¿ èŠãªããããããèªèº«è©³ãããªããã
docker
vs docker-compose
composeã®èª¬æã§ã¡ãã£ãšè§Šãããããã
compose以å€ã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«
Kubernetes ãŠã®ãç±ãããããïŒãã§ããã䜿ã£ãããšãªããïŒ
Docker Hub
ã€ã¡ãŒãžã®ããŠã³ããŒãã«çµ¡ããŠã¡ãã£ãšã ãã
Moby
å¿ããŠãããŸããããã
ããã±ãŒãžã®ããŒãžã§ã³ç®¡ç
ã€ã¡ãŒãžã®ããŒãžã§ã³ãåºå®ããæ¹ãè¯ãããšãã話ã¯ãããã ãã©ãããã±ãŒãžé¡ã®ããŒãžã§ã³ã«ã€ããŠã¯è§ŠããŠãªãã£ãã¯ãã
ã§ããã®ããã±ãŒãžé¡ãåºå®åããæ¹ãç°å¢ãå®å®ãããã
Dockerfile
ã§åçŽã« apt-get
ãšããããšããã®ãšããã®ããã±ãŒãžãããŠã³ããŒãããŠããã®ã§ãäžå¹Žã¶ãã«ãã«ããããããŒã«ã®ããŒãžã§ã³ãå€ãã£ãŠãâŠâŠãšãã«ãªã£ã¡ãããããããªãããããã¯å€ãããŠæ¶ããŠããšãã
ãããã Dockerfile
ãå
±æããããšèªäœãæ¢ã«æªæã§ã誰ããã€ã¡ãŒãžãŸã§çšæããŠããããã docker-compose.yml
ã§æå®ãããã®æ¹ãè¯ãã®ã§ã¯ãªãã§ããããã
ã©ããªããããå çã
ã€ã¡ãŒãžã®é åž
åé ãšçµ¡ããŠè©±ããããªãšæããã©ãããªãã£ããDocker Hub以å€ã®å Žæã䜿ãããæ¹ãç¥ããªãããªãŒã
docker-compose run xxx
ç³»
ããã®ã³ãã³ããå ¥åããŠãã ããããšãã圢ã§ãããã䜿ã£ãŠã¯ããã£ããã ãã©ã説æã¯ãããŸãããªãã£ãããããbashã§ãããããïŒãã¿ããã«ãªã£ãŠãã¢ã¬ã ãªãŒãšæã£ãŠã
ãšã¯ãããã³ãã³ãå®è¡ããå¿
èŠãããå Žåã¯ã©ãããã®ãè¯ãã®ããªããã»ããåæèšå®ã¯å¥ã«ããŠãRoRã§ rake db:migrate
ãšãã°ãã°ãããã§ãããå¥éã·ã§ã«ã¹ã¯ãªããçãªãã®ãçšæããŠããã®ïŒ
ãã£ãŠã¿ãææ³
ãããããããžãã ã£ããã©ããã®ããã£ãã§ãã