èŠãããšãã§ããããã«https://github.com/docker/compose/issues/4315 ã extends
äžã«ååšããæ©èœdocker-compose
ãã®æ¬ é¥ã«ããããããããŠãŒã¶ãŒã®éã§äººæ°ãããããã§ãã ãã ãããããŸã§ã®ãšããããšã³ãžã³ã®Compose圢åŒã®å®è£
ã«ã¯è¿œå ãããŠããŸããã ãããŸã§ãv3ã䜿çšããå Žåã¯ãComposeãã¡ã€ã«æ§é ãåçŽã«ãã©ããåããããã«ãŠãŒã¶ãŒã«ã¢ããã€ã¹ããŠããŸããããããã¯é·æçãªè§£æ±ºçã§ããïŒ ãã®æ©èœã«äŸåããããã«ãªã£ããŠãŒã¶ãŒã«æ確ãªã¢ããã°ã¬ãŒããã¹ãæäŸããã«ã¯ã©ãããã°ããã§ããïŒ
cc @dnephin @vdemeester
ç§ã¯ããã€ãã®ã¡ã¢ãè¿œå ããŸããhttps://github.com/docker/compose/issues/4315#issuecomment-280617251ãããdockercomposeãã¡ã€ã«2.1ããŒãžã§ã³ãŸã§ååšããã®ã§æ¡åŒµãæ»ãããšã¯è¯ãèãã§ã¯ãããŸãããäž»ãªæ©èœã¯ç§ã§ããã¹ã¯ãæœè±¡ãµãŒãã¹ã宣èšã§ããããšã§ãïŒããã¯æ±ºããŠå®è¡ãããã¹ãã§ã¯ãããŸãããã䟿å®äžããµãŒãã¹ã®å ±éããããã£ãã°ã«ãŒãåããããã«äœ¿çšã§ããŸãïŒã
docker / composeïŒ4315ããã®ã³ã¡ã³ãã§ã extends
ã¯å°ãè³ªçŽ ã§ããããšã«åæããŸããã
解決çã¯ãå§ãããŸããããFWIWã¯ãæªçšã®çšåºŠã瀺ãããã«ãäœæãã¡ã€ã«ã®äžéšã食ãèŠåã次ã«ç€ºããŸãã
#
# Docker Compose configuration
#
# Due to lack of "expressivity" in Compose, we define our own couple of service
# "pseudo-types":
#
# - image-only services (name: *-image)
#
# The only goal of these is to build images. No other services build images.
#
# These have entrypoint overridden to exit immediately.
#
# - base services (name: *-base)
#
# These contain common configuration and are intended to be extended.
#
# Their command (not entrypoint, to keep the original one) is overridden to
# exit immediately. Service must support a command to exit immediately.
#
# - task services (name: *-task)
#
# These are intended for running one-off commands.
#
# Their default command is overridden to exit immediately. Service must
# support a command to exit immediately.
#
# - "real" services
#
# These are actual services that stay up and running.
#
version: '2'
services:
...
v2.1ã®ããã«æ¡åŒµããã®ã¯è¯ãéžæã ãšæããŸãã Extendsã¯å®éã«ã¯åçŽã§ç解ãããããã®ã§ããããã¯ãåç°å¢ã«ãšã£ãŠãdevãprodãenvã®éã§å°ãèªã¿ãããå€æãè¡ãã«ã¯ããŸãã«ãè¯ãç¿æ £ã§ãã
å®éãç§ã¯æã£ãŠããŸã
ããã¯æ©èœããŸãããªããã®ãã±ããã§å®å šãªæžãçŽããæ€çŽ¢ããå¿ èŠãããã®ãââããããŸããããèå³æ·±ãæ©èœãç¶æããå¿ èŠããããŸãã Extendsã¯ãä»ã®ææ³ã§ã¯ç°¡åã«è§£æ±ºã§ããªãç¹å¥ãªãŠãŒã¹ã±ãŒã¹ã®è¯ãéšåã§ãã ç§ã¯æ¡åŒµã®å¯èœæ§ã«æºè¶³ããŠããŸãã
v3.x圢åŒãžã®ã¢ããã°ã¬ãŒãããããã¯ããŸãã
Dockerã³ã³ããã®å®çŸ©ã¯ãã€ã³ã¹ã¿ã³ã¹ããšã®ãã©ã«ãã¬ã€ã¢ãŠãã«ä¿æãããŸããåãã©ã«ãã«ã¯ãæå
ã®ã³ã³ããã€ã³ã¹ã¿ã³ã¹ã®ç°å¢ä»æ§ãå®çŸ©ããdocker-compose.yml
ãå«ãŸããŠããŸãã äžè¬çãªãã®ïŒDRYïŒãé€å€ããããã«ã芪ãã©ã«ããŒå
ã®åºæ¬ãµãŒãã¹å®çŸ©ã䜿çšãã extend
ã䜿çšããŸãã
ãããã£ãŠãç¹å®ã®ã³ã³ãããŒã€ã³ã¹ã¿ã³ã¹ã管çããå¿
èŠãããå Žåã¯ãé©åãªãã©ã«ããŒã«cd
ããã ãã§ãè¿œå ã®æ§æãªãã§docker-composeã³ãã³ããçŽæ¥å®è¡ã§ããŸãïŒããŒã ã¡ã³ããŒã«-f
ãã©ã°ã¯å¿
èŠãããŸããïŒã«ãã¯ã¢ãããŸãã¯ç¥ãå¿
èŠãããããã®ãŸãŸã§æåŸ
ã©ããã«æ©èœããŸãïŒã
ããŒãžã§ã³3ã®äœæãã¡ã€ã«ã®äœ¿çšããããã¯ãããŠããŸãã
ç§ã¯services.yml
ã䜿çšããŠãµãŒãã¹ã®åºæ¬ã¬ã€ã¢ãŠããå®çŸ©ãããããéçºç°å¢ïŒäž»ã«ããªã¥ãŒã ã®è¿œå ïŒçšã«dev.services.yml
ã§æ¡åŒµããŸãããæ¡åŒµã®ïŒDRYïŒåå©çšæ§ãæ°ã«å
¥ã£ãŠããŸããè¿œå ããã ããã¯ååŒã劚ãããã®ã§ã¯ãããŸããããå¿
é ã®æ©èœããªãéããããŒãžã§ã³3ã«ç§»è¡ã§ããªããªããŸãã
ããããç§ã¯v2.1ã®ãæ¡åŒµããœãªã¥ãŒã·ã§ã³ãããé©åãªãã®ã§æ¹åããããšã«å察ããŠããŸããã æœè±¡ãµãŒãã¹ã®ãããªãã®ã¯ãããå®å šã«äœ¿çšã§ãããã匷åã«ãªãå¯èœæ§ããããŸãã
ããšãã°ïŒæœè±¡çã§ããããïŒæœè±¡ããŒã¹ãµãŒãã¹ããã¹ãéšåãå®çŸ©ããã«ããŒã«ã«ããŠã³ããã€ã³ããŸãã¯ãµãŒãã¹ã«å¿ èŠãªãããã¯ãŒã¯ãå®çŸ©ããæœè±¡ããªã¥ãŒã /ããŠã³ããã€ã³ã/ãããã¯ãŒã¯ã®ãµããŒããæ³åã§ããŸã-ã€ãŸãã掟çãµãŒãã¹ã¯/ãå®çŸ©ã§ããŸãããŠã³ã/ããªã¥ãŒã ãšãããã¯ãŒã¯ã®ãã¹ãéšåãããã¹ã/ã¹ããŒãžç°å¢ã§é©åãªãã®ã«ãããããŸãã
ããã¯ãç§ãç¥ãéãããextendsãã§ã¯ä»ã¯ã§ããªãããšã®äŸã§ãããããã€ãã®èå³æ·±ãå¯èœæ§ãéãã§ãããã
æ¡åŒµæ©èœãåé€ããŠãããŸã£ãã圹ã«ç«ã¡ãŸããã§ããã åãããªã¥ãŒã ãããããããç°å¢å€æ°ãšã©ãã«ãèšå®ãããç¶æ ã§éå§ãããå€ãã®WebãµãŒãã¹ããããŸãã ãŸããåããã«ã¹ãã§ãã¯ããªã·ãŒããããŸãã ãããŠãããŒãã¯èšããŸã§ããããŸããã åããã¹ãã§è€æ°ã®ãããžã§ã¯ããåŠçããŠããå Žåãè€æ°ã®-fãªãã·ã§ã³ã䜿çšããŠäœæãã¡ã€ã«ãçµã¿åãããã®ã¯é¢åã§ãšã©ãŒãçºçãããããªããŸãã
@ shin-ããã¯3.2ã¹ããŒãã«æ»ãããŸããïŒ
ç§ã¯æ¬åœã«ãæ¬åœã«extends
ãã¡ã€ã«åœ¢åŒã«æ»ããããšæã£ãŠããŸãã ç§ã¯ããã䜿çšããŠãå€ãã®ãããžã§ã¯ãã®æœè±¡ãµãŒãã¹ãããã«æ¹è¯ããŠããŸããã è€æ°ã®-f
ãªãã·ã§ã³ãã»ãŒæ³æ¡ã«é©åããããšã¯ç解ããŠããŸãããåžžã«æ©èœãããšã¯éããŸããã ããšãã°ãç§ã¯æœè±¡ãµãŒãã¹ã®ååããç®åã®ãããžã§ã¯ãã®ã³ã³ããã¹ãã§ããæå³ã®ããååã«å€æŽããããšããããããŸãã ããã¯ãè€æ°ã®-f
ãªãã·ã§ã³ã§çºçãããªãŒããŒã©ã€ãããµããŒãããŠããªããã®ã§ãã
ãã ãããã¡ã€ã«å
ã®æœè±¡ãµãŒãã¹ããã€ã³ã¹ã¿ã³ã¹åãããä»ã®æ¹æ³ã§ããéããæ£ç¢ºãªextends
倱ã£ãŠãããŸããŸããã
ç§ã¯å
±éã®ãµãŒãã¹ãã¡ã€ã«ãšãããæ¡åŒµããäžé£ã®ãµãŒãã¹ãåããã»ããã¢ãããæã£ãŠãããäž»ã«ããªã¥ãŒã ãå€æŽããŠããã®ã§ã extends
æ©èœã«äŸåããŠãããšæããŸãããã»ããã¢ããã説æããä»ã®è¯ãæ¹æ³ã¯ãããŸããã
--frustrated
+1
docker-composeãã¡ã€ã«ããã©ããåãããšããæšå¥šäºé
ã®èåŸã«ããããžãã¯ã¯ããããŸãããéçºãµãŒãã¹ããããžãå®çŸ©ããã³ãŒããè€æ°ã®ãããžã§ã¯ãã«è€è£œãããšããã¢ã€ãã¢ã¯å¥œãã§ã¯ãããŸããã ä»ã®ãšãããã·ã§ã«ã¹ã¯ãªããã§-fåé¿çã䜿çšããŠãéçºè
ãã©ã®ãµãŒãã¹ãã©ã®å Žåã«å«ããããèŠããŠããå¿
èŠããªãããã«ããŸãã
æ§ææ§é ã®ããè¯ããã¡ã¯ã¿ãªã³ã°ãå¯èœã«ããæºè¶³ã®ãã解決çãããã«èŠã€ããããšãé¡ã£ãŠããŸãïŒ
ç§ã®ãŠãŒã¹ã±ãŒã¹ãªã¹ãã®äžçªäžã«ããã®ã¯ãæ§æ管çãããäžé£ã®ãµãŒãã¹ããã©ã€ã¢ããããããšã§ãã v3ã®å Žåããextendsããå©çšã§ãããšæããŸããã v2ã«æ»ããããããŸãã...ãããŠ-fããã»ã¹ã®åé¿çã䜿çšããªããã°ãªããªãç¹å¥ãªå Žåã¯ããããããŸããã
ããã誰ããããã«åãçµã¿å§ããŸãããïŒ è¿œè·¡ããPRãèŠã€ãããŸããã ããã§ãããã€ãã®ããšãç°¡åã«ãªããŸãïŒäžèšã®ãŠãŒã¹ã±ãŒã¹ãšéåžžã«ãã䌌ãŠããŸãïŒã
ããŒãžã§ã³3ãããªãŒãºããŠããŠãå ±éã®æ§æãå ±æããæ¹æ³ãå¿ èŠã ã£ãã®ã§ãããã§å ±æã§ãããšæãå°ããªåé¿çããããã³ã°ããŸããïŒãããé©åãªå Žæãã©ããã¯ããããŸããããä»ã«ã©ãã§ã§ãããæããŠãã ããïŒãã®æ å ±ãå ±æãã:)ïŒ
ãªããžããªã«readmeãããã®ã§ãããã§ã¯è©³ãã説æããŸããã
çŽ æµãªãã®ãæã£ãŠãã¿ããªâ®ïž
ç³ãèš³ãããŸããããããã«ãªã³ã¯ããããŸãïŒD
+1
+1
+1
+1ãããããšãð
ãã®éã«ãå¥ã®docker noopã€ã¡ãŒãžãèŠã€ããŸãããããã¯ã10 ^ 3åå°ãããªã£ãŠããŸãïŒå®éã®noopãã¢ã»ã³ããªã§æžã蟌ãŸããŠããããïŒã
æ®å¿µãªããããã®ãªããžããªã«ã¯ã©ã€ã»ã³ã¹ããããŸããã ç§ã¯ãã§ã«facebkã§ææè ã«ã¡ãã»ãŒãžãæžããŸãããã圌ã¯ãŸã çããŠããŸããã ãã£ãšå€ãã®äººã圌ã«ããã«ã€ããŠè³ªåãããããã¶ã圌ã¯ã©ã€ã»ã³ã¹ãè¿œå ããã§ããã:)
æ¡åŒµãŠãŒã¹ã±ãŒã¹ã®äžéšïŒåäžãã¡ã€ã«å ã®ãã®ïŒã«åœ¹ç«ã€å¯èœæ§ã®ãããã®ã¯ãYAMLã¢ã³ã«ãŒã®ãµããŒãã§ãïŒ https ïŒ
JSONã¹ããŒããservice must be a mapping, not a NoneType.
æ€èšŒã«å€±æããŠããå¯èœæ§ããããŸãã
ããã @ã°ã¬ãŒãµã€ããyamlã¢ã³ã«ãŒã¯å°ãªããšãç§ã«ãšã£ãŠã¯æ©èœããŸãã ç§ãããããã©ã®ããã«äœ¿çšãããã«ã€ããŠã¯ãäžèšã®ç§ã®ã³ã¡ã³ããåç §ããŠãã ããã
ããããŸããããnoopãµãŒãã¹ã䜿çšããã®ã¯æ²ããããšã§ã¯ãããŸãããïŒ
ç¹ã«envå€æ°ã®å Žåããããã®envå€æ°ã¯ã©ã®ãããªå€ãåŠçããŸããïŒ ã·ãŒã¯ã¬ããã«é¢ããå Žåã¯ãã¹ãŠã©ãŒã ã·ãŒã¯ã¬ããæ©èœïŒãŸãã¯ãã®ä»ã®ã·ãŒã¯ã¬ãããœãªã¥ãŒã·ã§ã³ïŒã䜿çšããŸãã èšå®ã«é¢ããå Žåãã»ãšãã©ã®å Žåãèšå®ã¯ã¢ããª/ãµãŒãã¹åºæã§ããããµãŒãã¹éã§å ±æããããšãç®çãšããŠããŸããã
ãµãŒãã¹éã§èšå®ãå ±æããå¿ èŠãããå Žåãã»ãšãã©ã®å Žåãåãã³ã³ãããŒã€ã¡ãŒãžãèµ·åããŸãããå®è¡æã®ç®ç/ã¿ã¹ã¯ïŒã³ã³ã·ã¥ãŒããŒããããã¥ãŒãµãŒãhttpã¯ãŒã«ãŒãªã©ïŒãç°ãªããŸãã
èšå®ã«é¢ããå Žåãã»ãšãã©ã®å Žåãèšå®ã¯ã¢ããª/ãµãŒãã¹åºæã§ããããµãŒãã¹éã§å ±æããããšãç®çãšããŠããŸããã
ç§ã¯å察ããåŸåããããŸãã ç§ãçŸåšåãçµãã§ãããããžã§ã¯ãã§ã¯ãããšãã°ããªã¥ãŒã ã«äœ¿çšããŸãã
# Volume paths
environment:
- &volume_a volume-a:/usr/share/my_project/volumes/volume-a
- &volume_b volume-b:/usr/share/my_project/volumes/volume-b
- &volume_c volume-c:/usr/share/my_project/volumes/volume-c
- &volume_d volume-d:/usr/share/my_project/volumes/volume-d
ããã§ã次ã®ããã«ãããã®ããªã¥ãŒã ãæå®ã§ããŸãã
volumes:
- volume-a:
- volume-b:
- volume-c:
- volume-d:
services:
some-service:
image: some-image
volumes:
- *volume_a
- *volume_b
some-other-service:
image: some-other-image
volumes:
- *volume_b
- *volume_c
some-third-service:
image: yet-another-image
volumes:
- *volume_a
- *volume_b
- *volume_c
- *volume_d
ããã«ãããã©ã®ã³ã³ããã䜿çšããŠããããèããããšãªããããŸããŸãªããªã¥ãŒã ãç°¡åã«ããã²ãŒãã§ããŸããImhoãããã¯ãDockeræ§æã®ã»ããã¢ãããããäžè²«æ§ã®ãããã®ã«ãã䜿çšãšä¿å®ã容æã«ãã1ã€ã®æ¹æ³ã§ãã
ã¯ãã @ JanNashã¯ç解ããŠããŸããã以äžã®äŸã§ã¯ãnoopãµãŒãã¹ããããŸãããïŒ
ããããå€ãã®å Žåãã¢ã³ã«ãŒã ãã§ã¯äžååã§ãã
ç§ã®å Žåã¯ãåããããžã§ã¯ãã§è€æ°ã®ç°å¢ããµããŒãããå¿ èŠããããŸãã ããã§ç§ãã¡ã®ãããžã§ã¯ãã®è¶³å ŽãèŠãããšãã§ã
éçºæã«ã¯devel.yaml
ã䜿çšããŸãããæ¬çªç°å¢ã§ã¯prod.yaml
ã䜿çšããŸãã test.yaml
ãŸãã ãããã¯ãã¹ãŠcommon.yaml
ããç¶æ¿ãã .env
ãã¡ã€ã«ããããã€ãã®äžè¬çãªå€æ°ãååŸããŸãã
ããããã«ç¬èªã®ç¹æ§ããããŸãã
ãã®åçŽãªåé¢ã«ãããéåžžã«æ©æã§æè»ãªDevOpsãã€ãã©ã€ã³ãå®çŸã§ããŸãããã®ãã€ãã©ã€ã³ã§ã¯ã䜿çšããç°å¢ã«å¿ããŠå°ã調æŽããã ãã§ããã¹ãŠã®äººãç°ãªãã¹ããŒãžéã§åãã³ãŒãã䜿çšããŸãã
ãã¡ã€ã«åœ¢åŒv3ãäœæããããã«ç§»åããããšããŸãããã SwarmãšDRYã®ã©ã¡ããéžã¶ãã¯ãä»ã®ãšããDRYãéžæããŸãããããã€ãSwarmãå¿
èŠã«ãªããäž¡æ¹ã®æ©èœãåã³ãµããŒããããããšãé¡ã£ãŠããŸã...âºïžextends
ããµããŒããããŠã.env
ããªãããã§ãã
...ãŸãã¯å°ãªããšããDRYãã«ãœãªã¥ãŒã·ã§ã³ããæå¹ãªDRYã¬ã¹ãã©ãŒããããçæããæ¹æ³ããããŸãã docker-compose bundle
ã¯ãã®ããã ãšæããŸããããä»ã¯éæšå¥šã«ãªãéåœã«ããããã§ã...
...ãŸãã¯ããã¹ãŠãäœæããå¥ã®ããŒã«ããããŸãïŒ ansible-containerã«ã
https://github.com/moby/moby/issues/31101#issuecomment -301212524ã®ãªã³ã¯ã«ã¯ãYAMLã¢ã³ã«ãŒã®å®äŸãå«ãREADMEãå«ãŸããŠã
@JanNashð
@YajoèããããšããããŸãããããã¯åé¿çã§ããã
ã.envãµããŒãããªããããåé¿çããããã³ã°ããŸããïŒç§ã®ãããžã§ã¯ãã¯ãŸã æ¬çªç°å¢ã«ãªãã®ã§ã話ã¯å°ãå®ãã§ããç§ã¯ç¥ã£ãŠããŸã:)ïŒã ããŸããŸãªç°å¢ïŒä»ã®ãšãããããŒã«ã«éçºãšå°ããªéçºãµãŒããŒïŒã§ããŸããŸãªç°å¢å€æ°ã®ã»ããïŒäŸåé¢ä¿ãã€ã¡ãŒãžã®ããŒãžã§ã³/ã¿ã°ãªã©ïŒããµããŒãããããã«ã local.env
2ã€ã®ãã¡ã€ã«ã䜿çšããŸãã development.env
ã§ãã³ãã³ããdocker-compose <command>
ã ãã§å®è¡ãã代ããã«ãåã«ããããã®.envãã¡ã€ã«ãã·ã§ã«ã«ãœãŒã¹ãããã (. local.env && docker-compose <command>)
ããã«å®è¡ããŸãã ãŸã ããã¯ã§ãããä»ã®ãšãããç§ã¯ããã«éåžžã«æºè¶³ããŠããŸããã
çŽ æµãªãã®ãæã£ãŠãã ãããy'allð¶
ãã¶ã2æ¡ã§ãïŒD
@JanNashåŸ
ã£ãŠïŒ .env
ã¯3
ãµããŒããããªããªããŸãããïŒ
ç§ã¯å®éã«ã¯ç¥ããŸãããç§ã¯ãããããã§ã¯ãªãã£ããšããã³ã¡ã³ããèªãã ã ãã§ãã
local.envãšdevelopment.envã®ããã·ãŒãžã£ã䜿çšããŠããã®ã¯ãäž»ã«ãå®è£
æã«autoenvã«ã€ããŠç¥ããªãã£ãããã§ãïŒD
æ··ä¹±ã®å¯èœæ§ããè©«ã³ç³ãäžããŸãã
ããã @ Yajoã¯ãã®ã³ã¡ã³ãã§.envãµããŒãããªãããšã«èšåããŸããã
@Yajoã詳ããæããŠããã ããŸããïŒ
ãã¿ãŸãããç§ã®ããã§ãã åäœããŠããªãããã§ã¯ãªãã以åã®ããã«èªåæ€åºãããã®ã§ã¯ãªãã env_file: .env
ã§å¿
èŠãããã ãã§ãã å
ã®åé¡ã«æ»ããŸãããã
extends
ã©ããã«èœãšããšããè°è«ã¯ãããŸããïŒ ããªã䜿çšãããŠããæ©èœã§ããããšãããç解ãããŠãããšæãã®ã§ããŠãŒã¹ã±ãŒã¹ã瀺ãåã«ãããèªãã§ã¿ãããšæããŸãã
ããã«ã¡ã¯ãç§ã¯1ã€ã®è³ªåããããŸã-ãã€ã§ããïŒ ãæ¡åŒµããµããŒããv3ã«æ»ãã®ã¯ãã€ã§ããïŒ
@JanNashããªãã¯ãããããã¯ããã«å°ããããããšãã§ããŸãã ç§ã¯ããªãã®ãªããžããªã«å¯ŸããŠgithubã«åé¡ãæåºããŸãããç§ã¯ç§ã®ãã·ã³ã®750kãã1200ãã€ãã«noopãååŸããŸããã
çŸæç¹ã§ã¯ã矀ãã®äžã§extendã䜿çšã§ããªãããšãããããŸãã
åãå
¬éããŒãã䜿çšãã1ã€ã®è¿œå ã®ç°å¢å€æ°ãæã€ãµãŒãã¹äžã®1ã€ã®ã³ã³ãããŒã䜿çšããŠãåããµãŒãã¹ãèµ·åããæ¹æ³ã«ã€ããŠã®ã¢ã€ãã¢ã¯ãããŸããïŒ
ã¹ãŠã©ãŒã ã¹ã¿ãã¯ãããã€ã§ã®ãµããŒããæ¡åŒµããããã®+1
ããã
è€æ°ã®gitãªããžããªã«åæ£ããŠãããã€ã¯ããµãŒãã¹ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŠããŸãïŒããããã«docker-composeãã¡ã€ã«ããããŸãïŒã
ãããã€ã¯ãåãµãŒãã¹ãæ¡åŒµãã1ã€ã®ãã«ãŒããdocker-composeãã¡ã€ã«ã«ãã£ãŠäž»å°ãããŸããç§ãã¡ã«ãšã£ãŠããã®extends
æ©èœã¯ã¹ã¿ãã¯ãããã€ã«æ¬åœã«å¿
èŠã§ãã
ãããã£ãŠãã¹ãŠã©ãŒã ã¹ã¿ãã¯ãããã€ã®ãµããŒããæ¡åŒµããããã®+1ããããŸã
ããããšãã
YAMLã®åçŽãªç¶æ¿ïŒ &default
ã <<: *default
ïŒãäžæçãªè§£æ±ºçãšããŠäœ¿çšã§ããŸãã
version: '3'
services:
worker: &default
build: .
command: bundle exec rake jobs:work
env_file:
- .env
volumes:
- .:/app
depends_on:
- db
- redis
links:
- db:postgres
web:
<<: *default
command: bundle exec puma -C config/puma.rb -p 3000
ports:
- "3000:3000"
spring:
<<: *default
command: bundle exec spring server
ãã¡ããã extends
æ©èœã®æ¹ãåªããŠããŸã
å¥ã®ãã¡ã€ã«ãæ¡åŒµããå Žåã¯ã©ãã§ããïŒ
Yamlã«ã¯ãã¡ã€ã«æ¡åŒµæ©èœããããŸãã:(
Dockerãžã®å¯çš¿è ãããã®æ©èœã«é¢ããæŽæ°ã¯ãããŸããïŒ ããã¯åå°å ¥ãããäºå®ã§ããïŒ ããã§ãªãå Žåãåæ§ã®èšç»ã¯ãããŸããïŒ ããã§ãªãå Žåã¯ããªãããã§ã¯ãããŸãã..ïŒ
@quolpr ãããããã¿ã€ããïŒã€ãŸã&default
ïŒã¯åžžã«Docker Composeã«ãã£ãŠè§£éããããããã»ãšãã©ã®å ŽåããYAMLåçŽç¶æ¿ãã³ãŒãã¯extends
ã«çœ®ãæãããªãã®ã§ã¯ãªãããšæããŸãã worker
ãšãããµãŒãã¹ã aïŒãããã£ãŠãã©ã®ãµãŒãã¹ãæ確ã«å®çŸ©ããå¿
èŠãããããbïŒæãŸãããªãå¯èœæ§ããããŸãã
ãšã«ãããééããªãèå³æ·±ãæ©èœã§ãã
@laugimethodsã¯ãYAMLåç §ã䜿çšã§ããŸãã
version: '3'
services:
spring:
build: ./app
command: /bin/sh -c "bundle exec spring server"
volumes: &default_volumes
- ./app:/app:delegated
- bundle:/bundle:nocopy
worker:
build: ./app
command: bundle exec sidekiq -v -C config/sidekiq.yml
volumes: *default_volumes
ïŒ &default_volumes
ãš*default_volumes
泚æããŠãã ããïŒ
ãããããªãextends
æ©èœãåé€ãããã®ãæ¬åœã«ç解ã§ããŸããð€
åèãŸã§ã«ãäžè¶³ããŠãããæ¡åŒµãæ©èœã眮ãæããããã«ãçŸåšã .yaml
ãã¡ã€ã«ã®åæ/ããŒãžã䜿çšããŠããŸãã
https://github.com/Logimethods/smart-meter/blob/master/README.md#docker -compose
æ¡åŒµæ©èœãæ¡åŒµæ©èœãäœããã®ã¢ã³ããã¿ãŒã³ãšèŠãªãå Žåã¯ãããã䜿çšããªãã§ãã ããããã ããåãåããªãã§ãã ããã
extends
ã䜿çšããã«ãæå³ããã¢ãããŒãã®æ確ãªèª¬æããé¡ãã§ããŸããïŒ ç¹ã«Gitãµãã¢ãžã¥ãŒã«ã«å«ãŸãããã¡ã€ã«ããç¶æ¿ããå Žåãã¯ãã¹ã¢ããªã±ãŒã·ã§ã³ãããã¯ãŒã¯é
ç·ãªã©ãåŠçããã¡ã¿ãããžã§ã¯ãã®å®çŸ©ãå¯èœã«ããå Žåã«ããããåºç¯å²ã«äœ¿çšããŸããè€æ°ã®docker-compose.yml
ãã¡ã€ã«ãæå®ã§ããããšã¯ããç¥ã£ãŠããŸããããããããªãŒããŒã©ã€ãããŸããããã¯ã extends
ã䜿çšããŠãœãŒã¹ç®¡çã«ãã§ãã¯ã€ã³ã§ããã®ã§ã¯ãªããã³ãã³ãã©ã€ã³ã§çžäºæ¥ç¶ãæå®ããå¿
èŠãããããšãæå³ããŸããïŒ ãŸãã¯ãv3ã®ã©ããã§ããã€ãã®æ°æ©èœãèŠéããŸãããïŒ
è€æ°ã®ãããžã§ã¯ãã§extends
ãé »ç¹ã«äœ¿çšããŠãããŸããŸãªç°å¢ãããŸããŸãªãã¹ãã®ãµãŒãã¹å±æ§ã®å
±éã»ãããç¶æ¿ããŠããŸãïŒèªã¿åãïŒ extends
ã䜿çšããŠå¥ã®ãã¡ã€ã«ããç¶æ¿ããŠããŸãïŒã
æè¿·ã§extends
ããŒã¯ãŒãã®åé€ãèªã¿ããã€ãžãŒãã§ãŒã³æ¥ç¶ãå¿
èŠãšããªã代æ¿åãèŠã€ããããšããåŸã -f
dockercomposeãã¡ã€ã«extends
ãåé€ããçç±ã¯äœã§ããã
links
ãšvolume-from
ã®åé¡ã¯ç解ããŠããŸãããããŒã¹ymlãã¡ã€ã«ã§ã®äœ¿çšãæ§ããã®ãæåã®æ¹æ³ã®ããã§ãã
è»ãã²ã£ããè¿ãã®ã«æ £ããŠãããããšãã£ãŠãè»ã®ãã€ãŒã«ãåãå€ãããšã¯ãŸããããŸãã...ããã§ããïŒ
PSïŒnoopãšanchorsã¯é¢çœããã«èŠããŸãããæãåçŽãªãããžã§ã¯ãã«äžå¿ èŠãªè€éããè¿œå ããŸã...
éåžžã«åçŽãªäŸãšããŠïŒ
common/common.yml
services:
web:
image: alpine:3.6
build: .
environment:
DOMAIN:
PREFIX:
dev/docker-compose.yml
services:
web:
extends: ../common/common.yml
service: web
ports:
- "8080:8080"
prod/docker-compose.yml
services:
web:
extends: ../common/common.yml
service: web
image: the-prod-image:latest-release
ports:
- "80:80"
- "80:443"
environment:
NEW_RELIC_KEY:
extends
ãªãã§DRYã®ååãã©ã®ããã«ç¶æããã®ã§ããïŒ
çŸåšããããåå ã§ããŒãžã§ã³2.1ããã¢ããã°ã¬ãŒãããçç±ã¯ãããŸããã
@teodorescuserban ã
ãã€ãžãŒãã§ãŒã³æ¥ç¶-fdockercomposeãã¡ã€ã«
ããã®äœãåé¡ãªã®ã§ããïŒ docker-composeãåŒã³åºãããã«ãçããšã€ãªã¢ã¹ã䜿çšããŠç¬èªã®ã¹ã¯ãªãããäœæã§ããŸãã
次ã®æ§é ã䜿çšããŸãã
services:
web:
image: alpine:3.6
build: .
environment:
DOMAIN:
PREFIX:
services:
web:
ports:
- "8080:8080"
services:
web:
image: the-prod-image:latest-release
ports:
- "80:80"
- "80:443"
environment:
NEW_RELIC_KEY:
docker-compose -f common/common.yml -f dev/docker-compose.yml -p myproject up --build
docker-compose -f common/common.yml -f prod/docker-compose.yml -p myproject up --build
ç§ã¯ãã®æ©èœãç¥ããŸããã§ããã CLIã¯ð©ã«ãªããŸãããæ©èœããŸãã
ãããextends
ã®æ£åŒãªä»£æ¿åã«ãªãã®ã§ããã°ããããç°¡åã«ããæ¹æ³ãããã¯ãã ãšæããŸãã
äŸãã°ïŒ
docker-compose.yml
version: "3" # or whatever
extend:
- ./common/common.yml
- ./dev/docker-compose.yml
services: # Not required now
# etc.
ãã®ããã«ããŠãå¿
èŠãªãã¹ãŠãå®è¡ããåäžã®docker-compose.yml
ãã¡ã€ã«ãæãããšãã§ããŸãã
䟿å©ãªä»£æ¿æ段ã¯ã COMPOSE_FILE
ç°å¢å€æ°ã§è€æ°ã®äœæãã¡ã€ã«ããµããŒãããããšã§ãã
@ã€ãžã§
䟿å©ãªä»£æ¿æ段ã¯ãCOMPOSE_FILEç°å¢å€æ°ã§è€æ°ã®äœæãã¡ã€ã«ããµããŒãããããšã§ãã
https://docs.docker.com/compose/reference/envvars/#compose_fileããïŒ
ãã®å€æ°ã¯ããã¹åºåãæåã§åºåãããè€æ°ã®Composeãã¡ã€ã«ããµããŒãããŸãïŒLinuxããã³macOSã§ã¯ãã¹åºåãæåã¯
:
ãWindowsã§ã¯;
ïŒã äŸïŒCOMPOSE_FILE=docker-compose.yml:docker-compose.prod.yml
ã ãã¹åºåãæåã¯ãCOMPOSE_PATH_SEPARATOR
ã䜿çšããŠã«ã¹ã¿ãã€ãºããããšãã§ããŸãã
@ dermeister0 https://github.com/ImmobilienScout24/yamlreaderãªã©ã®ããŒã«ã䜿çšããŠããããã®ãã¡ã€ã«ãæ°žç¶çã«ããŒãžããããšãã§ã
> yamlreader common/common.yml prod/docker-compose.yml > docker-compose-prod.yml
> docker-compose -f docker-compose-prod.yml -p myproject up --build
> cat docker-compose-prod.yml
services:
web:
build: .
environment:
DOMAIN: null
NEW_RELIC_KEY: null
PREFIX: null
image: the-prod-image:latest-release
ports:
- 80:80
- 80:443
@ dermeister0ããªãã®ææ¡ã«æè¬ããŸããæ®å¿µãªããããã¯ããããã®äžæ Œå¥œãªæ¹æ³ã§ãã extends
ãããšããããããã€ãžãŒãã§ãŒã³æ¥ç¶ããå¿
èŠããããã©ãããå®éã«ç¥ãå¿
èŠããªããªããŸãã ç§ã¯èªåã§ãããè¡ãããšã§çããããšã¯ã§ããŸããããã®ãœãªã¥ãŒã·ã§ã³ãç§ã®èŠªæãªãéçºè
ã«é©çšããããšã¯ã§ããŸããã§ããã
ãã ãã COMPOSE_FILE
envå€æ°ã«è€æ°ã®å€ãå«ããããšãã§ããããšã«æ°ã¥ããŠããŸããã§ããã ããããšã@gsong ïŒ ããã¯çŽ æŽããããããã䜿çšããããšãã§ããŸãïŒç§ã¯ããã.env
ãã¡ã€ã«ã§å®çŸ©ããŸãïŒã ããã«1ã€ã®åé¡ããããŸããããŒã¹/å
±éãã¡ã€ã«ã«ã¯ãå¿
èŠã®ãªããµãŒãã¹ãå«ãŸããŠããå¯èœæ§ããããŸãã
ããšãã°ãããŒã¿ããŒã¹ãšWebã³ã³ãããå®çŸ©ãããã©ãããªå ±éãã¡ã€ã«ãèããŠã¿ãŸãããã ã¹ããŒãžã³ã°ã§ã¯ããããããã¹ãŠãŸãšããŠããå¿ èŠããããŸãããprodã§ã¯ãdbçšãšwebçšã«å¥ã ã®ãã¹ããå¿ èŠã«ãªããŸãã
ãŸããdocker-compose.override.ymlãããã©ã«ãã§ããŒããããŸãã
https://docs.docker.com/compose/extends/#understanding -multiple-compose-files
ç§ã¯ããŒãžã§ã³3.3ã§ãã®ã¢ãããŒãã䜿çšããŸãïŒ
docker-compose.yml
ãŸã;docker-compose.override.yml
ã䜿çšããŸããdocker-compose.staging.yml
ã䜿çšããŸãã泚ïŒæ¬çªç°å¢ã§ã¯Dockerãå®è¡ããŠããŸããã
ãã®ã¢ãããŒãã䜿çšãããšã docker-compose build
ã䜿çšããŠããŒã«ã«ã§ç°¡åã«ãã«ãã§ããã¹ããŒãžã³ã°ã§ãããã€ããå Žåã¯æ¬¡ã䜿çšããŸãã
docker-compose -f docker-compose.staging.yml -f docker-compose.yml build
Apacheã䜿çšããŠããŸãããéçºçšãšã¹ããŒãžã³ã°çšã«å¥ã
ã®ä»®æ³ãã¹ããã¡ã€ã«ããããŸããã ç§ã¯å¥ã®ãã¡ã€ã«ãæã€ããšãé¿ããããã«ããªãã®æéãè²»ãããŸããã çµå±ãæå¹ãªã¢ãããŒãã¯<IfDefine>
ãšç°å¢å€æ°ïŒymlãã¡ã€ã«ã®environmentã»ã¯ã·ã§ã³ã§èšå®ãããã®ïŒã䜿çšããŠãããšãã°sslæ§æãå«ããããšã ãã§ãã ãŸããTLDãšãã¡ã€ã³ãã¬ãã£ãã¯ã¹ã䜿çšããŠããã®ã§ã www.example.local httpïŒ//www.example.local/ ïŒ8080ãwww.staging.example.comhttp ïŒ //www.staging.example.comã®ãããªãã®ã䜿çšã§ããŸãã / ã ããŒã«ã«ã§ã¯ãWebãµã€ãã¯httpããã³httpsã§ã®ã¹ããŒãžã³ã°ã§å®è¡ãããŸãã ãã®ã¢ãããŒãã§ã¯ããã¡ã€ã«ã®ç°ãªãããŒãžã§ã³ãç¶æããå¿
èŠã¯ãããŸããã åãããšãæ¬çªç°å¢ã§ãå¯èœã ãšæããŸãããç§ãèšã£ãããã«ãæ¬çªç°å¢ã§ã¯Dockerãé¿ããããšæããŸãã
ãã¹ã¯ãã¹ãŠçžå¯Ÿãã¹ã§ãããããã³ã³ããã¯ã©ã®ãããªç°å¢ã§ãæ©èœããŸãã
ç§ã®2ã»ã³ã
-ãã£ãªãã
ç§ã®å Žåã以åã¯æ¬¡ã®ãããªãã®ã䜿çšããŠããŸããã
https://github.com/moby/moby/issues/31101#issuecomment -329482917ãšhttps://github.com/moby/moby/issues/31101#issuecomment -329512231ã«æè¬ããŸãããããã«ã€ããŠã¯ç¥ããŸããã§ãããããã§ãå¥ã®ã¹ããŒãã䜿çšããŠv3ã«ç§»è¡ã§ããŸãã
envå€æ°ã䜿çšããŠå¿ èŠãªããã¯ãè¡ãããšãã§ããã®ã§ãç§ã®å Žåã¯åé¡ãä¿®æ£ãããŠããŸãã ããããšãïŒ ðïŒç³ãèš³ãããŸããããæå¥ãèšãåã«æ°ããããã¥ã¡ã³ããæ£ããèªãå¿ èŠããããŸããïŒã
PSïŒããã§ãã extends
ãåãæ»ãã®ã¯è¯ãããšã§ãããå°ãªããšãååã«å
¬å¹³ãªä»£æ¿æ段ããããŸãã ð
@ shin-æåã«ã extends
æ©èœã3.0
ã«ãªãã®ãèŠãŠéåžžã«å€±æããŸããããYAMLã¢ã³ã«ãŒïŒäŸïŒhttpsïŒ//github.com/JanNash/docker-noopïŒã¯ååãªäº€æ以äžã
å¯äžã®ããšã¯ãäžèšã®äŸã®ããã«ãã¢ã³ã«ãŒãdocker-compose.yml
ãã¡ã€ã«ã®æå¹ãªã»ã¯ã·ã§ã³ã«é
眮ããå¿
èŠããããšããããšã§ãã
ïŒãããã¬ãã«ã®ïŒ templates
ããããã£ãŸãã¯GitLabã®ãããªé ãããŒãååŸããŠãã¢ã³ã«ãŒãå®çŸ©ããæ¹æ³ãããæè»ã«ããããšã¯ã§ããŸããïŒ
docker-compose.override.ymlã«äŸåããå Žåã®åé¡ã¯ãå«ããå¿ èŠã®ãããªãŒããŒã©ã€ãã®ã¿ã€ãã1ã€ã ãã§ããããªãŒããŒã©ã€ãã®ã¬ã€ã€ãŒã1ã€ãããªãããšãåæãšããŠããããšã§ãã
ç§ã®å Žåããã¹ãŠã®ããŒã«ã«éçºã«å ±éã®ç¹å®ã®åäœãå¿ èŠã§ãããéçºè ãWindowsãOSXããŸãã¯Linuxãå®è¡ããŠããå Žåã¯ã埮åŠã«ç°ãªãåäœãå¿ èŠã«ãªãå ŽåããããŸãã ãããdocker-composev3ã³ã³ããã¹ãã§ç®¡çããããããããã«ãLinuxãŠãŒã¶ãŒã¯ã¹ããŒãžã³ã°ç°å¢ãšåãåäœã§åäœããŠããŸããããã¯æ©èœããŸãããä»ã®éçºè ãšã¯å°ããããŠããããšãæå³ããŸãã
-f
ãããŒã«ã«éçºã«äœ¿çšããããšã¯é¿ããŠããŸããããã¯ã人çºçãšã©ãŒãéåžžã«çºçãããããããŸãã«ãå€ãã®ããšãåãæ¿ããããã«
åèãŸã§ã«ãäžèšã®x-
ãããã¯ãšã .env
ãããžã§ã¯ããã¡ã€ã«ã®COMPOSE_FILE
å€æ°ã䜿çšããŠdocker-composeãã¡ã€ã«ããã€ãžãŒãã§ãŒã³æ¥ç¶ããdocker-ãè¿œå ãããšæããŸãã compose.override.ymlã¯ããããŸã§ã«ééãããã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ã解決ããã¯ãã§ãã
ymlã¢ã³ã«ãŒããè¿ãå°æ¥äœ¿çšããäºå®ã®æ°ã®å©ãããã®ã§ãã
x-
ããã¯ã®çŸããã«ããŸãæºè¶³ããŠããŸããããç§ã¯ããã§çããããšãã§ããŸãã
ãæèŠããããšãããããŸãïŒ
extends
åé€ãããšãèžçŒããå€ããªããv3ãžã®ç§»è¡ããããã¯ããããããããã³ã°ã«é Œãããã«ãªããŸãã ããã€ãã®äžè¬çãªãã®ïŒæŽæ°ããªã·ãŒãªã©ïŒãå®è¡ã§ããããã³ãã¬ãŒããïŒãŸãã¯æœè±¡ïŒãµãŒãã¹ãå®çŸ©ããæ©èœã奜ãã§ãã
ç§ã¯ãDockeräœæãã¡ã€ã«ãextends
ã§ååŠçããæ¡åŒµæ©èœã解決ãããã¯ãªãŒã³ãªv3ãã¡ã€ã«ãåãåºãããšãã§ããåçŽãªgolangãã£ã«ã¿ãŒãŠãŒãã£ãªãã£ã«åãçµãã§ããŸãã
解決-äœæ
ïŒãŸãã¯docker-æ§æããïŒ
ããã¯ãå°ãªããšãããã€ãã®ãŠãŒã¹ã±ãŒã¹ã§æ©èœããŸãã/ãªãèœãšãç©Žã§ããïŒ
@pnickolovããã¯ç§ã«ãšã£ãŠãŽãŒãžã£ã¹ã ããã
ç§ã¯ansible-containerãæ¢ããŠããŸããïŒç§ã¯ansibleãå人çã«äœ¿çšããŠããŸããããŸã äœæ¥ããŠããŸããïŒãããã¯å¿ èŠãªãã¹ãŠãå®è¡ããããã«èŠããŸãããããªãã®ãããªã¹ã¯ãªããã®æ¹ãæãŸããã§ãïŒãã£ãŒã³ãå°ãªãïŒ
extends:
ããŒãååž°çã«åŠçã§ããéããç§ã¯å¹žãã§ãïŒ
ããããŸããã extends
代æ¿æ¡ãèŠã€ããããã§ã...ð
æ°ããããªã®ã¯ãMobyã®ãããžã§ã¯ã管çãäºææ§ãç¶æããããšãéèŠãªèŠçŽ ãšèŠãªããŠããªãããã«èŠãããšããäºå®ã§ãã äžäœäºææ§ã¯ãç¹ã«æ¬çªç°å¢ã«å±éããã倧èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã®å Žåãåºãæ¡çšããããã«äžå¯æ¬ ã§ãã extends
ãããªã³ã¢æ©èœãæ®ãä¿èšŒããªãå ŽåãDocker Swarm / Docker EEãã©ã®ããã«ããã·ã¥ã§ããŸããïŒ ð
è¯ãè©å€ã¯åã€ããšã¯é£ããã倱ãããšã¯ç°¡åã§ã...
å人çã«ã¯ãã«ã¹ã¿ã ã¹ã¯ãªãããansibleã®ãããªãã倧ããªãœãªã¥ãŒã·ã§ã³ã§ã¯ãªãã v2
æ§æã§extends
ã«ãã£ãŠåŠçãããã¿ã¹ã¯ãå®è¡ããããã«ãã€ãã£ãYAMLæ©èœã«äŸåããããšæããŸãã ç§ã¯ä»¥åã«åæ§ã®åé¡ãæ±ããŠããŠãè€æ°ã®.ymlãã¡ã€ã«ãªã©ã䜿çšãããªã©ã®è§£æ±ºçãåºãåã«ç¬èªã®ã³ã³ããŒã¿ãŒãæžãå§ããŸãããïŒhttps://github.com/schmunk42/yii2-yaml-converter-commandïŒ-ããããããã§ã¯ãããŸããã§ããå®è¡å¯èœãªãœãªã¥ãŒã·ã§ã³ã
ç§ã«ãšã£ãŠããããããŒãžã§ã³ç®¡çããªã·ãŒãšäžç·ã«è¡ãããå Žåãæ©èœãéæšå¥šã«ããããšãåé¡ãããŸããã ããšããããç§ãã¡ã®åŽã§äœããã®ä»äºãæå³ãããšããŠããããªãã¯å€ããã®ãæ°žé ã«éã¶ããšã¯ã§ããŸããã
@ schmunk42æ©èœã®
æ®å¿µãªãããïŒç§ã®æ¬ã®ïŒãããã®èŠä»¶ã¯ããããextends
éæšå¥šã«ã¯é©çšãããŸãã...
@laugimethods v3
ã䜿çšããå¿
èŠãããçç±ã¯äœã§ããïŒ
@ schmunk42矀ãã®ããïŒ
ææ°ã®æšå¥šããŒãžã§ã³ã§ããããŒãžã§ã³3.xã¯ãComposeãšDockerEngineã®ã¹ãŠã©ãŒã ã¢ãŒãã®éã§çžäºäºææ§ãããããã«èšèšãããŠããŸãã ããã¯ãYAMLã®ã«ãŒãã«ããããŒãžã§ã³ïŒã3ããŸãã¯ããŒãžã§ã³ïŒã3.1ããªã©ã®ãšã³ããªã§æå®ãããŸãã
docker stack deployã³ãã³ãã¯ãããŒãžã§ã³ã3.0ã以éã®ãã¹ãŠã®äœæãã¡ã€ã«ããµããŒãããŸãã
ãšããã§ãç§ã®ã³ã¡ã³ãã¯extends
ã§ãªããå°æ¥çºçããå¯èœæ§ã®ããïŒçã¿ã䌎ãïŒéæšå¥šã«ãé¢é£ããŠããŸã...
ãããã¹ãŠã©ãŒã ã¢ãŒãã®ããã«åãåé¡ã«çŽé¢ããŠããŸãã
ãããããDockerCLIã--composer-file
å
¥åã䜿çšã§ããããã«ãªã£ãçç±ãèªåããŸããã ãããã docker/swarm
ã§ã®åŠç¿ãããïŒèªå·±ç®¡çïŒã¹ãŠã©ãŒã ã§ã¹ã¿ãã¯ãå®è¡ããããšã¯ããªãè€éãªããšã®ããã«èŠããŸããããããšã³ãžã³ã«ç§»è¡ãããçç±ã¯ããã€ããããŸãã
ããã§ç§ã®çºèŠã®ããã€ãã«æ³šæããã ãã§ã... v2
ããv3.4
ãžã®ç§»è¡ã¯ç°¡åã§ã¯ããv2
ã
ç§ã®åé¡ã®ããã€ãïŒ
volumes_from
ãããªä»ã®ãµããŒããããŠããªããªãã·ã§ã³ããããŸããããšã«ãããããåé€ãããã£ãã®ã§ãåé¿ããã®ã¯ããªãç°¡åã§ã.env
ãã¡ã€ã«ïŒ docker-compose
ïŒã¯DockerCLIã§ã¯å¹æããããŸããdocker stack deploy -c docker-compose.yml -c docker-compose.override.yml doro
ïŒãæå®ãããšãæ£ããæ©èœããªãããã§ãããšã©ãŒã¯ãããŸããããæ£ããããŒãžãããŠããªãããã«èŠããŸããã docker-compose config
ãããªã³ãã³ãããããŸãããv3.4
æ§æããµããŒãããdocker-compose
ãã€ã³ã¹ããŒã«ãç°¡åãªãïŒãã¬ãªãªãŒã¹ïŒãã€ããªã¯ãããŸããã Dockerãšããžã®ããã«--scope swarm
ã§äœæããå¿
èŠããããŸãCCïŒ@handcode
ææ°ã®ãã«ãã䜿çšãã
çŸåšããã®æ§æãã€ãã©ã€ã³ã䜿çšããŠã_extend_ãš_noop_ã®äœ¿çšã眮ãæããŠããŸãã
ç©äºãå°ã也ç¥ãããŸã
ããã誰ããå©ããããšãé¡ã£ãŠããŸã
base.yml ïŒå ±æå®çŸ©ãããã¯æå¹ãªyamlããã¥ã¡ã³ãã§ããããã_docker-compose config_ã䜿çšããŠããŒãžå¯èœïŒ
version: '3.4'
networks:
net_back:
external: true
base-inject.yml ïŒå ±æã¢ã³ã«ãŒå®çŸ©ãæ®å¿µãªãããã¢ã³ã«ãŒã¯ç°ãªãyamlãã¡ã€ã«éã§åç §ã§ããªãããã base.ymlã«è¿œå ã§ããŸããã代ããã«ããããã¯ããã¹ããšããŠfoo.ymlã«æ¿å ¥ãããŸããããã
x-logging: &logging
driver: json-file
options:
max-size: "50m"
max-file: "2"
foo.yml ïŒæ±çšã¹ã¿ãã¯å®çŸ©ã base.ymlããã®ãªããžã§ã¯ãã®åç §ã base-inject.ymlããã®ã¢ã³ã«ãŒãããã³foo-dev.ymlã§ãªãŒããŒã©ã€ãããããªããžã§ã¯ãïŒ
version: '3.4'
[[base-inject]]
services:
foo:
image: ${DOCKER_REGISTRY}/foo:${IMAGE_VERSION}
volumes:
- type: volume
source: "volfoo"
target: "/foo"
networks:
- net_back
logging:
<<: *logging
foo-dev.yml ïŒç°å¢ã¹ã¿ãã¯å®çŸ©ããšïŒ
version: '3.4'
services:
foo:
ports:
- "8080:80"
volumes:
volfoo:
name: '{{index .Service.Labels "com.docker.stack.namespace"}}_volfoo_{{.Task.Slot}}'
driver: local
次ã«ãå±éã³ãã³ãïŒ
docker stack rm stack_foo && echo "waiting..." && sleep 3 &&
cat foo.yml | sed -e '/base-inject/ {' -e 'r base-inject.yml' -e 'd' -e '}' > ./foo-temp1.yml &&
export $(sed '/^#/d' ./dev.env | xargs) &&
docker-compose -f base.yml -f ./foo-temp1.yml -f foo-dev.yml config > ./foo-temp2.yml
docker stack deploy --with-registry-auth --prune --compose-file ./foo-temp2.yml stack_foo
3ã€ä»¥äžã®ãã¡ã€ã«ã®äœæã§extends
ã欲ããã£ãŠãã人ã®ããã«ã baclin
ãšããããŒã«ãæã«å
¥ããŸããã baclin
ãã®ãããªãã£ã¬ã¯ãã£ããç·åœ¢åãããã¹ãŠã®extends
ãã£ã¬ã¯ãã£ãããããã®ã³ã³ãã³ãã§ååž°çã«çœ®ãæããŸãã ããã¯ã¢ã«ãã¡çãœãããŠã§ã¢ã§ããçŸåšãSwarmã¢ãŒããšã¹ã¿ãã¯å±éããµããŒãããã³ãŒããèšè¿°ããŠãããããã³ãŒãã¯ç§ã®æ©æ¢°ã®äžéšã§ãã baclin
åæããŒãžã§ã³ã®ãã©ãããã©ãŒã ãã€ããªã¯ããã¡ãããå
¥æã§ãããã«å ±åããŠãã ããã
ããã¯æ¬åœã«çŽããããã§ãïŒ
ææ°ã®DockerãªãªãŒã¹ïŒ v17.09
ïŒã®ããã¥ã¡ã³ããšv17.06
ãªãªãŒã¹ããã¥ã¡ã³ããèªããšããã®æ©èœãå©çšã§ããã¯ãã§ãã
$ head -n1 docker-compose.yml
version: '3'
ãããã compose up
ã¯
ERROR: The Compose file './docker-compose.yml' is invalid because:
Unsupported config option for services.admin_application: 'extends'
extends
ããŒã¯ãŒãã䜿çšããå Žåã
ãŸãã compose
ãã°ã§extends
ã®åé€ã«ã€ããŠäœãèŠã€ãããŸããã
ããŠãã©ã£ã¡ïŒïŒ
ãã®ãããªéèŠãªæ
å ±ãèŠã€ããããgithubã®ãããŸããªåé¡ã®äžã«é ãããããã®ã¯é£ããããšã§ã¯ãããŸããã
$ docker --version
Docker version 17.09.0-ce, build afdb6d4
$ docker-compose --version
docker-compose version 1.16.1, build 6d1ac21
@jottr ãããã¥ã¡ã³ããåç §ããŠãã ããïŒ
extendsããŒã¯ãŒãã¯ãComposeãã¡ã€ã«ããŒãžã§ã³2.1ãŸã§ã®ä»¥åã®Composeãã¡ã€ã«åœ¢åŒã§ãµããŒããããŠããŸãïŒv1ã®extendsããã³v2ã®extendsãåç §ïŒããComposeããŒãžã§ã³3.xã§ã¯ãµããŒããããŠããŸããã
ãããã£ãŠã extends
ã䜿çšããå Žåã¯ã version: '2.1'
ã«åºå·ããå¿
èŠããããŸãã
ç§ã®æªãã ããã¯ãŸã ããã¥ã¡ã³ãã®äžéšã«ãããèµ€ãéæšå¥šã®èŠåãµã€ã³ãä»ããŠããã¯ãã§ãã
ç§ã®æªãã ããã¯ãŸã ããã¥ã¡ã³ãã®äžéšã«ãããèµ€ãéæšå¥šã®èŠåãµã€ã³ãä»ããŠããã¯ãã§ãã
@jottr Githubã䜿çšããŠããã®ããã®å¥ã®åé¡ãäœæãããããã®ããã®PRãäœæãããããã ãã§ãã åé¡éå±€ãäœæããŸããïŒ https ïŒ
ç§ã®å Žåã次ã®ããã«docker-compose-override.yml
ããããŸãã
yaml
version: "3.4"
services:
common:
extra_hosts:
- "host1:172.28.5.1"
- "host2172.28.5.2"
- "host3:172.28.5.3"
networks:
default:
external:
name: "common-network"
ãããŠããããã¯ãŒã¯ãšextra_hostsãå
±æããå¿
èŠãããä»ã®ããã€ãã®docker-compose.yml
ãã¡ã€ã«ããããŸãã æ¡åŒµæ©èœãªãã§ãããè¡ãæ¹æ³ã¯ïŒ
yaml
version: "3.4"
services:
mongo:
image: "mongo"
container_name: "mongo"
hostname: "mongo"
volumes:
- "/opt/docker/mongo/default.conf:/usr/local/etc/mongo/mongod.conf"
- /opt/data/mongo:/data/db"
ports:
- "27017:27017"
command: "mongod --config /usr/local/etc/mongo/mongod.conf"
networks:
default:
ipv4_address: "172.28.5.4"
docker-composeã§ãµããŒããããŠããyamlã¢ã³ã«ãŒãšç°ãªããã¡ã€ã«éã®åç
§ãããã°çŽ æŽããããšæããŸãã ãã¶ãããã¡ã€ã«ãããŒãžããåŸã«ã¢ã³ã«ãŒãšåç
§ãé©çšããŸãã
äŸãã°ïŒ
yaml
version: "3.4"
services:
common: &common
extra_hosts:
...
networks:
...
yaml
version: "3.4"
services:
mongo:
<<: *common
image: "mongo"
container_name: "mongo"
...
çµæã¯æ¬¡ã®ããã«ãªããŸãã
yaml
version: "3.4"
services:
mongo:
image: "mongo"
container_name: "mongo"
extra_hosts:
// EXTRA HOSTS HERE
networks:
...
@ sandro-csimasããã¯æ¬¡ã®æ¹æ³ã§å¯èœã§ãïŒ https ïŒ//docs.docker.com/compose/compose-file/#extension -fields
@ shin-ãã®ãã±ãããéããããšã¯ã§ããŸããïŒ
@rdxmbããã¯æããŸããã ç§ãèŠãããšãã§ããããšãããããªãã¯å¥ã®docker-composeãã¡ã€ã«ããæ¡åŒµããããšã¯ã§ããŸãã
ããã¯https://github.com/docker/compose/issuesã®åé¡ã ãšæã
ããã€ãã®ãããã°ïŒ
# cat docker-compose.yml
version: "3.4"
services:
foo-not-bar:
<< : *common
foo-bar:
<< : *common
environment:
- FOO=BAR
x-common-definitions-for-all-our-services:
&common
image: phusion/baseimage
environment:
- FOO=NOTBARBYDEFAULT
ããã¯docker stack deploy -c docker-compose.yml test
docker-composeã䜿çšããå ŽåïŒ
# docker-compose up
ERROR: yaml.composer.ComposerError: found undefined alias 'common'
in "./docker-compose.yml", line 4, column 10
ymlãã¡ã€ã«ã次ã®ããã«å€æŽããŸãã
version: "3.4"
x-common-definitions-for-all-our-services:
&common
image: phusion/baseimage
environment:
- FOO=NOTBARBYDEFAULT
services:
foo-not-bar:
<< : *common
foo-bar:
<< : *common
environment:
- FOO=BAR
docker-composeã§ãåäœããŸãã
ãããã£ãŠãããã¯è€æ°ã®ãã¡ã€ã«ã§ãæ©èœããã¯ãã ãšèããŸããããããã§ã¯ãããŸããã
# docker-compose -f compose-services.yml -f compose-default.yml config > docker-compose.yml
ERROR: yaml.composer.ComposerError: found undefined alias 'common'
in "./compose-services.yml", line 5, column 10
t# docker-compose -f compose-default.yml -f compose-services.yml config > docker-compose.yml
ERROR: yaml.composer.ComposerError: found undefined alias 'common'
in "./compose-services.yml", line 5, column 10
# cat compose-services.yml
version: "3.4"
services:
foo-not-bar:
<< : *common
foo-bar:
<< : *common
environment:
- FOO=BAR
# cat compose-default.yml
x-common-definitions-for-all-our-services:
&common
image: phusion/baseimage
environment:
- FOO=NOTBARBYDEFAULT
ãã ãããã¡ããããããããŒãžããã«ã¯ã cat
䜿çšããã ãã§ãã
# cat compose-default.yml compose-services.yml > docker-compose.yml && docker-compose up -d
WARNING: The Docker Engine you're using is running in swarm mode.
Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.
To deploy your application across the swarm, use `docker stack deploy`.
Creating network "test_default" with the default driver
Creating test_foo-bar_1 ...
Creating test_foo-not-bar_1 ...
Creating test_foo-bar_1
Creating test_foo-bar_1 ... done
ããŒãžã§ã³ã§xenialã§å®è¡ïŒ
# docker --version
Docker version 17.11.0-ce, build 1caf76c
# docker-compose --version
docker-compose version 1.17.0, build ac53b73
@rdxmb ãããããšãïŒ
ãããã£ãŠããcatãã³ãã³ãã䜿çšããŠäœæãã¡ã€ã«ãããŒãžããæçµãã¡ã€ã«ãå®è¡ããå¿
èŠããããŸãã
ãŸãããããè¡ãããã«docker-compose config
ã䜿çšããŸãã ç°å¢åºæã®èšå®ã®äŸïŒ
ããã¯CIãã€ãã©ã€ã³ã«ãã£ãŠå®è¡ãããŸãïŒ docker-compose -f docker-compose.yml -f docker-compose.override.prod.yml config > docker-compose.prod.yml
ãããŠdocker stack deploy -c .\docker-compose.prod.yml my-stack
ã䜿çšããŸã
ããã«æ祚ããŠãã ãããextendsã¯v3ã§éåžžã«åœ¹ç«ã¡ãŸãã
v2ã§ãã䜿çšããŸããããéåžžã«äŸ¿å©ã§ãã
+1
v3ã§extends
ãµããŒããèŠããã§ãã ããã¯ç§ã®docker-compose.yml
ãã¡ã€ã«ã倧ãã«ä¹Ÿããã®ã«åœ¹ç«ã¡ãŸãã
ãã®åé¡ãæèµ·ãããŠããã»ãŒ1幎ãçµã¡ãå€ãã®äººã ããã®æ©èœãå¿ èŠãšããŠããããšã¯æããã§ãã ããã§ããDockeréçºè ããã®ãªã¯ãšã¹ãã«å¿çããã®ããŸã£ããèªãã§ãããããªãªãŒã¹åã«docker-composev3ã«å«ãŸããŠããªãã£ãçç±ã®èª¬æããããŸããã
æ°ãããã¯ãããžãŒãä¿¡é Œããã客æ§ã®ããã«æ©èœãäŒéãŸãã¯ç¶æããããšããã§ããªãå Žåã®ãœãããŠã§ã¢ã®æ²ããç¶æ ã
ç¶æ³ã®èãããã解éã®1ã€ïŒããã³çŸåšã®ã¹ã¬ããã®èŠçŽãïŒã¯æ¬¡ã®ããã«ãªããŸãã
cat
ãšé«åºŠãªã¢ãããŒããåç
§ããŠãã ããã åçŽãªã¢ãããŒãã®ã³ã¡ã³ãã¯ãdocker-composeãæåŸã«åãã£ãŠè€æ°ã®ãã¡ã€ã«ãããŒãããåé¡ã瀺ããŠããŸãïŒèª°ãããã®åé¡ãäœæããŸãããïŒïŒã ãããdocker-composeã§ä¿®æ£ãããå Žåããã¡ã€ã«ãããŒãžããå¿
èŠãããããŸããã ãããã£ãŠãç§ã«ãšã£ãŠããã«ããã¡ã€ã«ã®ãµããŒããåžæãã人ã¯ã @ rdxmbãææ¡ããããã«ã / compose / issuesã§ç¶è¡ããå¿
èŠããããŸããextends
åãæ»ãããšãæ€èšããïŒ GitHubãããžã§ã¯ãã€ãã³ããåç
§ãDockerããŒã ããã®éææ§ãé«ããããããšãïŒïŒãçµæããæŠç¥çã«éèŠãªä»ã®ãã®ãããããããããšè§£éãããããããŸããããå¯èœã§ãããŸã extends
ãã«ãªã¯ãšã¹ããæžããŠãã ãããç§ã«ãšã£ãŠãããã¯å®å šã«ç解ã§ããèŠç¹ã§ãã
@aCandidMindåæããŸããã
IMHOã¯ã extends
ã«ãã£ãŠæäŸãããããã·ã³ãã«ã§ã¯ãªãŒã³ãªã¡ã«ããºã ã«è€éããè¿œå ããŸãã
ç§ãããããŸããããé©åºŠã«è€éãªæ¡åŒµæ§æãæ¡åŒµãã£ãŒã«ãã«ç§»åãããšãèªã¿åããšä¿å®ãã¯ããã«å°é£ã«ãªããŸãã
å€ãã®ã³ã¡ã³ããæçš¿ãèªãã åŸã§ããextendsãåé€ãããçç±ãšããã®æ©èœã®äœäžã®å©ç¹ã¯äœã§ãããã¯ãŸã ããããŸããã
å°ãã®bashããžãã¯ã§ãèªåã§è©Šãããšãã§ããããã«ãã¹ããªããžããªãäœæããããšãã§ããŸãã
stack deploy
ã³ãã³ãã次ã®ããã«æ§æããã ãã§ãã
docker stack deploy --compose-file=<(docker-compose -f docker/prod.yml -f docker/dev.yml config) <stackname>
@ tylerbuchea-ãã®bashéæ³ã®å¯äžã®æ¬ ç¹ã¯ã WARNING: Some services (<service-name(s)>) use the '<key>' key, which will be ignored. Compose does not support '<key>' configuration
ååŸããå¯èœæ§ãããããšã§ãã ããã«ãããæ··ä¹±ãçããå¯èœæ§ããããŸãã ããããããããã¯åäœããŸãð
@dnmgnsããªãã¯æ£ããã§ãïŒ ãããææããŠãããŠããããšãã @joaoccãèšã£ãããã«ããã€ãã£ããµããŒãã«åããã®ã¯ãããŸããããbash以å€ã®äŸåé¢ä¿ããªãããšãèãããšãäžèšã®ãœãªã¥ãŒã·ã§ã³ãç§ãèŠã€ããæè¯ã®ãœãªã¥ãŒã·ã§ã³ã§ãã
@tylerbuchea 1ã€ã®æ±ãæ¹æ³ã¯ãstderrã/ dev / nullã«ãªãã€ã¬ã¯ãããããšã§ã:)
docker stack deploy --compose-file=<(docker-compose -f docker/prod.yml -f docker/dev.yml config 2> /dev/null) <stackname>
æ¥ãããããªãã§ãð
extend
ã«é¢ãããã®æ··ä¹±ã«ã€ããŠãããã¥ã¡ã³ãã¯ããæ確ã«ãã¹ãã ãšæããŸãã
extend
ã®èª¬æã¯ããŠãŒã¶ãŒãã¢ããã°ã¬ãŒãæ¹æ³ã®ããã¥ã¡ã³ãã«ãªãã€ã¬ã¯ãããŸããã¢ããã°ã¬ãŒãæ¹æ³ã®ããã¥ã¡ã³ãã¯ã詳现ã«ã€ããŠextend
ã®èª¬æã«æ»ããŸãã ããã¯ååã«åœ¹ã«ç«ã¡ãŸããããŠãŒã¶ãŒãšããŠããã®åé¡å
šäœã«å¯ŸåŠããæ¹æ³ãç§ãæã£ãŠãããªãã·ã§ã³ãããã³èæ
®ãã¹ãããšã«ã€ããŠã®å©ããæåŸ
ããŸãã v3ããextend
ãåé€ãããšãã決å®ã®èåŸã«ã¯ãæ確ãªã¢ã€ãã¢ããã£ããšç¢ºä¿¡ããŠããŸãã
èŠãïŒ
https://docs.docker.com/compose/extends/#extending -services
https://docs.docker.com/compose/compose-file/compose-versioning/#upgrading
@tylerbucheaã®åªããã¯ã³ã©ã€ããŒbashããŒã¹ã®ãœãªã¥ãŒã·ã§ã³ã«é¢ããŠã¯ã
æ®å¿µãªãããããã€ãã®é«åºŠãªDockerã¹ã¿ãã¯æ©èœããµããŒãããŠããŸããã
WARNING: Some services (web) use the 'deploy' key, which will be ignored. Compose does not support 'deploy' configuration - use `docker stack deploy` to deploy to a swarm.
WARNING: Some services (web) use the 'configs' key, which will be ignored. Compose does not support 'configs' configuration - use `docker stack deploy` to deploy to a swarm.
https://github.com/docker/cli/pull/569ã18.03ããããŒãžãããããã docker stack deploy
ã¯è€æ°ã®äœæãã¡ã€ã«ã1ã€ã«ããŒãžããããšããµããŒãããŸãã ããã¯ãcomposefile圢åŒv2ã®extends
ããŒãå®å
šã«çœ®ãæãããã®ã§ã¯ãããŸããããããå€ãã®ãŠãŒã¹ã±ãŒã¹ãã«ããŒããŠããããšãé¡ã£ãŠããŸãðŒ
ç§èªèº«ã®åé¿çã¯ã yq
ã䜿çšããããš
yq merge --overwrite docker-stack.yml docker-stack.preprod.yml > merged-docker-stack.yml
docker stack deploy -c merged-docker-stack.yml preprod
@ Lucas-Cã¯ãåºåã«deploy
config
ããŒãšdocker-compose -f docker/prod.yml -f docker/dev.yml config
ãå®è¡ãããšãããã確èªã§ããŸã
ããã¯ãäœæãã¡ã€ã«v3.4以éçšã§ãã ã¯ãã¹yamlåç §ïŒéšåçïŒããµããŒãããŸãã ç§ã¯ãã®zshãšã€ãªã¢ã¹/ perlã¹ã¯ãªããã§çµäºããŸããïŒ
alias regen=$'perl -MFile::Slurp=read_file -MYAML=Load,Dump -MHash::Merge::Simple=merge -E \'
local $YAML::QuoteNumericStrings = 1;
$n=read_file("/data/docker-compose.yml");
$s=Dump(merge(map{Load($n.read_file($_))}@ARGV));
local $/ = undef;
$s =~ s/\\bno\\b/"no"/g;
say $s;
\' $(find /data -mindepth 2 -maxdepth 4 -name docker-compose.yml) >! /data/x-docker-compose.yml'
regen
export COMPOSE_FILE=/data/x-docker-compose.yml
é·æïŒperlã¯äžè¬çãªããŒã«ã§ããããã¹ãŠã®perlã¢ãžã¥ãŒã«ããçæãé«éã§ãã
çæïŒç§ã¯ããã¯ãå«ãã§ãããDRYã®ä»ã®æ¹æ³ã¯ãããŸããã æçµçãªdocker-composeã¯çŽ900è¡ã§ãã æåãã1ã€ã®ãã¡ã€ã«ãšããŠãµããŒãããŠã»ããã§ããïŒ ãã€ããªdockerãpythondocker-composeã§perlhackã§ã©ããããã®ã¯æ®å¿µã§ãã
ã©ãããã°extendsã®ãããªæ©èœãåãåºãããšãã§ããŸããïŒ ããã¯ã³ã¢æ©èœã®ããã§ãã
䜿çšããŠdocker-compose config
ã®æšæºå
¥åãªãã·ã§ã³ã«ãã€ãdocker stack deploy -c -
ç§ã®ããã«åé¡ã解決ããŸããã
docker-compose -f docker-compose.yml \
-f docker-compose.extended.yml \
config \
| docker stack deploy -c - my-stack
ç§ã¯ãããè©ŠããŠããŸãããã docker stack deploy
ããã¥ã¡ã³ãã§ãããã«æ°ã¥ããŸããã
åºæ¬æ§æãç°å¢åºæã®ãªãŒããŒã©ã€ããªã©ãæ§æãè€æ°ã®äœæãã¡ã€ã«ã«åå²ãããŠããå Žåã¯ãè€æ°ã®
--compose-file
ãã©ã°ãæå®ã§ããŸãã
ãããäŸãšããŠïŒ
docker stack deploy --compose-file docker-compose.yml -f docker-compose.prod.yml vossibility
https://docs.docker.com/engine/reference/commandline/stack_deploy/#compose -file
extends
ãåé€ããçç±ã¯ã©ããã«ææžåãããŠããŸããïŒ å
¬åŒããã¥ã¡ã³ãã§ã¯èª¬æãããŠããªãããã§ããäŸïŒ https ïŒ//docs.docker.com/compose/extends/#extending -services
ãŠãŒã¶ãŒãè«ççæ ¹æ ãç解ã§ããã°ããŠãŒã¶ãŒã¯åé€ã«ã©ã®ããã«å¯Ÿå¿ãããã«ã€ããŠããè¯ãã¢ã€ãã¢ãéçºããããšãã§ããŸãã ããããšãã
@ shaun-blakeç§ã¯è€æ°ã®äœæãã¡ã€ã«ã䜿çšããããšã«ãªããŸããã ããã人ã ã䜿ãã¢ãããŒãã®ããã§ãã ç¶æ¿ãšããããã¯ãããã¯ã¹ã€ã³ã®ãããªãã®ã§ãã ãã«ããŸãã¯å®è¡ãããšãã«ãæ£ããç°å¢yamlãã³ãã¬ãŒããdocker-compose.override.ymlã«ã³ããŒããŸãã
è€æ°ã®ãããã³ã°ãŠã£ã³ããŠã«ã¯ããã¡ã€ã«ãæ§æããïŒäŸïŒ base.yml
ã local.yml
ã prod.yml
ïŒä»ã®ãã¡ã€ã«ããã®ãµãŒãã¹å©çšYAMLã¢ã³ã«ãŒãèãããŠããªããã¡ã¯ã¿ãªã³ã°ãµãŒãã¹å®çŸ©ãè€æ°ã®YMLãã¡ã€ã«ã®äžã§å®çŸ©ããããšãã§ããŸããã§ããã®ã§ã ã
泚ããã®åé¡ã¯ãã»ãšãã©ã®ã³ã¡ã³ã13æ¥ã§ããïŒ https://github.com/moby/moby/issues?q=is%3Aissue+is%3Aopen+sort%3Acomments-descãšç¬¬äžæã奜ãã§ããã
ãŠãŒã¶ãŒãè«ççæ ¹æ ãç解ã§ããã°ããŠãŒã¶ãŒã¯åé€ã«ã©ã®ããã«å¯Ÿå¿ãããã«ã€ããŠããè¯ãã¢ã€ãã¢ãéçºããããšãã§ããŸãã ããããšãã
ããããextends
ãåé€ããçç±ã«é¢ããããã¥ã¡ã³ãã®+1 ...
ã»ãŒ1幎ååŸããŸã _extends_ã¯ãããŸããã Cmonãdevsãuã¯ä»£æ¿æ段ãäžããã«sthãåé€ããŸããã
圌ãã¯ããããŸããã圌ãã¯äœæ²ãšåŒã°ãã代æ¿æ¡ãæäŸããŸãã ã¹ã¬ããã§ç§ã®çããèªãã§ãã ããã
-ãã£ãªãã
2018幎7æ30æ¥ã«ã¯ã9ïŒ41ã«ãXiaohuiå[email protected]ã¯æžããŸããïŒ
ã»ãŒ1幎ååŸããŸã 延é·ã¯ãããŸããã Cmonãdevsãuã¯ä»£æ¿æ段ãäžããã«sthãåé€ããŸããã
â
ããªããã³ã¡ã³ãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHub https://github.com/moby/moby/issues/31101#issuecomment-408790200ã§è¡šç€ºããããã¹ã¬ããããã¥ãŒãããŸãhttps://github.com/notifications/unsubscribe-auth/AAS_0AOynjpfVnVo4ZqciMbmjBmkcTQ3ks5uLsbN
@dedalozzo ã "ã¹ã¬ããå " ==ïŒ
ããã§ç§ã®ã³ã¡ã³ããèŠãŠãã ããïŒ
https://github.com/moby/moby/issues/31101#issuecomment -329527600 https://github.com/moby/moby/issues/31101#issuecomment-329527600
åºæ¬çã«ã.ymlãã¡ã€ã«ã®ãã§ãŒã³ã䜿çšããŠãã³ã³ãããŒã®æ§æããªãŒããŒã©ã€ããŸãã¯å€æŽããå¿ èŠããããŸãã
ãè€æ°ã®äœæãã¡ã€ã«ã®æå®ãããèªã¿ãã ãã
è€æ°ã®-fæ§æãã¡ã€ã«ãæå®ã§ããŸãã è€æ°ã®ãã¡ã€ã«ãæäŸããå ŽåãComposeã¯ãããã1ã€ã®æ§æã«çµåããŸãã Composeã¯ããã¡ã€ã«ãæå®ããé åºã§æ§æããã«ãããŸãã åŸç¶ã®ãã¡ã€ã«ã¯ãåã®ãã¡ã€ã«ããªãŒããŒã©ã€ãããŠè¿œå ããŸãã
https://docs.docker.com/compose/reference/overview/ https://docs.docker.com/compose/reference/overview/
ãã®ã¢ãããŒãã§ã¯ãç¶æ¿ãããåæã䜿çšããŠãå€ããå°ãªããåãçµæãååŸããŸãã
2018幎7æ30æ¥ã«ã¯ãååŸ3æ23åã§ãã»ã«ãã³Teodorescuã®[email protected]ã¯æžããŸããïŒ
@dedalozzo https://github.com/dedalozzo ã "in the thread" ==ïŒ
â
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHub https://github.com/moby/moby/issues/31101#issuecomment-408880809ã§è¡šç€ºããããã¹ã¬ããããã¥ãŒãããŸãhttps://github.com/notifications/unsubscribe-auth/AAS_0FZO30NplqHRid_Id8VBOJW7nk5Iks5uLxbigaJpZM4
çµã¿åããããšåãæ¡åŒµæ§ãåãæ»ãããšãã§ããªãã§ãããã
yamlæ¡åŒµãã£ãŒã«ãïŒ2.1 + / 3.4 +ãæ§æïŒ
ãããã®x-
ãã£ãŒã«ããä»ã®ãã¡ã€ã«ã
ãããã£ãŠãã«ãŒãinclude
ãªã¹ãã§ãããŒããããã¡ã€ã«ãæå®ã§ããããã«ããããšãã§ããŸãã
ãããã¯x-include
ã«å
¥ããããæšæºã®YAMLã¢ã³ã«ãŒãšããŒãžãä»ããŠå³åº§ã«äœ¿çšã§ããŸãã
# /docker-compose.yml
version: '2.1'
volumes:
nginx_file_sockets:
external: false
driver: local
services:
reverse_proxy:
extends:
file: reverse_proxy/docker-compose.yml
service: proxy
restart: 'always'
ports:
- "80:80"
- "443:443"
volumes:
- nginx_file_sockets:/sockets/nginx
reverse_proxy_test:
extends:
file: reverse_proxy/docker-compose.yml
service: proxy
restart: 'always'
ports:
- "8080:80"
- "8443:443"
volumes:
- nginx_file_sockets:/sockets/nginx
web:
extends:
file: webservice/docker-compose.yml
service: app
restart: 'always'
environment:
ENVIRONMENT: 'production'
DB_USER: ${WEB1_DB_USER}
DB_PASSWORD: ${WEB1_DB_PASS}
volumes:
- nginx_file_sockets:/sockets/nginx
web_staging:
extends:
file: webservice/docker-compose.yml
service: app
restart: 'no'
environment:
ENVIRONMENT: 'staging'
DB_USER: ${WEB1_DB_USER}
DB_PASSWORD: ${WEB1_DB_PASS}
volumes:
- nginx_file_sockets:/sockets/nginx
# /proxy/docker-compose.yml
version: '2.1'
services:
proxy:
build: ./
volumes:
- /certs:/certs:ro
# /webservice/docker-compose.yml
version: '2.1'
services:
app:
build:
context: ./folder
args:
LINUX_VERSION: 20.s
LINUX_FLAVOR: dash
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- bootstrap.memory_lock=true
ulimits:
memlock:
soft: -1
hard: -1
# /proxy/docker-compose.yml
version: '3.9'
services:
proxy:
&proxy
build: ./
volumes:
- /certs:/certs:ro
# /webservice/docker-compose.yml
version: '3.9'
services:
app:
&app
build:
context: ./folder
args:
LINUX_VERSION: 20.s
LINUX_FLAVOR: dash
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- bootstrap.memory_lock=true
ulimits:
memlock:
soft: -1
hard: -1
# /docker-compose.yml
version: '3.9'
include:
- /proxy/docker-compose.yml
- /webservice/docker-compose.yml
volumes:
nginx_file_sockets:
external: false
driver: local
services:
reverse_proxy:
<< : *proxy
restart: 'always'
ports:
- "80:80"
- "443:443"
volumes:
- nginx_file_sockets:/sockets/nginx
reverse_proxy_test:
restart: 'always'
<< : *proxy
ports:
- "8080:80"
- "8443:443"
volumes:
- nginx_file_sockets:/sockets/nginx
web:
<< : *app
restart: 'always'
environment:
ENVIRONMENT: 'production'
DB_USER: ${WEB1_DB_USER}
DB_PASSWORD: ${WEB1_DB_PASS}
volumes:
- nginx_file_sockets:/sockets/nginx
web_staging:
restart: 'no'
extends:
file: web1/docker-compose.yml
service: app
environment:
ENVIRONMENT: 'staging'
DB_USER: ${WEB1_DB_USER}
DB_PASSWORD: ${WEB1_DB_PASS}
volumes:
- nginx_file_sockets:/sockets/nginx
@@ /proxy/docker-compose.yml @@
-version: '2.1'
+version: '3.9'
services:
proxy:
+ &proxy
build: ./
volumes:
- /certs:/certs:ro
```
```diff
@@ /webservice/docker-compose.yml @@
-version: '2.1'
+version: '3.9'
services:
app:
+ &app
build:
context: ./folder
args:
LINUX_VERSION: 20.s
LINUX_FLAVOR: dash
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- bootstrap.memory_lock=true
ulimits:
memlock:
soft: -1
hard: -1
```
```diff
@@ /docker-compose.yml @@
-version: '2.1'
+version: '3.9'
+include:
+ - /proxy/docker-compose.yml
+ - /webservice/docker-compose.yml
volumes:
nginx_file_sockets:
external: false
driver: local
services:
reverse_proxy:
- extends:
- file: reverse_proxy/docker-compose.yml
- service: proxy
+ << : *proxy
restart: 'always'
ports:
- "80:80"
- "443:443"
volumes:
- nginx_file_sockets:/sockets/nginx
reverse_proxy_test:
- extends:
- file: reverse_proxy/docker-compose.yml
- service: proxy
+ << : *proxy
restart: 'no'
ports:
- "8080:80"
- "8443:443"
volumes:
- nginx_file_sockets:/sockets/nginx
web:
- extends:
- file: webservice/docker-compose.yml
- service: app
+ << : *app
restart: 'always'
environment:
ENVIRONMENT: 'production'
DB_USER: ${WEB1_DB_USER}
DB_PASSWORD: ${WEB1_DB_PASS}
volumes:
- nginx_file_sockets:/sockets/nginx
web_staging:
- extends:
- file: webservice/docker-compose.yml
- service: app
+ << : *app
restart: 'no'
environment:
ENVIRONMENT: 'staging'
DB_USER: ${WEB1_DB_USER}
DB_PASSWORD: ${WEB1_DB_PASS}
volumes:
- nginx_file_sockets:/sockets/nginx
```
<hr>
Resulting in the final version, which should be already yaml parsable:
```yml
# /docker-compose.yml
version: '3.9'
#include:
# - /proxy/docker-compose.yml
# - /webservice/docker-compose.yml
x-include:
/proxy/docker-compose.yml:
version: '3.9'
services:
proxy:
&proxy
build: ./
volumes:
- /certs:/certs:ro
/webservice/docker-compose.yml:
version: '3.9'
services:
app:
&app
build:
context: ./folder
args:
LINUX_VERSION: 20.s
LINUX_FLAVOR: dash
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- bootstrap.memory_lock=true
ulimits:
memlock:
soft: -1
hard: -1
volumes:
nginx_file_sockets:
external: false
driver: local
services:
reverse_proxy:
<< : *proxy
restart: 'always'
ports:
- "80:80"
- "443:443"
volumes:
- nginx_file_sockets:/sockets/nginx
reverse_proxy_test:
<< : *proxy
restart: 'no'
ports:
- "8080:80"
- "8443:443"
volumes:
- nginx_file_sockets:/sockets/nginx
web:
<< : *app
restart: 'always'
environment:
ENVIRONMENT: 'production'
DB_USER: ${WEB1_DB_USER}
DB_PASSWORD: ${WEB1_DB_PASS}
volumes:
- nginx_file_sockets:/sockets/nginx
web_staging:
<< : *app
restart: 'no'
environment:
ENVIRONMENT: 'staging'
DB_USER: ${WEB1_DB_USER}
DB_PASSWORD: ${WEB1_DB_PASS}
volumes:
- nginx_file_sockets:/sockets/nginx
åããã¡ã€ã«å ã§ããŒããç¹°ãè¿ãããªãããã«ããããã«ãèšèªä»æ§èªäœã«çµã¿èŸŒãŸããŠããYAMLæ©èœã§ããAFAIKã å¥ã®ãã¡ã€ã«ã䜿çšããå Žåãããã¯åºæ¬çã«äžå¯èœã§ãã
ãã®æ©èœãYAMLä»æ§èªäœã«ææ¡ããå¿ èŠããããŸãã
ãã®è°è«ã¯æ¬¡ã®ããã«ãªããŸãã
docker-compose -f file.yml
ãdocker-compose -f file.yml -f file_extension.yml
ãããã¯ããã«åªããŠããã®ã¯ãªãã§ããïŒã³ãã³ãã©ã€ã³ã§äœæ¥ããå Žåã«ã®ã¿ãäžäŸ¿ãé¡èã«ãªããŸãã ç§ãã¡ã¯ãããå°ãã®éèªããªããã°ãªããŸããã ãšã«ãããä»ã®ãã¹ãŠã¯ã¹ã¯ãªããå¯èœã§ãã
ãããæ¬åœã®è°è«ã§ããå Žåã docker-compose up service
ã¯docker-compose -f service.yml up
ãããåªããã»ãã³ãã£ã¯ã¹ãæã£ãŠããŸãïŒããŒã«ã«éçºïŒå¥åã³ãã³ãã©ã€ã³ïŒã«å¿
èŠãªãã¹ãŠãdocker-compose.override.yml
å®çŸ©ããŸãã
äžããããã»ãã³ãã£ã¯ã¹ã¯éåžžã«ã¯ãªãŒã³ã§ããèãæãããŠããŸãã ã³ãã³ãã©ã€ã³ã§ã®äœ¿çšã«service.yml
ãæ¡çšããããšã¯ãããããUXãäžããããšãæå³ããŸãã ããã«ã¯å¥ã®è°è«ããããŸããäžèŠãããšæããã§ããã docker-compose.yml
ãšã¯äœãã service.yml
ã¯äœã§ããå®éã«ã¯äœã§ãããŸããŸããã
å 責äºé ïŒæçºçãªæèŠã ïŒwinkïŒèãããããã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ãèæ ®ããŠããŸããã§ãã...
ãã®é·æã«ãããè°è«ã®åŸããããæåãããã©ããã¯ããããŸããã IMHOãextendsã¯ã¯ãŒã«ã§ãåã«åé€ããã®ã§ã¯ãªããå°ãªããšãæ éã«éæšå¥šã«ããŠããè°è«ããã«éããããŸããã
ç§ãã¡ã«ã§ããããšã®1ã€ã¯ãv2ãšv3ã®ããã¥ã¡ã³ãã¹ããŒãªãŒãæ¹åããããšã ãšæããŸãã å€ãã®äººãv3ãv2ã«
v2ïŒ docker-composecliã®ã¿ã åäžã®ãã·ã³ãšãšã³ãžã³ã«çŠç¹ãåœãŠãéçºã¯ãŒã¯ãããŒã CIãã«ã/ãã¹ãã¯ãŒã¯ãããŒã«ãé©ããŠããŸãã ãã®ããŒãžã§ã³ã®ãã©ã³ãã¯ã2017幎12æã«v17.12ã§æ°æ©èœãåãåããŸããã
v3ïŒãã«ãããŒãã®æŠå¿µãåããSwarm / Kubeã¹ã¿ãã¯ã«æé©ã§ãã»ãšãã©ã®docker-composecliæ©èœã®ãµããŒããç¶æããŸãã
SwarmãŸãã¯DockerEnterprise Kubernetesã¹ã¿ãã¯ã䜿çšããŠããªãå Žåã v3ã䜿çšããçç±ã¯ããã¯ãã«ã¹ãã§ãã¯ä»ãã®depends_onãå«ããã¹ãŠã®docker-compose cliæ©èœãå©çšã§ããŸãïŒåŸ æ©ã¹ã¯ãªãããåé¿ããããïŒã
v3ã¯ãåäžãšã³ãžã³ã®docker-composecliã¯ãŒã«ããšãã«ãããŒãã¯ã©ã¹ã¿ãŒã¯ãŒã«ãã®æ©èœãããŒãžããããã«äœæãããŸããã ãã¹ãŠã®v2æ©èœïŒdepends_onãªã©ïŒãã¯ã©ã¹ã¿ãŒã§æå³ããªãããã§ã¯ãããŸããã ä»ã®æ©èœïŒextendãªã©ïŒã¯v3ã«çµã¿èŸŒãŸããŠããŸããããããããv3ãååšããåã¯ããã¹ãŠã®ã³ãŒããdocker-compose Pythonã§ãããv3.0ãSwarmããµããŒãããã«ã¯ãdocker cliGoã§ãããæžãçŽãå¿ èŠããããŸããããããŠä»ã圌ãã¯ããããšã³ãžã³ããŒã¢ã³ã«åã³æžã蟌ãã§ãæçµçã«ã¯ãŸã ååšããªãSwarmã¹ã¿ãã¯APIãäœæããŠããŸãã
ãã®åé¡ã«äžæ £ããªäººã®ããã«ã3.0ãªãªãŒã¹ä»¥éãããŸããŸãªæ§æããã³ãã¬ãŒããããã³ããŒã ã¯ãŒã¯ãããŒã®æžå¿µã解決ããããã«è¡ãããŠããäœæ¥ã®å€ãã«ã泚æããŠãã ããã
https://docs.docker.com/compose/extends/#extending -servicesã®ããã¥ã¡ã³ãã§ã¯ãextendsããŒã¯ãŒããv3ã§åé€ãããŠããããšãèµ€ã§åŒ·èª¿ããå¿
èŠããããŸããããã¯ãåãªã_note_ãããéèŠã ããã§ãã
ããã¥ã¡ã³ãã移è¡ããŠã¹ããã³ã°ããæ©èœããªããªã£ãçç±ã確èªããŠãããããã€ãã®ã¯ããŒãºãããåé¡ã远跡ããŠããããã«å°éããå
ã®ããã¥ã¡ã³ãã«æ»ã£ãŠæèšã«æ°ã¥ããŸããã
extendsããŒã¯ãŒãã¯ãComposeãã¡ã€ã«ããŒãžã§ã³2.1ãŸã§ã®ä»¥åã®Composeãã¡ã€ã«åœ¢åŒã§ãµããŒããããŠããŸãïŒv1ã®extendsããã³v2ã®extendsãåç §ïŒããComposeããŒãžã§ã³3.xã§ã¯ãµããŒããããŠããŸããã
次ã®ããã«èšãæããããšãã§ããŸãïŒ
extendsããŒã¯ãŒãã¯ãComposeããŒãžã§ã³3.xã§åé€ãããŸããããComposeãã¡ã€ã«ããŒãžã§ã³2.1ãŸã§ã®ä»¥åã®Composeãã¡ã€ã«åœ¢åŒã§åŒãç¶ããµããŒããããŠããŸãïŒv1ã®extendsããã³v2ã®extendsãåç §ïŒã
ããã¯å°ããªéãã§ãããããã¥ã¡ã³ããã¹ããã³ã°ãããšãã«èŠèœãšããã¡ãªéãã§ãã
@krisrpPRãå§ãŸããŸãã^^^
ããããšã@BretFisher
v2ã®ååããversionïŒdocker-cliãã«ãv3ã®ååããversionïŒswarm / kubeãã«å€æŽããäºå®ã¯ãããŸããïŒ
ä»ã®ã»ãšãã©ã®ããŒãžã§ã³ç®¡çã¹ããŒã ã§v3ãv2ã«åã£ãŠä»£ããæ¹æ³ãèãããšããã®ããã«åºå¥ããæ¹ãçã«ããªã£ãŠããŸãã çŸåšãäž¡æ¹ãšãç¶æãããåå²ããŠããã®ã§ãç§ãééããªãéããäž¡æ¹ãšããã°ããã®éååšããããã§ãã
@krisrpéã«ãã¡ãžã£ãŒããŒãžã§ã³çªå·ãã€ã³ã¯ãªã¡ã³ãããçç±ã¯ãäºææ§ã®çžéã瀺ãããã§ãã
@ cpuguy83ç§ã¯ä»ã®ããšãæ瀺ããŠããŸããã§ããã ããæ確ãŸãã¯æ確ã«ãªã£ãŠããªãããšããè©«ã³ããŸãã
IIRC Gnome 2ïŒ3ããããããã®ç¬ç«ãããã©ãŒã¯ãç¶æãããŠããæ°å¹Žåã«ãã®æ··ä¹±ãçµéšããŸããã
ããŒãžã§ãã³ã°ïŒé§æŽèœïŒã®ã»ãã³ãã£ã¯ã¹ã«ã€ããŠè°è«ããããã«ãã®ã¹ã¬ãããè±ç·ãããããªãã®ã§ããã®ãŸãŸã«ããŠãããŸãã å é±ã®v2ãšv3ã®ããã¥ã¡ã³ãã®æ¹åã«é¢ãã
@ shin- @ cpuguy83 1幎以äžåŸã«ãã®åé¡ãèŠãŠãããŒãžã§ã³3ã«æ»ããªãçç±ã¯äœã§ããïŒ
ãç§ãã¡ã¯ãããå¥ã®æ¹æ³ã§è¡ãããšãã§ããã以å€ã¯ããã«ã€ããŠå€ããèŠã€ããããšãã§ããŸããã§ããïŒãããå®éã®ããè¯ã解決çã¯æäŸãããŸããã§ããïŒ
æè¡çéçã¯ãããŸããïŒ ãããšãåã«ãã«ãªã¯ãšã¹ãããªãã®ã§ããïŒ
çµå±ã®ãšãããç§ã®compose2.1ãã¡ã€ã«ã¯ãŸã æ£åžžã«å®è¡ãããŠããŸãã
ããã ãã§ãªããå€æŽãã°ã«ã¯ãããã¯åé€ãããŸããã詳现ã«ã€ããŠã¯ããã¢ããã°ã¬ãŒãæ¹æ³ããåç §ããŠãã ããããšèšèŒãããŠããŸãã ã¢ããã°ã¬ãŒãæ¹æ³ã®è©³çŽ°ã«ã€ããŠã¯ãã¢ããã°ã¬ãŒãæ¹æ³ããèŠãŠãããã詳现ã«ã€ããŠã¯ããµãŒãã¹ã®æ¡åŒµããåç §ããŠãã ããããšæžãããŠããŸãã ãæ¡åŒµãµãŒãã¹ãã«ç§»åãããšããã¡ã€ã«ãæ¡åŒµããæ¹æ³ãããããããããŸããããããã¯åé€ãããŸããã詳现ã«ã€ããŠã¯ãå€æŽãã°ãåç §ããŠãã ããããšè¡šç€ºãããŸãã
ãã®æç¹ã§ãããã¯ããã¥ã¡ã³ãäœæè ãæŒããŠããæ®é ·ãªåè«ã®ãââãã§ãã
æçµçã«ããã¹ã¿ãã¯ã圢åŒã¯ããã§ã¯å¶åŸ¡ããããDockerCLIã®äžéšã§ãã
å人çã«ã¯v3ããé€å€ãããçç±ã¯ããããŸãã...å®éã«èª°ããè¿œå ããããšããŠããã®ãèŠãããšããªããšæããŸãã
ãããdocker / cliã§è¡šç€ºããã®ãæåãããããŸãã...ãããããæ©èœãããã«ãããã®ããã«æ©èœããé«ã¬ãã«ã®ããã¥ã¡ã³ãå€æŽã䌎ãPRã§ãããããã«ã€ããŠè©±ãåããèšèšãæ¿èªããããå®è£
ãè¿œå ã§ããŸãã ã
åºæ¬çã«ã誰ãããããæããªããPRãããªããã æåŠãããå Žåã«å€ãã®æéãç¡é§ã«ããªãããã«ããããã«ãããã¥ã¡ã³ããå€æŽããããšããå§ãããŸã...ç¹°ãè¿ããŸãããv3ããçç¥ãããçç±ãããããŸããã
åäžã docker-composeãå床䜿çšããåã«ãããã解決ãããã®ãåŸ ã£ãŠããŸãã
+1ãããä¿®æ£ããŠãã ãããæ¡åŒµããŒã¹ã®composeãã¡ã€ã«ããããcomposeãswarmã«äœ¿çšã§ããªãããã§ãã
æ¡åŒµæ©èœã®+1
ããã«é¢ãããã¥ãŒã¹ã¯ãããŸããïŒ
ãŸã åŸ ã£ãŠããŸã
ãã£ã¡ãäžç·ã ãŸã åŸ ã£ãŠããã
ãã¹ãŠã®ã¢ããããŒãïŒ
ãªãåãåºãããã®ããçç±ã¯ãããŸãããïŒ
2019幎8æ5æ¥æææ¥ã11ïŒ10 Jaykishanã notifications @ github.comã¯æ¬¡ã®ããã«æžããŠããŸãã
ãã¹ãŠã®ã¢ããããŒãïŒ
â
ããªããã³ã¡ã³ãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/moby/moby/issues/31101?email_source=notifications&email_token=ABOE6GA4CXY6ESMZMTDSFGDQC74CZA5CNFSM4DANZGS2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2Z
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/ABOE6GCEFFJ3SOLDWRWX2IDQC74CZANCNFSM4DANZGSQ
ã
ãã¹ãŠã®ã¢ããããŒãïŒ
ã ãã..ããã¯ã»ãŒ3幎ã§ã...
ããããç§ã¯ãŸã ãããçéžããããšãæãã§ããŸãïŒD
ãããæ»ã£ãŠããªãå Žåã¯ãæ¡åŒµããããã®äœããã®ä»£æ¿æ段ãå¿
èŠã§ãã æœè±¡ãµãŒãã¹ãèš±å¯ããªãã®ã¯ãªãã§ããïŒ ãã¡ã€ã«åœ¢åŒã¯ãã©ããã§ããã¹ãŠã®ãµãŒãã¹å®£èšã1ã€ã®ãã¡ã€ã«ã«å«ãŸããŸãã ïŒ &
ãä»ããŠïŒããŒãã®ãšã€ãªã¢ã¹ãè¿œå ããyamlã®æ©èœãšçµã¿åãããŠæœè±¡ãµãŒãã¹ã䜿çšãããšã <<:
æŒç®åãä»ããŠãããã®ãšã€ãªã¢ã¹ãåå©çšã§ããŸãã
ãªãã§3幎!! ããªãã¯èª°ãæ°ã«ããªãããšã«éäžããŠåããŠããããã§ã
ããã«é¢ããæŽæ°ã¯ãããŸããïŒ
ããã¯åãã§ãã Terraformã¯ã³ã³ããžã·ã§ã³ã䜿çšããŸã-ããã¯å®è¡å¯èœã§ãããªãã³ã³ããžã·ã§ã³ã¯ãã®è¯ããã¶ã€ã³ãã©ã¯ãã£ã¹ã«åŸãããšãã§ããªãã®ã§ããïŒïŒ
Terraformã¢ãžã¥ãŒã«ã®æ§æ
Terraformã®ãã¹ããã©ã¯ãã£ã¹
ãåããªãããããã
@ Cristian-Malinescuã©ãããå®è£
ããŠãã ããã
ããã¯ç¡æã®ãªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ã§ãã
ãã®ãã£ããã§ä»ã®äººãšåãããã«æå¥ãèšã代ããã«ã
ããã¯ãå®éã«ã¯ãããã§ã¯äœã®äŸ¡å€ãè¿œå ããŸããã
äœåºŠãèšã£ãããã«ããããŸã§èª°ããããå®è£
ããããããŸããã§ããã
ã ãããä»ã®èª°ããkãä¿®æ£ããå¿
èŠãããã®ã¯åé¡ã§ããããããšãã
@luckydonald @ Cristian-Malinescuãç°¡å/ååçæ»æçãªçãã§
ã¹ã¬ãããã¹ããã³ã°ãããµããŒããããŠããYAMLæ©èœã掻çšããããšãèšåãããŠããŸãã
ãã®äŸã圹ç«ã€ãããããªããšæã£ãã
@nomasprimeãã®çºèŠã«æè¬ããŸãïŒ ç§ã¯èªåã®ãããžã§ã¯ãã§v2ãšv3ã®ã©ã¡ããã決å®ããŠããŸããããããã«ãããã®ã¹ã¬ããã®å€§ããªãžã¬ã³ãã解決ãããŸããã ãããã®ä»£æ¿ãœãªã¥ãŒã·ã§ã³ãæ¡åŒµãµãŒãã¹æ©èœã®å ¬åŒããã¥ã¡ã³ãã«èšèŒãããŠããªãããšã«é©ããã
ããã¥ã¡ã³ãããŒãžã®å³åŽã®ããã²ãŒã·ã§ã³ããŒã«ããRequest docs changes
ãªã³ã¯ã䜿çšããè¯ãæ©äŒã®ããã§ããã
@nomasprimeããããã®ã¢ã€ãã¢ã¯ä»¥åãã®ã¹ã¬ããã«ãã£ãã
ãããä»ã®ymlãã¡ã€ã«ã®ãã¡ã€ã«èªã¿èŸŒã¿ã¡ã«ããºã ãšçµã¿åãããããšãã§ããã°ãå€ãdepends
æ©èœããã¹ãŠæã€ããã«æ¬åœã«å¿
èŠãªã®ã¯ããã ãã§ãã
äžèšãåç §ããŠãã ãããäŸïŒ https ïŒ
ããŸã_èªã¿ããã_ã§ã¯ãããŸããããå°ãªããšã_å¯èœ_ã§ãã
@nomasprimeãã®çºèŠã«æè¬ããŸãïŒ ç§ã¯èªåã®ãããžã§ã¯ãã§v2ãšv3ã®ã©ã¡ããã決å®ããŠããŸããããããã«ãããã®ã¹ã¬ããã®å€§ããªãžã¬ã³ãã解決ãããŸããã
@arseniybanayev Mediumã®èšäºã«ã¯ãv3ã«ã€ããŠã®ã¿èšèŒãããŠããŸããã v2ã®æ°ããããŒãžã§ã³ã§ã¯ãswarm
ã§ã¯ãªãdocker-compose
ã䜿çšãããããv2ïŒããå
·äœçã«ã¯2.4ïŒãéžæããŸãïŒv3ã¯ã³ã³ããã¡ã¢ãªã®å¶éãªã©ã®v2ã®äžéšã®æ©èœããµããŒãããŠããŸããïŒ
ãŸããv3ã¯ãã³ã³ããã¡ã¢ãªã®å¶éãªã©ã®v2ã®äžéšã®æ©èœããµããŒãããŠããŸããã
v3ã¯ã¡ã¢ãªã®å¶éããµããŒãããŠããŸããããã£ãŒã«ãã¯deploy -> resources -> limits
ãŸãhttps://docs.docker.com/compose/compose-file/#resources
@thaJeztahã€ãŸãã docker-compose
ïŒä»¥åã®ã³ã¡ã³ãã§åç
§ããŠãããããžã§ã¯ãã§çŸ€ãã䜿çšããŠããªãããïŒã IIRCã®å±éã¯çŸ€ãã®ããã ãã§ãããïŒ
swarmãšlocalã«å¥ã ã®èšå®ãããã®ã¯çã«ããªã£ãŠããŸããïŒ ããã2ã€ã¯äºãã«ç«¶åããŠããããã§ãã åœç¶ã®ããšãªãããDockerã¯çŸ€ãã®äœ¿çšéãå¢ãããããšèããŠããŸãããå€ãã®äººã¯ããŒã«ã«éçºã®ããã«composeã®ã¿ã䜿çšããŠããŸãã
ç§ã¯ãECSãk8sããŸãã¯GAEã®ããããã䜿çšããŠãæ¬çªç°å¢ã§ã¹ãŠã©ãŒã ããã³å®è¡ã³ã³ãããŒã䜿çšããããšããããŸããã
ã»ãšãã©ã®ãªãã·ã§ã³ã¯ãswarm / kubernetesãµãŒãã¹ãšãcomposeãä»ããŠãããã€ãããã³ã³ãããŒã®äž¡æ¹ã§ç¿»èš³å¯èœ/䜿çšå¯èœã§ããå¿
èŠããããŸãã memory
å¶éãdocker-compose
é©çšãããªãçç±ã確èªããå¿
èŠããããŸã
ãŸã æ¡åŒµæ©èœããããŸããããç§ã®äž»ãªãŠãŒã¹ã±ãŒã¹ã§ã¯ã COMPOSE_FILE
ç°å¢ãä»ããŠè€æ°ã®Dockeräœæãã¡ã€ã«ã«åãæ¿ããŸããã ç§ã¯äž»ã«ãç°ãªããã¹ã¯ãŒããŸãã¯æ§æã§devãšprodã«åãããŒã¹docker-compose.ymlã䜿çšããããã«äœ¿çšããŸãã
äŸïŒ
export COMPOSE_FILE=
docker-compose.yml`ïŒããã©ã«ãexport COMPOSE_FILE=
docker-composeã ymlïŒ docker docker-compose.prod.yml
ã§ã¯ãenvå€æ°ãprodãã¹ã¯ãŒãã§äžæžãããã ãã§ãã
ãã®èšå®ã¯ç°¡åã§ã docker-compose
ã³ãã³ãã«åžžã«è€æ°ã®ã-fããè¿œå ããå¿
èŠã¯ãããŸããã devã³ã³ãã¥ãŒã¿ãŒãšãµãŒããŒã§COMPOSE_FILE
env varãèšå®ããå¿
èŠããããgitã¯docker-compose.prod.ymlãã¡ã€ã«ãç¡èŠããŸãã
ãŸã åŸ ã£ãŠãã ïŒïŒ
ç§ã¯ãããæ¡åŒµããæ¹æ³ãšããŠäœ¿çšããŠããŸããïŒ
docker-compose \
-f ./docker/base.yml \
-f ./docker/extended.yml \
up
ãã ãããã¡ã€ã«å ã§æ¡åŒµããæ¹ãé©åã§ãããè¿œå ã®bashã¹ã¯ãªããã¯å¿ èŠãããŸããã
ãŸããããã䜿çšããŠãbashã¹ã¯ãªããããåçã«æ¡åŒµããŠããŸãã
extended_docker_compose="
version: '3.5'
services:
my-service:
restart: always
"
echo "$extended_docker_compose" | docker-compose \
-f ./docker/base.yml \
-f /dev/stdin \
up
@ dave-dmãããã¯åçŽãªå€ããªãŒããŒã©ã€ãã§ãïŒ
ããã¯extendsã®æœåšçãªæå¹ãªãŠãŒã¹ã±ãŒã¹ã ãšæããŸã
https://github.com/NerdsvilleCEO/devtools/blob/master/doctl/docker-compose.yml#L10
ãµãŒãã¹ã®ç°å¢ã«äœ¿çšããdocker-compose
ã©ãããŒããããŸãhttps://github.com/nowakowskir/docker-compose-wrapper
ç·šéïŒå¥ã®å¯èœãªãŠãŒã¹ã±ãŒã¹ã¯ã誰ããLAMP / LEMPã¹ã¿ãã¯ãæã£ãŠããŠãã¯ãŒããã¬ã¹ãªã©ã®ç¹å®ã®ãµãŒãã¹ã§äœ¿çšããããã«ãããã®ãµãŒãã¹ãæ¡åŒµãããå Žåã§ãã
Dockerã¯ä»£æ¿æ¡ãäœæããŠããéã2017幎ãããŸã åŸ ã£ãŠããŸãã
@nomasprimeããããã®ã¢ã€ãã¢ã¯ä»¥åãã®ã¹ã¬ããã«ãã£ãã
ãããä»ã®ymlãã¡ã€ã«ã®ãã¡ã€ã«èªã¿èŸŒã¿ã¡ã«ããºã ãšçµã¿åãããããšãã§ããã°ãå€ã
depends
æ©èœããã¹ãŠæã€ããã«æ¬åœã«å¿ èŠãªã®ã¯ããã ãã§ããäžèšãåç §ããŠãã ãããäŸïŒ ïŒ31101ïŒã³ã¡ã³ãïŒ
ããŸã_èªã¿ããã_ã§ã¯ãããŸããããå°ãªããšã_å¯èœ_ã§ãã
@luckydonaldææããŠãããŠããããšãã å¥åŠãªããšã«ãçµã¿èŸŒã¿ã®YAMLã€ã³ã¯ã«ãŒãæ©èœã¯ãªãã確ãã«å€ãã®åé¡ã解決ããŸãã
ãµãŒãããŒãã£ã®ãœãªã¥ãŒã·ã§ã³ãå®è£ ããã®ã¯ããªãç°¡åãªããã§ããããªããããv3ã«å°å ¥ãããŠããªãã®ãããããŸããð€·ââ
å€ãã®äººããã®æ©èœãæãã§ããããšãå°ãæãåºãããŠãã ãã:)
ãããv3btwã«ç§»æ€ããªãçç±ã¯äœã§ããïŒ
å¿ããŠããŸããŸããããå®éã«æã¡å»ãããçç±ã¯ãããŸããïŒ
2020幎5æ6æ¥æ°Žææ¥ã23ïŒ14 Julien Marechalã notifications @ github.comã¯æ¬¡ã®ããã«æžããŠããŸãã
å€ãã®äººããã®æ©èœãæãã§ããããšãå°ãæãåºãããŠãã ãã:)
â
ããªããã³ã¡ã³ãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/moby/moby/issues/31101#issuecomment-624919070 ããŸãã¯
éäŒ
https://github.com/notifications/unsubscribe-auth/ABOE6GGDIVGATP734YJA4UTRQHOLJANCNFSM4DANZGSQ
ã
yamlã¢ã³ã«ãŒããã®ãŠãŒã¹ã±ãŒã¹ãåŠçããæ¹æ³ã¯ã extend
ãšæ¯èŒããŠå°ãäžäŸ¿ã§ãã ç§ã®æèŠã§ã¯ããã®åã¯äž»ã«èŠçŽ ã®ååž°çãªããŒãžããæ¥ãŸããã ã¢ã³ã«ãŒã¯ããããã75ïŒ
ã®éã®ãããã©ããŸããã€ãŸããyamlãååž°çã«ããŒãžããããšã¯ãããŸããã ãã¹ãŠã®ããŒãžã¯ãããã¬ãã«ã§è¡ãããŸãã ã¢ã³ã«ãŒããããµãŒãã¹ãã³ãã¬ãŒããåç
§ããŠããenvironment
ãããã¯ãåå®çŸ©ãããšãããŒãžãããã®ã§ã¯ãªããã¢ã³ã«ãŒããããµãŒãã¹ã®ç°å¢ãããã¯ãäžæžããããŸãã extend
ããŒã¯ãŒãã®åäœã«äžèŽãããã«ã¯ãèŸæžã®ååž°ããªãŒã®äžã«ãããã¹ãŠã®èŸæžãã¢ã³ã«ãŒããŠåç
§ããå¿
èŠããããŸãã
äŸïŒ
# anchors for the service, environment, deploy, and deploy.placement blocks
# you'll need an anchor for every dict that you want to merge into
x-common-app: &common-app
image: app:1.0
environment: &common-app-environment
common_option: a
overwrite_option: b
deploy: &common-app-deploy
max-replicas-per-host: 3
placement: &common-app-deploy-placement
constraints:
- 'node.labels.app_host==true'
services:
myapp: << *common-app
environment: << *common-app-environment
foo: bar
baz: xyzzy
overwrite_option: quz
deploy: << *common-app-deploy
replicas: 15
placement: << *common-app-deploy-placement
preferences:
- spread: node.labels.region
# The above yields the following:
services:
myapp:
image: app:1.0
environment:
common_option: a
overwrite_option: quz
foo: bar
baz: xyzzy
deploy:
replicas: 15
max-replicas-per-host: 3
placement:
constraints:
- 'node.labels.app_host==true'
preferences:
- spread: node.labels.region
ãã®äŸã§ã¯ããã»ã©ç ©ãããèŠããªããããããŸãããã1ã€ã®æ¡åŒµãããã¯ããè€æ°ïŒ10以äžïŒã®ãµãŒãã¹ããã³ãã¬ãŒãåãããšãç ©ãããèªã¿ã«ãããªããŸãã
ç§ã®èãã§ã¯ãçæ³çãªã·ããªãªã¯ãyamlã¢ã³ã«ãŒã¢ãããŒããšextend
ã¢ãããŒãã®çµã¿åããã§ãã extend
ã¯ãæäžäœã®x-
ãã¬ãã£ãã¯ã¹ä»ãæ¡åŒµãã£ãŒã«ããããã¯ããã®ã¿èš±å¯ãããŸããããã¹ããŒããªããŒãžç¹æ§ã
ç§ã®çµç¹ã§ã¯ãyamlã¢ã³ã«ãŒãæ§æçã«å°ãããããªããšãããã£ãã®ã§ãåºæ¬çã«å€éšã®pythonã¹ã¯ãªããã§extend
æ©èœãåå®è£
ããŸããã ããã¯ç§ãã¡ã«ãšã£ãŠã¯ããŸããããŸãããäœãã«å¯ŸåŠããªããã°ãªããªãã®ã¯äžå®å
šãªæ¹æ³ã§ãã åæ§ã«ãv3 / Swarmã¹ã¿ãã¯ã®depends_on
ã®åé€ã«å¯ŸåŠããããã«ãç¬èªã®å€éšããŒã«ãäœæããå¿
èŠããããŸããã
æè¿ãå€ãã®gitlab CIYAMLãå®è¡ããŸããã ãŸãã«ãããã®æ©èœãåããŠãããèªã¿ããã管çãããããã³ãã¬ãŒããšæçµæ§æãå®çŸããã®ã«éåžžã«äŸ¿å©ã§ãã
x-
ããgitlab CIã§ã¯æåã®.
ã§ããããã¯ããããã®ãã¡ã€ã«ãèãããããã®ã«ããæ©èœã®æ£ç¢ºãªã»ããã§ãã
ç§ã¯dockerdocsãããã®åé¡ã«å°éããŸãããç§ã®å Žåã docker-compose
ã»ããã¢ããããã³ãã¬ãŒãåããããšæãããåé¿çããšããŠäžèšã®ã¢ããã€ã¹ã«åŸããæ¢åã®ãã³ãã¬ãŒãããã°ã©ã ãæ¢ãããšã«ããŸããã ç§ã¯ãããã®æéãåãæ»ãããšãã§ããªãã®ã§ããã®å®éã®æ©èœèŠæ±ã«é¢ããè°è«ã«é¢ä¿ãªããããã§èŠã€ãããã®ã®å°ãã詳ãã説æããŸãããé¢ä¿è
ã¯YAMLããŒã¹ã®ãã³ãã¬ãŒãã·ã¹ãã ã®äœ¿çšãæãããããããŸãããã®æ©èœãdocker-compose
èªäœã«çµ±åããã®ã§ã¯ãªããäœæãã¡ã€ã«ãçæããæ¹ããã«ãã»ã«åãšãžã§ãã«é©ããããŒã«ã®éžæã®èŠ³ç¹ããé©åãªå ŽåããããŸãã
ããã€ãã®ã³ã³ããã¹ãã§ã¯ãLet's Encryptãšããã€ãã®ã¢ããªã±ãŒã·ã§ã³ã³ã³ããïŒä»ã®ãšããNextcloudã1ã€ã¯ç§çšãããã€ãã¯å人çšïŒã§åºæ¬çãªãªããŒã¹ãããã·ã䜿çšããŠããŸã-ãã®å ŽåãNextcloudã³ã³ããã®ãã³ãã¬ãŒããäœæãããã£ãã®ã§éåžžã«ãã䌌ãèšå®ã®ããŒã¹ãããŒã¯ã§ã®ééããéè€ãé¿ããããšãã§ããŸãã 次ã®ããã±ãŒãžã¯ç§ãè©Šãããã®ã§ããïŒ
yttã¯éåžžã«å æ¬çã§ãããYAMLããã€ãã£ãã«äœ¿çšããå¯äžã®ãªãã·ã§ã³ã§ãã ããã¯åŒ·åã§ä»äºã«é©ããããŒã«ã®ããã§ãPythonã®ã¹ãŒããŒã»ããã§ããStarlarkãYAMLãã¡ã€ã«å ã§çŽæ¥äœ¿çšããŠåŠçãå®è¡ããŸãã ããããéããªãããã³ãã¬ãŒãã¯éåžžã«ä¹±éã«ãªããã³ãŒãã®ãã©ã°ã¡ã³ããšYAMLã®ãã©ã°ã¡ã³ããæ£ãã°ããèŸæžãé åãªã©ã®PythonããŒã¿åãšYAMLãã©ã°ã¡ã³ãïŒããã¹ãã®ããã«åŠçãããããã«èŠããŸãïŒãæ··åšããŠããŸããæååãªã©ã®ã¿ã°ãåºåããHTMLãã³ãã¬ãŒããšã³ãžã³ïŒã¯ãæçµçã«ãšã©ãŒãå€ãããŠãã¡ã€ã«ãä¹±éã«ãªããããŸããã Dhallãéåžžã«å æ¬çã§ãããŸããŸãªåœ¢åŒã«åºåã§ããç¬èªã®æ¯åœèªã䜿çšããŠããŸãã ãã³ãã¬ãŒãã·ã¹ãã ãšããããã¯ã¡ã¿ããã°ã©ãã³ã°èšèªã®ããã«èŠããŸãããæ§æãæ©èœããããªãå³å¯ã«åæå®ãããŠãããããéæ§é åYAMLã®åçŽãªãã³ãã¬ãŒããããããã«è€éã«ãªããŸããã JSONãšHaskellã®ãã¬ã³ãã®ããã«èŠããã®ã§ãç§ãå¿ èŠãªããšãèšèªã«çµã¿èŸŒãã«ã¯ãããŸãã«ãå€ãã®èããå¿ èŠã§ããã
èå³æ·±ãããšã«ãDhallãšyttã®äž¡æ¹ã§å°é£ã ã£ãã®ã¯ããã©ã¡ãŒã¿ãŒåããããã£ãŒã«ãåã䜿çšããããšã§ãããã©ã¡ããããã§ãªããã°ååã«æ©èœããŸããããã€ã³ã¹ã¿ã³ã¹ã®ååããµãŒãã¹åãšããªã¥ãŒã åã«è¡šç€ºããå¿ èŠããããŸããããã¯ããéããã®ã§ããã ããã·ã¥å ã®å€ã«åŒæ°ã䜿çšããã®ã¯ç°¡åã§ãããããŒã®ååã«ãããã®åŒæ°ã䜿çšããã®ã¯é¢åã§ãããããããé©åã«è¡ãæ¹æ³ãèŠã€ãããŸããã§ãããããã«ãDhallã¯åã®å®å šæ§ã匷å¶ããããã¯åã«ãã®æŠå¿µã«åããŸãã Jsonnetã§ã¯ãåŒãè§ãã£ãã§å²ãã ãã§ç°¡åã«ã§ããŸããã
CUEãšJsonnetã¯ã©ã¡ããJSONæåã§ãããã³ã³ããŒã¿ãŒãä»ããŠããããå®è¡ããããšã¯ãŸã£ããé£ãããããŸããããŸããDhallã®ããã«ãCUEã«ã¯å€ãã®åŒ·åãªæ©èœããããJsonnetã®æ¬ ç¹ããçãŸããããã§ãããããã¥ã¡ã³ãã®äžéšã«å«ãŸããŠããŸãã ãããã¯ãã§ã«ããéãã§ããããšãæããã«ãªããŸããã ãããããããé©åã«åŠã¶ããã«ãã£ãšå€ãã®æéãããã°ãããã¯åªãããªãã·ã§ã³ã§ãããããCUEã¯åçŽãªãã³ãã¬ãŒããžã§ããããæ€èšŒãšã¹ããŒãã«éç¹ã眮ããŠããããã§ãã
æåŸã«ãããããã¹ãŠãå®äºããŠåããŠããããã®ããŒã«ãLiquidã¿ã°ãŸãã¯åæ§ã®HTMLãã³ãã¬ãŒãã®åçŽããšæ¯èŒããŠããéãã£ãšãLiquidãæåã«äœ¿çšã§ããã®ã§ã¯ãªãããšæ°ã¥ããŸããã ç§ã¯Jekyllãµã€ãã®ã³ã³ããã¹ãã§ã®ã¿äœ¿çšããã®ã§ãã¹ã¿ã³ãã¢ãã³ããã±ãŒãžãå ¥æããããšã¯æ±ºããŠãããŸããã§ããããåºæ¬çãªã«ãŒããšãªã¹ããããã³åŒãã€ã³ãã¬ãŒã¹ããã¹ãã«çŽæ¥è©äŸ¡ããæ©èœãåããŠãããããããããä»äºã«ãšã£ãŠãã¯ããã«è¯ãã£ãã Jsonifyã¯ããããJSONã«åªããŠããŸãããLiquidã¯çŽç²ãªYAMLã§åäœããå¯èœæ§ãããããããã¡ã€ã«ã¯åã³èªã¿ããããªããŸãã
+1 docker-composeã¯ããã®ãã±ãããå€æ°ã®ãã¹ãç°å¢ã®k8ãžã®ç§»è¡ããµããŒãããããã«äœæãããŠä»¥æ¥ãç§ãè·å Žã§å®è£ ãããªãŒããŒã¡ã€ãã®ãœãªã¥ãŒã·ã§ã³ã®èåŸã«ãã1ã€ã®ã€ã³ã¹ãã¬ãŒã·ã§ã³ã§ããã ç§ã¯ãã«ããã€ãã¹ã«ãé¿ããããã«éåžžã«æ³šæããŸããããé¡äŒŒã®æ©èœãããã«æ£åœåããŸããã å²åŠçãªè°è«ïŒæ§æãšç¶æ¿ãªã©ïŒã¯ãç§ã«ã¯åžžèããã®æ°æŽããã®ããã«èŠããŸãïŒå©çã®åŸç¥æµããããŸã-ã»ãŒ3幎åŸããŸã 解決ãããŠããŸããïŒã æããã«ãdocker-composeã䜿ãç¶ããå¯èœæ§ã®ãã人ã ãå¿ èŠãšããŠããŸãã
+1ïŒ+1ïŒ
以åã dev
/ test
/ ci
ç°å¢ã§ãã®æ©èœãé »ç¹ã«äœ¿çšããŸããããã®ç°å¢ã§ã¯ã ./config/{dev,test,ci}/compose.yaml
ãµããã£ã¬ã¯ããªãã¹ã«ããäœæãã¡ã€ã«ããæ¡åŒµã§ããŸããã COMPOSE_ENV=dev
ãæã€.env
ããããŸãããéçºè
ã¯ãªãŒããŒã©ã€ãã§ããæããã«ci
ãªãŒããŒã©ã€ãããŸãã
ãã®æ©èœãå»æ¢ããåæ§ã®ããšãå®è¡ã§ãããã®ã«çœ®ãæããªãããšã«ã·ã§ãã¯ãåããŸããã ãã¶ããjinja2ã䜿çšããŠãããããããšãå®è¡ã§ããããã«ããã ãã§ãã Docker-Composeã®ã¢ã³ããã©ã€ãå°ãªããªãããšãé¡ã£ãŠããŸãã ïŒ 'ïŒ
extends
ã¯v1.27ïŒhttps://github.com/docker/compose/pull/7588ïŒä»¥édocker-compose
ãµããŒããããŠããããã§ãã
ãã®æ©èœãå€çšãããŠãŒã¹ã±ãŒã¹ã®1ã€ã¯ãDockerã€ã¡ãŒãžãããŒãžã§ã³ç®¡çããŠã³ãŒãåããããšã§ãã ç§ã®dockerdevãã¡ã€ã«ãšprodäœæãã¡ã€ã«ã¯ã©ã¡ããdocker-images.ymlããæ¡åŒµãããŠãããåºæ¬çãªãµãŒãã¹ãšãµãŒãã¹ã®ã€ã¡ãŒãžã®ã¿ã°ä»ãããŒãžã§ã³ã®ã¿ããªã¹ããããŠããŸãã
v3ã§ã¯ããã«å¯Ÿããç°¡åãªåé¿çã¯èŠã€ãããŸããã§ããã
æãåèã«ãªãã³ã¡ã³ã
ããã ãã§ãªããå€æŽãã°ã«ã¯ãããã¯åé€ãããŸããã詳现ã«ã€ããŠã¯ããã¢ããã°ã¬ãŒãæ¹æ³ããåç §ããŠãã ããããšèšèŒãããŠããŸãã ã¢ããã°ã¬ãŒãæ¹æ³ã®è©³çŽ°ã«ã€ããŠã¯ãã¢ããã°ã¬ãŒãæ¹æ³ããèŠãŠãããã詳现ã«ã€ããŠã¯ããµãŒãã¹ã®æ¡åŒµããåç §ããŠãã ããããšæžãããŠããŸãã ãæ¡åŒµãµãŒãã¹ãã«ç§»åãããšããã¡ã€ã«ãæ¡åŒµããæ¹æ³ãããããããããŸããããããã¯åé€ãããŸããã詳现ã«ã€ããŠã¯ãå€æŽãã°ãåç §ããŠãã ããããšè¡šç€ºãããŸãã
ãã®æç¹ã§ãããã¯ããã¥ã¡ã³ãäœæè ãæŒããŠããæ®é ·ãªåè«ã®ãââãã§ãã