é å»ããªãããã¯ãã·ã§ãã ãããã¯ãã¢ããªã±ãŒã·ã§ã³ ã€ã¡ãŒãžãæ§ç¯ããããã®éåžžã® Dockerfile ããµããŒãããŠããªããšããé倧ãªééããç¯ããšããã§ããã
ã«ã€ããŠè©±ããŸããã
- ç»åãåéããŠå ¬éãã
- Kubernetes ã«ã¢ããªã±ãŒã·ã§ã³ããããã€ãã
- ç¹å¥ãªããªã·ãŒã䜿çšããŠæªäœ¿çšã®ã€ã¡ãŒãžãåé€ããŸãã
ãã®ãããžã§ã¯ãã®ç念ã¯ãäœã¬ãã«ã®ããŒã«ã XNUMX ã€ã®çµ±åã·ã¹ãã ã«éããDevOps ãšã³ãžãã¢ãã¢ããªã±ãŒã·ã§ã³ãå¶åŸ¡ã§ããããã«ããããšã§ãã å¯èœã§ããã°ãæ¢åã®ãŠãŒãã£ãªã㣠(Helm ã Docker ãªã©) ã䜿çšããå¿
èŠããããŸãã åé¡ã«å¯Ÿãã解決çããªãå Žåã¯ããã®ããã«å¿
èŠãªãã®ããã¹ãŠäœæããŠãµããŒãããŸãã
èæ¯: ç¬èªã®ç»åã³ã¬ã¯ã¿ãŒ
ããã werf ã®ã€ã¡ãŒãž ã³ã¬ã¯ã¿ãŒã§èµ·ãã£ãããšã§ããéåžžã® Dockerfile ã§ã¯ååã§ã¯ãããŸããã§ããã ãããžã§ã¯ãã®æŽå²ããã£ãšèŠãŠã¿ããšããã®åé¡ã¯ werf ã®æåã®ããŒãžã§ã³ã§ãã§ã«çºçããŠããŸãã (ãã®åŸã
ã¢ããªã±ãŒã·ã§ã³ã Docker ã€ã¡ãŒãžã«æ§ç¯ããããŒã«ãäœæããŠãããšãã«ãDockerfile ãããã€ãã®éåžžã«ç¹æ®ãªã¿ã¹ã¯ã«ã¯é©ããŠããªãããšã«ããã«æ°ã¥ããŸããã
- 次ã®æšæºã¹ããŒã ã«åŸã£ãŠãå
žåçãªå°èŠæš¡ãª Web ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããå¿
èŠããããŸãã
- ã·ã¹ãã å šäœã®ã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ãã
- ã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ã©ã€ãã©ãªã®ãã³ãã«ãã€ã³ã¹ããŒã«ããŸãã
- è³ç£ãéãã
- ãããŠæãéèŠãªããšã¯ãã€ã¡ãŒãžå ã®ã³ãŒããè¿ éãã€å¹ççã«æŽæ°ããããšã§ãã
- ãããžã§ã¯ã ãã¡ã€ã«ã«å€æŽãå ããããå Žåããã«ããŒã¯å€æŽããããã¡ã€ã«ã«ããããé©çšããŠæ°ããã¬ã€ã€ãŒãè¿ éã«äœæããå¿ èŠããããŸãã
- ç¹å®ã®ãã¡ã€ã«ãå€æŽãããå Žåã¯ã察å¿ããäŸåã¹ããŒãžãåæ§ç¯ããå¿ èŠããããŸãã
çŸåšãç§ãã¡ã®ã³ã¬ã¯ã¿ãŒã«ã¯ä»ã«ãå€ãã®å¯èœæ§ããããŸããããããã¯åœåã®é¡æãšè¡åã§ããã
äžè¬ã«ãç§ãã¡ã¯ããèããã«ã䜿çšããããã°ã©ãã³ã°èšèªã§æŠè£
ããŸããã ïŒäžèšåç
§ïŒ ãããŠå®è£
ã«åããŠåºçºããŸã ç¬èªã®DSLïŒ ç®çã«åŸã£ãŠãã¢ã»ã³ã㪠ããã»ã¹ã段éçã«èšè¿°ãããããã®æ®µéã®ãã¡ã€ã«ãžã®äŸåé¢ä¿ãå€æããããšãç®çãšããŠããŸããã ãããŠãããè£å®ãã èªåã®ã³ã¬ã¯ã¿ãŒãDSL ãæçµç®æšãã€ãŸãçµã¿ç«ãŠãããã€ã¡ãŒãžã«å€ããŸããã åœåãDSL 㯠Ruby ã§äœãããŠããŸãããã
Ruby ã® dapp ã®å€ãæ§æ
YAML äžã® werf ã®çŸåšã®æ§æ
ã³ã¬ã¯ã¿ãŒã®ã¡ã«ããºã ãæ代ãšãšãã«å€åããŸããã æåã¯ãæ§æããäžæç㪠Dockerfile ããªã³ã¶ãã©ã€ã§çæããã ãã§ã次ã«äžæã³ã³ãããŒã§ã¢ã»ã³ããªåœä»€ãå®è¡ããŠã³ããããéå§ããŸããã
NB: çŸæç¹ã§ã¯ã(YAML ã§ã®) ç¬èªã®æ§æã§åäœããStapel ã³ã¬ã¯ã¿ãŒãšåŒã°ããã³ã¬ã¯ã¿ãŒã¯ããã§ã«ããªã匷åãªããŒã«ã«éçºãããŠããŸãã 詳现ãªèª¬æã¯å¥ã®èšäºã«å€ããŸããåºæ¬çãªè©³çŽ°ã«ã€ããŠã¯ã以äžãåç
§ããŠãã ããã
åé¡æè
ããããç§ãã¡ã¯ããã«ã¯æ°ã¥ããŸããã§ããããXNUMX ã€ã®ééããç¯ããããšã«æ°ã¥ããŸãããããã¯ãæ©èœãè¿œå ããªãã£ãããšã§ãã æšæºã® Dockerfile çµç±ã§ã€ã¡ãŒãžããã«ããã ãããŠããããåããšã³ãããŒãšã³ãã®ã¢ããªã±ãŒã·ã§ã³ç®¡çã€ã³ãã©ã¹ãã©ã¯ãã£ã«çµ±åããŸã (ã€ãŸããã€ã¡ãŒãžãåéããå±éããã¯ãªãŒã³ã¢ããããŸã)ã Dockerfile ãµããŒããå®è£ ããã«ãKubernetes ã§ãããã€ããããã®ããŒã«ãäœæããããšãã©ã®ããã«å¯èœã§ããããã ã»ãšãã©ã®ãããžã§ã¯ãã§ç»åãèšè¿°ããæšæºçãªæ¹æ³?
ãã®è³ªåã«çãã代ããã«ã解決çãæäŸããŸãã ãã§ã« Dockerfile (ãŸãã¯äžé£ã® Dockerfile) ããããwerf ã䜿çšãããå Žåã¯ã©ãããã°ããã§ãããã?
NBïŒãšããã§ããªãwerfã䜿ããããšæã£ãã®ã§ããïŒ äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- ã€ã¡ãŒãžã®ã¯ãªãŒãã³ã°ãå«ãå®å šãªã¢ããªã±ãŒã·ã§ã³ç®¡çãµã€ã¯ã«ã
- åäžã®æ§æããè€æ°ã®ã€ã¡ãŒãžã®ã¢ã»ã³ããªãäžåºŠã«ç®¡çããæ©èœã
- Helm äºæãã£ãŒãã®ãããã€ã¡ã³ãããã»ã¹ãæ¹åãããŸããã
ãããã®ããå®å
šãªãªã¹ãã¯ã次ã®å Žæã«ãããŸãã
ãããã£ãŠã以åã«æ§æå ã® Dockerfile ãæžãæããããšãææ¡ããŠãããšããŠããä»ã§ã¯åãã§ãwerf ã« Dockerfile ãæ§ç¯ãããŸããã!ããšèšãã§ãããã
ã©ã®ããã«äœ¿çšããïŒ
ãã®æ©èœã®å®å
šãªå®è£
ã¯ãªãªãŒã¹ã«èšèŒãããŠããŸã werf build
...ããã ãã§ã - werf ãç»åãçµã¿ç«ãŠãŸãã æœè±¡çãªäŸãèŠãŠã¿ãŸãããã
次åãçºè¡šããŸããã Dockerfile
ãããžã§ã¯ãã«ãŒãå
:
FROM ubuntu:18.04
RUN echo Building ...
ãããŠçºè¡šããŸã werf.yaml
ããã䜿çšããã®ã¯ Dockerfile
:
configVersion: 1
project: dockerfile-example
---
image: ~
dockerfile: ./Dockerfile
å
šãŠïŒ å·Š èµ°ã werf build
:
ããã«ã次ã®ããã«å®£èšããããšãã§ããŸã werf.yaml
ç°ãªã Dockerfile ããè€æ°ã®ã€ã¡ãŒãžãäžåºŠã«æ§ç¯ããã«ã¯:
configVersion: 1
project: dockerfile-example
---
image: backend
dockerfile: ./dockerfiles/Dockerfile-backend
---
image: frontend
dockerfile: ./dockerfiles/Dockerfile-frontend
æåŸã«ã次ã®ãããªè¿œå ã®ãã«ã ãã©ã¡ãŒã¿ãŒã®åãæž¡ãããµããŒãããŸãã --build-arg
О --add-host
- werf configçµç±ã Dockerfile ã€ã¡ãŒãžæ§æã®å®å
šãªèª¬æã¯ã次ã®å Žæã§åç
§ã§ããŸãã
ããã¯ã©ã®ããã«åäœããŸããïŒ
ãã«ã ããã»ã¹äžãDocker ã®ããŒã«ã« ã¬ã€ã€ãŒã®æšæºãã£ãã·ã¥ãæ©èœããŸãã ããããéèŠãªããšã¯ããŽã§ã«ãããŸãã Dockerfile æ§æãã€ã³ãã©ã¹ãã©ã¯ãã£ã«çµ±åããŸã. ããã¯äœãæå³ããã®ã§ããããïŒ
- Dockerfile ããæ§ç¯ãããåã€ã¡ãŒãžã¯ããšåŒã°ãã XNUMX ã€ã®ã¹ããŒãžã§æ§æãããŸãã
dockerfile
(werf ã«ã©ã®ãããªã¹ããŒãžããããã«ã€ããŠè©³ããèªãããšãã§ããŸã)ãã㧠). - ã¹ããŒãžçš
dockerfile
werf ã¯ãDockerfile æ§æã®å 容ã«å¿ããŠçœ²åãèšç®ããŸãã Dockerfile æ§æãå€æŽããããšãã¹ããŒãžçœ²åãå€æŽãããŸãdockerfile
ãããŠãwerf ã¯æ°ãã Dockerfile æ§æã䜿çšããŠãã®ã¹ããŒãžã®åæ§ç¯ãéå§ããŸãã 眲åãå€æŽãããªãå Žåãwerf ã¯ãã£ãã·ã¥ããç»åãååŸããŸãã (werf ã§ã®çœ²åã®äœ¿çšã«ã€ããŠã®è©³çŽ°ã¯ã次ã®ã»ã¯ã·ã§ã³ã§èª¬æãããŠããŸã)ãã®ã¬ããŒã ). - 次ã«ãåéããç»åãã³ãã³ãã§å
¬éã§ããŸãã
werf publish
ïŒãŸãã¯werf build-and-publish
) ãäœæããKubernetes ãžã®ãããã€ã¡ã³ãã«äœ¿çšããŸãã Docker ã¬ãžã¹ããªã«å ¬éãããã€ã¡ãŒãžã¯ãæšæºã® werf ã¯ãªãŒã³ã¢ãã ããŒã«ã䜿çšããŠã¯ãªãŒã³ã¢ãããããŸãã å€ãã€ã¡ãŒãž (N æ¥ããå€ã)ãååšããªã Git ãã©ã³ãã«é¢é£ä»ããããã€ã¡ãŒãžãããã³ãã®ä»ã®ããªã·ãŒã¯èªåçã«ã¯ãªãŒã³ã¢ãããããŸãã
ããã§èª¬æããç¹ã®è©³çŽ°ã«ã€ããŠã¯ã次ã®ããã¥ã¡ã³ããåç §ããŠãã ããã
泚æäºé ãšæ³šæäºé
1. å€éš URL 㯠ADD ã§ã¯ãµããŒããããŠããŸãã
çŸåšããã£ã¬ã¯ãã£ãã§ã®å€éš URL ã®äœ¿çšã¯ãµããŒããããŠããŸããã ADD
ã Werf ã¯ãæå®ããã URL ã®ãªãœãŒã¹ãå€æŽããããšãã«åæ§ç¯ãéå§ããŸããã ãã®æ©èœã¯è¿ã
è¿œå ããäºå®ã§ãã
2. .git ãã€ã¡ãŒãžã«è¿œå ããããšã¯ã§ããŸãã
äžè¬çã«ããã£ã¬ã¯ããªãè¿œå ãããšã .git
ç»åã¯æªè³ªãªæªãç¿æ
£ã§ããããã®çç±ã¯æ¬¡ã®ãšããã§ãã
- ãã
.git
æçµç»åã«æ®ããŸããããã¯ååã«éåããŸãã12èŠçŽ ã¢ã㪠: æçµã€ã¡ãŒãžã¯åäžã®ã³ãããã«ãªã³ã¯ããå¿ èŠãããããã次ã®ããšã¯ã§ããªãã¯ãã§ããgit checkout
ä»»æã®ã³ãããã -
.git
ã€ã¡ãŒãžã®ãµã€ãºãå¢å ããŸã (倧ããªãã¡ã€ã«ãäžåºŠãªããžããªã«è¿œå ããããã®åŸåé€ãããããããªããžããªã倧ãããªãå¯èœæ§ããããŸã)ã ç¹å®ã®ã³ãããã®ã¿ã«é¢é£ä»ããããã¯ãŒã¯ããªãŒã®ãµã€ãºã¯ãGit ã§ã®æäœã®å±¥æŽã«ã¯äŸåããŸããã ãã®å Žåãè¿œå ãšãã®åŸã®åé€ã¯.git
æçµã€ã¡ãŒãžããã®å€æã¯æ©èœããŸãããã€ã¡ãŒãžã¯åŒãç¶ãè¿œå ã®ã¬ã€ã€ãŒãååŸããŸããããã Docker ã®ä»çµã¿ã§ãã - Docker ã¯ãåãã³ããããç°ãªãã¯ãŒã¯ããªãŒããæ§ç¯ãããŠããå Žåã§ããäžèŠãªåæ§ç¯ãéå§ããå¯èœæ§ããããŸãã ããšãã°ãGitLab ã¯ã次ã®å Žæã«å¥ã®ã¯ããŒã³ ãã£ã¬ã¯ããªãäœæããŸãã
/home/gitlab-runner/builds/HASH/[0-N]/yourproject
䞊åã¢ã»ã³ããªãæå¹ãªå Žåã è¿œå ã®åã¢ã»ã³ããªã¯ããã£ã¬ã¯ããªã.git
åãã³ãããããã«ããããå Žåã§ããåããªããžããªã®ç°ãªãã¯ããŒã³ ããŒãžã§ã³ã§ã¯ç°ãªããŸãã
æåŸã®ç¹ã¯ãwerf ã䜿çšããå Žåã«ã圱é¿ããŸãã Werf ã§ã¯ãããã€ãã®ã³ãã³ã (äŸ: werf deploy
ïŒã ãããã®ã³ãã³ããå®è¡ãããšãwerf ã¯æå®ãããã€ã¡ãŒãžã®ã¹ããŒãž ã·ã°ããã£ãèšç®ããŸãã werf.yaml
ãããã¯ã¢ã»ã³ã㪠ãã£ãã·ã¥å
ã«ååšããå¿
èŠããããŸããããã§ãªãå Žåãã³ãã³ãã¯åäœãç¶è¡ã§ããŸããã ã¹ããŒãžçœ²åãã³ã³ãã³ãã«äŸåããå Žå .git
ãããããšãç¡é¢ä¿ãªãã¡ã€ã«ã®å€æŽã«å¯ŸããŠäžå®å®ãªãã£ãã·ã¥ãååŸãããwerf ã¯ãã®ãããªèŠèœãšããèš±ãããšãã§ããªããªããŸã (詳现ã«ã€ããŠã¯ããåç
§ããŠãã ãã)ã
äžè¬çã«ã ç¹å®ã®å¿
èŠãªãã¡ã€ã«ã®ã¿ãè¿œå ãã æ瀺ãéã㊠ADD
ãããã®å Žåã§ããææžã®å¹çãšä¿¡é Œæ§ãåäžããŸãã Dockerfile
ããŸãããã®ããã«åéããããã£ãã·ã¥ã®å®å®æ§ãåäžããŸãã Dockerfile
ãGit ã®ç¡é¢ä¿ãªå€æŽã
åèš
ç¹å®ã®ããŒãºã«åãããŠç¬èªã®ãã«ããŒãäœæããããã®æåã®éã®ãã¯ãå°é£ã§æ£çŽãã€åçŽãªãã®ã§ãããæšæºã® Dockerfile ã®äžã«æŸèæã䜿çšãã代ããã«ãã«ã¹ã¿ã æ§æã䜿çšããŠãœãªã¥ãŒã·ã§ã³ãäœæããŸããã ãããŠããã«ã¯å©ç¹ããããŸãããStapel ã³ã¬ã¯ã¿ãŒã¯ãã®ã¿ã¹ã¯ã«å®ç§ã«å¯ŸåŠããŸãã
ããããç¬èªã®ãã«ããŒãäœæããéçšã§ãæ¢åã® Dockerfile ã®ãµããŒããèŠå€±ããŸããã ãã®æ¬ é¥ã¯çŸåšä¿®æ£ãããŠãããå°æ¥çã«ã¯ãåæ£ã¢ã»ã³ããªããã³ Kubernetes ã䜿çšããã¢ã»ã³ã㪠(ã€ãŸããkaniko ã§è¡ãããããã«ãKubernetes å ã®ã©ã³ããŒã§ã®ã¢ã»ã³ããª) çšã®ã«ã¹ã¿ã Stapel ãã«ããŒãšãšãã« Dockerfile ãµããŒããéçºããäºå®ã§ãã
ãããã£ãŠãçªç¶ãããã€ãã® Dockerfile ãååšããå Žå... è©ŠããŠã¿ã
PS ãããã¯ã«é¢ããããã¥ã¡ã³ãã®ãªã¹ã
-
ã¯ã€ãã¯ã¹ã¿ãŒãã®ããã®ã¬ã€ã ; -
dockerfile ãã«ããŒæ§æ ; -
ãŽã§ã«ãã®ã¹ããŒãžè£ 眮 ; -
ç»åå ¬éããã»ã¹ ; -
Kubernetes ãããã€ã¡ã³ãããã»ã¹ãšã®çµ±å ; -
æŽæµå·¥çš ; -
Dockerfile ã®ä»£æ¿ãšããŠã® Stapel ãã«ã㌠.
ç§ãã¡ã®ããã°ããèªã¿ãã ãã:
åºæïŒ habr.com