ããŒã¿ãã€ã³ããŒãããå¿ èŠããããããèµ·åã«å°ãæéããããMySQLã³ã³ããããããŸãã
MySQLã³ã³ããã«äŸåããAlfrescoã³ã³ããããããŸãã
çŸæç¹ã§ã¯ãfigã䜿çšãããšãAlfrescoã³ã³ããå ã®AlfrescoãµãŒãã¹ãMySQLã³ã³ããã«æ¥ç¶ããããšãããšå€±æããŸã...è¡šé¢äžã¯ãMySQLãµãŒãã¹ããŸã ãªãã¹ã³ããŠããªãããã§ãã
å³ã§ãã®çš®ã®åé¡ãåŠçããæ¹æ³ã¯ãããŸããïŒ
ä»äºã§ã¯ããªã³ã¯ããŸã ã¢ããããŠãããã©ããããã§ãã¯ããã¹ã¯ãªããã§äŸåãµãŒãã¹ãã©ããããŸãã ç§ã®ååã®äžäººãããã«èå³ãããããšãç§ã¯ç¥ã£ãŠããŸãïŒ å人çã«ã¯ããµãŒãã¹ãå©çšå¯èœã«ãªãã®ãåŸ ã€ããšã¯ã³ã³ããã¬ãã«ã®æžå¿µã ãšæããŠããŸãããééã£ãŠãããããããŸãã:)
ã©ããã³ã°ã§ãåãããšãããŸãã ããã§äŸãèŠãããšãã§ããŸãïŒ https ïŒ
ãã¹ãŠã®ãªã³ã¯ãã«ãŒããããªã³ã¯ãæ©èœãããŸã§åŸ æ©ããŠãããæž¡ãããã³ãã³ããéå§ãããšã³ããªãã€ã³ãã¹ã¯ãªããããããšäŸ¿å©ã§ãã
ããã¯Dockerèªäœã«çµã¿èŸŒãŸããŠããå¿ èŠããããŸããã解決çã¯éã®ãã§ãã ã³ã³ããã¯ãå ¬éãããªã³ã¯ãéããŸã§ãéå§ããããšèŠãªãããã¹ãã§ã¯ãããŸããã
@bfirshã¯ç§ãæ³åããŠãã以äžã®ãã®ã§ãããçŽ æŽãããã§ãããã
ã³ã³ããã¯ãå ¬éãããªã³ã¯ãéããŸã§ãéå§ããããšèŠãªãããã¹ãã§ã¯ãããŸããã
ããããã人ã ãå¿ èŠãšããŠããããšã ãšæããŸãã
ä»ã®ãšããã httpsïŒ//github.com/aanand/docker-waitã®ããªãšãŒã·ã§ã³ã䜿çšã
ãããç§ã¯ãã®ãããªãã®ã«èå³ãããã§ããã-ããã«ã€ããŠãã£ãšæ©ãæçš¿ããããšãæå³ããŸãã
ç§ãã¡ããã®ãŠãŒã¹ã±ãŒã¹ãä¿®æ£ãããšç§ãèããããšãã§ããæå°ã®åœ±é¿ãã¿ãŒã³ã¯ã次ã®ããã«ãªããŸãã
ãªã³ã¯ãšåæ§ã®å€ã®ã»ãã³ãã£ã¯ã¹ã䜿çšããŠãfig.ymlã®æ°ããããŒãšããŠãwaitããè¿œå ããŸãã Dockerã¯ãããåææ¡ä»¶ãšããŠæ±ãããã®ã³ã³ãããŒãçµäºãããŸã§åŸ ã£ãŠããç¶è¡ããŸãã
ãããã£ãŠãç§ã®dockerãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
db:
image: tutum/mysql:5.6
initdb:
build: /path/to/db
link:
- db:db
command: /usr/local/bin/init_db
app:
link:
- db:db
wait:
- initdb
ã¢ããªãå®è¡ãããšããã¹ãŠã®ãªã³ã¯ã³ã³ãããŒãèµ·åããåŸ æ©ã³ã³ãããŒãå®è¡ãããåŸ æ©ã³ã³ãããŒïŒinitdbïŒãçµäºãããšãå®éã®ã¢ããªã³ã³ãããŒã«ã®ã¿é²ã¿ãŸãã initdbã¯ãããŒã¿ããŒã¹ã䜿çšå¯èœã«ãªãã®ãåŸ ã£ãŠãããåæå/移è¡/ãã®ä»ãå®è¡ããŠçµäºããã¹ã¯ãªãããå®è¡ããŸãã
ãšã«ãããããã¯ç§ã®èãã§ãã
ïŒæ¹èšã以äžãåç §ïŒ
ããã§ã+1ã ã³ãã³ãèªäœã§ãããè¡ãå¿ èŠãããããšã¯ããŸãé åçã§ã¯ãããŸããã
+1ãã ã¡ããã©ãã®åé¡ã«ééããŸããã çŽ æŽãããããŒã«ãšããã§ãç§ã®äººçã¯ãšãŠã楜ã«ãªããŸãïŒ
+1ã¯ãããããã°çŽ æŽãããã§ãããã
+1ãã æè¿ãåãäžé£ã®åé¡ã«ééããŸãã
+1ãã dockerguysããã®å£°æã¯ãããŸããïŒ
çŸæç¹ã§åæãããšã³ããªãã€ã³ããšããŠã©ãããŒã¹ã¯ãªãããäœæããŠããŸããããªãŒã±ã¹ãã¬ãŒã·ã§ã³ãå¥ã®æ¹æ³ã§å®è¡ããã³ã³ãããŒã®ä»ã®ã¿ãŒã²ãããããå Žåãfigã«ã¡ã«ããºã ãããããšãè³¢æãã©ããã¯ããããŸããã äœæ¥ãè¡ãã³ã³ããã®è²¬ä»»ãšããŠãç§ã«åºæã®ã¢ããªã±ãŒã·ã§ã³ã®ããã§ãã
ããã€ãã®èããšå®éšã®åŸãç§ã¯ããã«ããçšåºŠåæããŸãã
ç§ãæ§ç¯ããŠãããã®ãããªã¢ããªã±ãŒã·ã§ã³ã¯åºæ¬çã«åæãæã£ãŠããŸã
ã¢ããªã±ãŒã·ã§ã³ã®ãµãŒãã¹ãåŸ
æ©ã§ããwaitforïŒhostãportïŒé¢æ°
äŸåããŠããïŒç°å¢ãä»ããŠæ€åºãããããæ瀺çã«æ€åºãããïŒ
CLIãªãã·ã§ã³ã«ããæ§æïŒã
也æ¯
ãžã§ãŒã ãº
ãžã§ãŒã ãºãã«ãº/ããããžãã¯
EïŒ [email protected]
WïŒprologic.shortcircuit.net.au
åå6æ34åPMã§éã2014幎8æ22æ¥ã«ã¯ãããŒã¯ã»ã¹ãã¥ã¢ãŒã[email protected]
æžããŸããïŒ
çŸåšãåæãããšã³ããªãã€ã³ããšããŠã©ãããŒã¹ã¯ãªãããäœæããŠããŸãã
ä»ã®ã¿ãŒã²ãããããå Žåãã€ããžã¯ã«ã¡ã«ããºã ãããããšãè³¢æãã©ããã¯ããããŸãã
å¥ã®æ¹æ³ã§ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãå®è¡ããã³ã³ãããŒã ãšãŠãããã§ã
ã³ã³ããã®è²¬ä»»ãšããŠç§ã«åºæã®ã¢ããªã±ãŒã·ã§ã³
ä»äºãããŠããŸããâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/docker/fig/issues/374#issuecomment-53036154 ã
ã¯ããããã§å¿
èŠãªããã€ãã®åºæ¬çãªãäŸåã...
ãããã£ãŠãã³ã³ããã20åããå Žåã¯ãfig upãå®è¡ããå¿
èŠã¯ãªãããã¹ãŠãæ£ããé åºã§å§ãŸããŸã...
ãã ããã¿ã€ã ã¢ãŠããªãã·ã§ã³ããã®ä»ã®é害ãã£ããã¡ã«ããºã ããããŸã
ããã«ãã+1ã Postgresã®èµ·åã«Djangoãããæéãããããããããã«ãŒãªãã§ç§»è¡ã³ãã³ãçšã®DBããããŸããã
@ahknightèå³æ·±ãããªãrun
éã«ç§»è¡ãå®è¡ãããã®ã§ããïŒ
build
ãã§ãŒãºã§å®éã«ç§»è¡ãå®è¡ããŸãããïŒ ããããã°ãæ°é®®ãªç»åãã¯ããã«éãèµ·åã§ããŸãã
æ®å¿µãªãããåé¡ã®ã¢ããªã±ãŒã·ã§ã³çšã®ãã倧ããªèµ·åã¹ã¯ãªããããããŸãã ä»ã®ãšãããæåã«DB以å€ã®äœæ¥ãè¡ã£ãŠãããã«ãŒãå
ã§nc -w 1
ã䜿çšããŠDBãåŸ
æ©ããŠãããDBã¢ã¯ã·ã§ã³ãå®è¡ããŠããŸãã ããã¯åäœããŸãããããã¯ç§ãæ±ãæããããŸãã
fig build
ãã§ãŒãºã§ããã®äœæ¥ãè¡ãããšã§å€ãã®æåãåããŸããã djangoãããžã§ã¯ãã§ã®ãã®äŸã1ã€ãããŸãïŒãŸã äœæ¥äžã§ãïŒïŒ https ïŒ
èµ·åã®ããã«ããŒãªã³ã°ããå¿
èŠã¯ãããŸããã ç§ã¯mysqlã§åæ§ã®ããšãããŸãããã mysqld
initã¹ã¯ãªããããŸã ãããè¡ã£ãŠããªãã£ããããèµ·åãããŒãªã³ã°ããå¿
èŠããããŸããã ãã®postgresinitã¹ã¯ãªããã®æ¹ãã¯ããã«åªããŠããããã§ãã
ãããç§ãèããŠãããã®ã§ãïŒ
docker / dockerïŒ7445ã®ã¢ã€ãã¢ã䜿çšããŠããã®ãwait_for_helth_checkãå±æ§ãå³ã«å®è£
ã§ããŸããïŒ
ããã§ãããã¯Dockerã®åé¡ã§ã¯ãªãã€ããžã¯ã§ããããïŒ
ãšã«ãããfigã«ãªã³ã¯ãããã³ã³ããã®tcpã¹ããŒã¿ã¹ããã§ãã¯ãããæ¹æ³ã¯ãããŸããïŒããã§ããã°ããããé²ãã¹ãéã ãšæããŸãã =ïŒ
@dnephinã¯ããããæ¯æŽããããã«Dockerfilesã§äœãããŠããã®ããããå°ã説æã§ããŸããïŒ
ãã«ããã§ãŒãºã¯ã©ã³ã¿ã€ã ã«åœ±é¿ãäžããããšãã§ããŸãããïŒ
@docteurkleinã§ããŸãã äžãããªã³ã¯ãä¿®æ£ããŸããïŒhttps://github.com/dnephin/readthedocs.org/blob/fig-demo/dockerfiles/database/Dockerfile#L21ïŒ
ã¢ã€ãã¢ã¯ããã«ãäžã«ãã¹ãŠã®é ããã»ããã¢ãããæäœãå®è¡ãããããã³ã³ãããŒã®èµ·åäžã«äœãåŸ ã€å¿ èŠããªããšããããšã§ãã ããŒã¿ããŒã¹ãŸãã¯æ€çŽ¢ã€ã³ããã¯ã¹ã®å Žåã次ã®ããã«ãªããŸãã
ãã¹ãŠåäžã®ãã«ãã¹ããããšããŠã åŸã§ããŒã¿ããŒã¹ã³ã³ãããfig up
ãããšãåºæ¬çã«ããã«äœ¿çšã§ããããã«ãªãããããã®äœéãªæäœã«dockerãã«ããã£ãã·ã¥ãå©çšã§ããããã«ãªããŸãã
ãããïŒ ããããšã:)
@dnephinãããããã«ã€ããŠèããŠããªãã£ãã
+1ããã¯ééããªãå¿
èŠã§ãã
ã»ãšãã©ã®å Žåãéãæéé
延ããã¯ã§ååã§ããã_å®éã®_ãœãªã¥ãŒã·ã§ã³ã¯æè¿ãããŸãã
ãªã/ãã€å¿ èŠãªã®ããäŸãæããŠããã ããŸããïŒ
ç§ã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ãElasticsearchãµãŒããŒãšãElasticsearchã«æ¥ç¶ããŠããã¢ããªã±ãŒã·ã§ã³ãµãŒããŒããããŸãã Elasticsearchã®èµ·åã«ã¯æ°ç§ããããããElasticsearchãµãŒããŒã«æ¥ç¶ãããšããã«ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã倱æãããããåçŽã«fig up -d
å®è¡ããããšã¯ã§ããŸããã
äžæ¹ã®ã³ã³ãããMySQLãèµ·åããããäžæ¹ãMySQLãå¿
èŠãšããã¢ããªãèµ·åããããäžæ¹ã®ã¢ããªãããéãèµ·åããããšãããã£ããšããŸãã ãã®ãããäžæçãªfig up
é害ãçºçããŸãã
ã¯ã¬ãŒã³ã«ã¯ãåå¥ã«éå§ã§ããã°ã«ãŒããäœæã§ããããã«ããããšã§ããããåé¿ããæ¹æ³ããããŸãã ãããã£ãŠãMySQLã°ã«ãŒããéå§ãã5ç§åŸ
ã£ãŠãããããã«äŸåããä»ã®ãã®ãéå§ã§ããŸãã
å°èŠæš¡ã§æ©èœããŸãããå®éã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸããã
@oskarhaneã¯ããã®ã5ç§åŸ
ã€ãã圹ç«ã€ãã©ãã
ãŸããä»ã®ã°ã«ãŒããåŸ
ã£ãŠããŒãããããšãæåã§è¡ãå¿
èŠããããŸãããããã¯äžçš®ã®ã©ã¡ã§ããfigã¯ããªãã®ããã«ãããè¡ãå¿
èŠããããŸã= /
@ oskarhane ã @ dacort ã @ ddosââsot ïŒçŸå®ã®äžçã§ã¯ãç©äºãã¯ã©ãã·ã¥ããŠåèµ·åãããããããã¯ãŒã¯æ¥ç¶ãè¡ãæ¥ãããããããšãªã©ã«ãFigãTCPãœã±ããã§åŸ æ©ãã䟿å©ããå°å ¥ãããã©ããã«ããããããã³ã³ããã¯æ¥ç¶é害ã«å¯Ÿããèæ§ã ããããã°ãã©ãã§ãé©åã«æ©èœããŸãã
ãã®éãã§ãããæ¢åã®ãã¹ãŠã®ã¢ããªãä¿®æ£ããŠãèµ·åæã«éèŠãªãªãœãŒã¹ïŒDBãªã©ïŒããªãç¶æ
ããæ£åžžã«å埩ãããŸã§ïŒããã¯GreatThingâ¢ã§ãããæ®å¿µãªãããã¬ãŒã ã¯ãŒã¯ã§ã¯ã»ãšãã©ãµããŒããããŠããŸããïŒã䜿çšããå¿
èŠããããŸãã fig start
代ããã«ãé
延ã䜿çšããŠç¹å®ã®é åºã§åã
ã®ã³ã³ãããŒãéå§ããããã®fig up
ã
dockerïŒwinkïŒãå¶åŸ¡ããããã«figãå¶åŸ¡ããã·ã§ã«ã¹ã¯ãªããã衚瀺ãããŸãã
ãããfigã«çµã¿èŸŒãŸããŠããªããŠã倧äžå€«ã§ãããæºåãæŽãã®ãåŸ ã€ããã®ãã¹ããã©ã¯ãã£ã¹ã«é¢ããã¢ããã€ã¹ãããã°ããã§ãããã
以åã®ã³ã¡ã³ããããªã³ã¯ãããããã€ãã®ã³ãŒãã§ããããè¡ãããã®ãèŠãŸããïŒ
while ! exec 6<>/dev/tcp/${MONGO_1_PORT_27017_TCP_ADDR}/${MONGO_1_PORT_27017_TCP_PORT}; do
echo "$(date) - still trying to connect to mongo at ${TESTING_MONGO_URL}"
sleep 1
done
ç§ã®å Žåã /dev/tcp
ãã¹ã¯ãããŸããããããããå¥ã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ïŒïŒïŒã§ã-ç§ã¯Ubuntuã䜿çšããŠããŸã
ç§ã¯ä»£ããã«ãããŸãããããã«èŠãããã®æ¹æ³ãèŠã€ããŸããïŒ
until nc -z postgres 5432; do
echo "$(date) - waiting for postgres..."
sleep 1
done
ããã¯æ©èœããŠããããã§ãããå
ç¢ãã©ãããç¥ãã«ã¯ååãªç¥èããããŸãã... nc
ãŸã§è¡šç€ºãããããŒããšpostgresãµãŒããŒã_æ¬åœã«_åãå
¥ããããšãã§ããéã«ç«¶åç¶æ
ãçºçããå¯èœæ§ããããã©ããã¯èª°ã«ãããããŸããã³ãã³ãïŒ
ãã§ãã¯ãéã«ããããšãã§ããã°ãã£ãšå¬ããã§ã-äŸåã³ã³ããããããŒãªã³ã°ãã代ããã«ãã¿ãŒã²ããïŒã€ãŸãpostgresãµãŒããŒïŒã³ã³ãããããã¹ãŠã®äŸåã³ã³ããã«ã·ã°ãã«ãéä¿¡ããããšã¯å¯èœã§ããïŒ
å€åããã¯ã°ãããèãã§ãã誰ããäœãèããæã£ãŠããŸããïŒ
@anentropic Dockerãªã³ã¯ã¯äžæ¹åã§ãããããçŸåšãããŠã³ã¹ããªãŒã ã³ã³ãããŒããã®ããŒãªã³ã°ããããè¡ãå¯äžã®æ¹æ³ã§ãã
ncã«è¡šç€ºãããããŒããšpostgresãµãŒããŒãå®éã«ã³ãã³ããåãå ¥ããããšãã§ããéã«ç«¶åç¶æ ãçºçããå¯èœæ§ããããã©ãã誰ããç¥ã£ãŠããŸããïŒ
äžè¬çãªã±ãŒã¹ã§ç¥ãæ¹æ³ã¯ãããŸãã-postgresã®å Žåã¯æ£ãããããããŸããããä»ã®ãµãŒãã¹ã®å Žåã¯ééã£ãŠãããããããŸãã-ããã¯å³ã§ãããè¡ããªãããã®å¥ã®è°è«ã§ãã
@aanand Docker / Wait Imageã¢ãããŒãã䜿çšããŠã¿ãŸããããäœãèµ·ãã£ãŠããã®ã
åŸ æ©ã³ã³ãããOrientdbã«ãªã³ã¯ããããšã§ããã®ãšã©ãŒã衚瀺ãããªãããšãæåŸ ããŠããŸããã ããããæ®å¿µãªãããç§ã¯ãŸã ãããã©ã³ãã ã«ååŸããŠããŸãã ãããç§ã®ã»ããã¢ããã§ãïŒDockerããŒãžã§ã³1.4.1ãUbuntu 14.04ããã¯ã¹ã®å³1.0.1ïŒïŒ
orientdb:
build: ./Docker/orientdb
ports:
- "2424:2424"
- "2480:2480"
wait:
build: ./Docker/wait
links:
- orientdb:orientdb
....
core:
build: ./Docker/core
ports:
- "3000:3000"
links:
- orientdb:orientdb
- nsqd:nsqd
ã©ããªå©ãã§ã倧æè¿ã§ãã ããããšãã
@mindnuts wait
ç»åã¯ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã®ãããªãã®ã§ãã fig.yml
ã§ã®äœ¿çšã«ã¯é©ããŠããŸããã core
ã³ã³ããã§åãææ³ïŒç¹°ãè¿ãããŒãªã³ã°ïŒã䜿çšããŠã orientdb
ã³ã³ãããéå§ããã®ãåŸ
ã£ãŠãããã¡ã€ã³ããã»ã¹ãéå§ããå¿
èŠããããŸãã
+1ã¯ãfig.ymlã§ãã«ãããã®ã§ã¯ãªããã«ã¹ã¿ã ãã«ãã®ã€ã¡ãŒãžããã«ããŠãããšãã«ããã«ééãå§ããŸããã mongodbã®æºåããŸã ã§ããŠããªããããããŒãã¢ããªã倱æããŸã...
Dockerã䜿çšããŠWordPressãæåã§èµ·åãããšãã«MySQLã«å°éã§ããçç±ãšãFigãèµ·åãããšãã«MySQLããªãã©ã€ã³ã«ãªã£ãçç±ã®ãããã°ã«äœæéãè²»ãããŸãããã¢ããªã±ãŒã·ã§ã³ãèµ·åãããã³ã«ãFigãåžžã«MySQLã³ã³ãããåèµ·åããããšã«æ°ä»ããã®ã§ãWordPressã®entrypoint.shãåæ¢ããŸãããŸã MySQLã«æ¥ç¶ã§ããŸããã
å®éã®entrypoint.shãå®è¡ããåã«5ç§éåŸ æ©ããç¬èªã®ãªãŒããŒã©ã€ããããentrypoint.shãè¿œå ããŸããã ããããDocker / FigãšMySQL + WordPressã³ã³ããã®çµã¿åãããç°¡åã«èµ·åã§ãããšæãããå Žåãããã¯æããã«äžè¬çãªãœãªã¥ãŒã·ã§ã³ãå¿ èŠãšãããŠãŒã¹ã±ãŒã¹ã§ãã
ãã®ãããWordPressã®entrypoint.shã¯ãMySQLã«æ¥ç¶ã§ããã«çµäºããŸãã
ããã¯WordPressã³ã³ããã®åé¡ã ãšæããŸãã
ç§ã¯åœåãã®ã¢ã€ãã¢ã®ãã¡ã³ã§ãããã httpsïŒ //github.com/docker/docker/issues/7445#issuecomment -56391294ãèªãã åŸããã®ãããªæ©èœã¯ééã£ãã¢ãããŒãã§ãããå®éã«ã¯æªãç¿æ £ãå©é·ãããšæããŸãã
ãã®åé¡ã察åŠããããšãç®çãšããŠãã2ã€ã®ã±ãŒã¹ãããããã§ãïŒ
ã³ã³ããã®åæåã¯ãå®éã«ã¯build
éã«å®è¡ããå¿
èŠããããŸãã ããããã°ãããã¯ãã£ãã·ã¥ãããç»åã®ãã¹ãŠã®ãŠãŒã¶ãŒãäœæ¥ãç¹°ãè¿ãå¿
èŠã¯ãããŸããã
ã¢ããªã±ãŒã·ã§ã³ã¯ãæ¥ç¶é害ã«å¯ŸããŠæ¬åœã«å埩åããããæ¥ç¶ãåè©Šè¡ããå¿ èŠããããŸãã
åé¡ã®æ ¹æ¬ã¯ããµãŒãã¹ã®æºåãæŽãã®ãåŸ ã€è²¬ä»»ã«ã€ããŠã®åºæ¬çãªã«ãŒã«ããªãããšã ãšæããŸãã ããããããšããã£ããšããŠããéçºè ããã¹ãŠã®åæåã¹ã¯ãªããã«ããŒã¿ããŒã¹æ¥ç¶ã®åè©Šè¡ãè¿œå ããããšãæåŸ ããã®ã¯å°ãéçŸå®çã ãšæããŸãã ãã®ãããªã¹ã¯ãªããã¯ãããŠã³ããããã°ããã®ç©ºã®ããŒã¿ããªã¥ãŒã ãæºåããããã«å¿ èŠã«ãªãããšããããããŸãïŒããŒã¿ããŒã¹ã®äœæãªã©ïŒã
ã¢ããªã±ãŒã·ã§ã³ã³ã³ãããåèµ·åãããšãã«Figããªã³ã¯ãããã³ã³ããïŒã€ãŸãããŒã¿ããŒã¹ãµãŒããŒïŒãåžžã«åèµ·åããªãå Žåãåé¡ã¯å®éã«ã¯ã¯ããã«ç®ç«ããªããªããŸãã ãªããããªãã®ãããããããŸããã
ã¢ããªã±ãŒã·ã§ã³ã³ã³ãããåèµ·åãããšãã«Figããªã³ã¯ãããã³ã³ããïŒã€ãŸãããŒã¿ããŒã¹ãµãŒããŒïŒãåžžã«åèµ·åããªãå Žåãåé¡ã¯å®éã«ã¯ã¯ããã«ç®ç«ããªããªããŸãã ãªããããªãã®ãããããããŸããã
å®éã«ã¯ãã³ã³ããã_åèµ·å_ããã ãã§ãªããã³ã³ããã_ç Žæ£ããŠåäœæ_ããŸããããã¯ã fig.yml
ãžã®å€æŽã確å®ã«ååŸããããã®æãç°¡åãªæ¹æ³ã ããã§ãã æçµçã«ã¯ããçŸåšã®æ§æããšãç®çã®æ§æããæ¯èŒããå€æŽããããã®ã ããåäœæã§ãããããã¹ããŒããªãœãªã¥ãŒã·ã§ã³ãå®è£
ããå¿
èŠããããŸãã
å
ã®åé¡ã«æ»ããšãã³ã³ããã«æ¥ç¶åè©Šè¡ããžãã¯ãããããšãæåŸ
ããã®ã¯éçŸå®çã§ã¯ãªããšæããŸããããã¯ãæ©èœããåæ£ã·ã¹ãã ãèšèšããããã®åºæ¬ã§ãã ç°ãªãã¹ã¯ãªããã§å
±æããå¿
èŠãããå Žåã¯ãå®è¡å¯èœãã¡ã€ã«ïŒãŸãã¯ãã·ã§ã«ã䜿çšããŠããªãå Žåã¯èšèªåºæã®ã¢ãžã¥ãŒã«ïŒã«å解ããŠãåã¹ã¯ãªãããäžéšã®waitfor db
ãåŒã³åºãããšãã§ããããã«ããå¿
èŠããããŸãã
@kennu --no-recreate
ã©ãã§ããïŒ / cc @aanand
@aanandã€ãŸããDocker Hubã¯ãåæåã¹ã¯ãªããã§æ¥ç¶ã®åè©Šè¡ãåŠçããªãå¯èœæ§ã®ããå ¬éãããã€ã¡ãŒãžã§æ¢ã«ãã£ã±ãã«ãªã£ãŠãããšãã芳ç¹ããã®éçŸå®çãªã³ã¡ã³ãã§ãããå šå¡ã«è¿œå ããŠãããã®ã¯ããªãã®äœæ¥ã§ãã ããããDocker Incãäœããã®å ¬åŒã®ã¬ã€ãã©ã€ã³/èŠä»¶ãå ¬éããŠããã°ãããã¯å¯èœã ãšæããŸãã
å人çã«ã¯ãã³ã³ãã/ã€ã¡ãŒãžãã·ã³ãã«ã«ä¿ã¡ãåºç€ãšãªãã·ã¹ãã ã«äŸåé¢ä¿ã®è§£æ±ºã«ã€ããŠå¿é ãããããšæããŸãã å®éãDockerã®åèµ·åããªã·ãŒã¯ãã§ã«ãã¹ãŠã解決ããŠããå¯èœæ§ããããŸãïŒã¢ããªã±ãŒã·ã§ã³ã³ã³ãããããŒã¿ããŒã¹ãžã®æ¥ç¶ã«å€±æããå ŽåãããŒã¿ããŒã¹ã䜿çšå¯èœã«ãªããŸã§åèµ·åããŠåè©Šè¡ããŸãïŒã
ãã ããåèµ·åããªã·ãŒã«äŸåãããšããããšã¯ãããã©ã«ãã§æå¹ã«ããå¿ èŠãããããšãæå³ããŸããããããªããšãåé¡ã®ãããã°ã«äœæéãè²»ãããŸãïŒç§ãè¡ã£ãããã«ïŒã ããšãã°ããããã®å ŽåãKubernetesã®ããã©ã«ãã¯RestartPolicyAlwaysã§ãã
ããã«ã€ããŠäœãé²å±ã¯ãããŸããïŒ ãã¹ãŠã®Dockerã€ã¡ãŒãžãå€æŽãããã³ãã¥ããã£å šäœãæ¥ç¶ã®åè©Šè¡æ¹æ³ãå®è£ ããããšãæåŸ ããã®ã¯åççã§ã¯ãªãããšãç¹°ãè¿ãè¿°ã¹ãããšæããŸãã Figã¯DockerãªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã§ãããåââé¡ã¯ãããè¡ãé åºã«ããââãããDockerãã³ãã¥ããã£ã§ã¯ãªãFigã§å€æŽãå ããå¿ èŠããããŸãã
ãã¹ãŠã®Dockerã€ã¡ãŒãžãå€æŽãããã³ãã¥ããã£å šäœãæ¥ç¶ã®åè©Šè¡æ¹æ³ãå®è£ ããããšãæåŸ ããã®ã¯åççã§ã¯ãããŸãã
dockerãŸãã¯figãåå ã§ãã¢ããªã±ãŒã·ã§ã³ãåè©Šè¡ããå¿ èŠãããããã§ã¯ãããŸããã ãããã¯ãŒã¯ã¯ä¿¡é Œã§ããªããããã¢ããªã±ãŒã·ã§ã³ã¯æ¥ç¶ã®åæã«å¯ŸããŠå埩åãããå¿ èŠã
å人çã«ã¯ãã©ã®ã³ã³ããã«ãåè©Šè¡ãå®è£ ããå¿ èŠã¯ãããŸããã§ããããŸããé 延ãèµ·åã®åŸ æ©ãå¿ èŠãããŸããã§ããã ãã®åé¡ã®ã»ãšãã©ã®ã±ãŒã¹ã¯ãããã2ã€ã®ã«ããŽãªã«åé¡ããããšæã
ãã¹ãŠã®åæåãããã«ãããã§ãŒãºã§è¡ããã次ã®ãªã¯ãšã¹ãã§æ¥ç¶ãå確ç«ãããããšã確èªããå Žåãåè©Šè¡ããå¿ èŠã¯ãããŸããïŒãŸãã¯ä»ã®ã³ã³ãããéå§ããã®ãåŸ ã€å¿ èŠã¯ãããŸããïŒã æ¥ç¶ãïŒæåã®èŠæ±ãè¡ããããšãã«ïŒæ æ°ã«éãããå ŽåãïŒèµ·åæã«ïŒç±å¿ã«ã§ã¯ãªããåè©Šè¡ããå¿ èŠã¯ãŸã£ãããªããšæããŸãã
åé¡ã¯[å³]ãç©äºãè¡ãé åºã«ãããŸã
ãããŸã§ã®ãšããããã®è°è«ã§ã¯ãã®ããšã«ã€ããŠã®èšåã¯ãããŸããã Figã¯ãæ§æã§æå®ããããªã³ã¯ã«åºã¥ããŠèµ·åãé åºä»ãããããåžžã«æ£ããé åºã§ã³ã³ãããŒãèµ·åããå¿ èŠããããŸãã é åºãæ£ãããªããã¹ãã±ãŒã¹ãæäŸã§ããŸããïŒ
ããã§@dnephinã«åæãã
Compose / Figã¯ãããã®æ±ºå®ãäžãããšãã§ãããç£èŠãµãŒãã¹ã¯ã³ã³ããå ã§å®è¡ãããŠããã¢ããªã±ãŒã·ã§ã³ã®è²¬ä»»ã§ããå¿ èŠããããŸãã
@dnephinã¯åã«å¹žéã ã£ãããšã瀺åããããšæããŸãã 2ã€ã®ããã»ã¹ã䞊è¡ããŠãã©ãŒã¯ããäžæ¹ãããäžæ¹ããªãã¹ã³ããããŒãã«æ¥ç¶ããå Žåãåºæ¬çã«ç«¶åç¶æ ãçºçããŸãã ã©ã®ããã»ã¹ãããéãåæåããããã確èªããããã®å®ããã
ãŸããWordPressã®åæåã®äŸãç¹°ãè¿ããããšæããŸããMySQLã³ã³ããã«ãŸã ããŒã¿ããŒã¹ããªãå Žåã¯ãæ°ããããŒã¿ããŒã¹ãäœæããã¹ã¿ãŒãã¢ããã·ã§ã«ã¹ã¯ãªãããå®è¡ããŸãïŒããã¯ãDockerã€ã¡ãŒãžã®ãã«ãæã«å®è¡ã§ããŸãããå€éšã«ããŠã³ããããããŒã¿ããªã¥ãŒã ïŒã ãã®ãããªã¹ã¯ãªããã¯ãäžè¬çãªããŒã¿ããŒã¹ãšã©ãŒãšãããŒã¿ããŒã¹ã®æºåãã§ããŠããŸããããšã©ãŒãåºå¥ããã·ã§ã«ã¹ã¯ãªããå ã«é©åãªåè©Šè¡ããžãã¯ãå®è£ ããå¿ èŠãããå Žåãéåžžã«è€éã«ãªããŸãã ã€ã¡ãŒãžã®äœæè ããäžèšã®ç«¶åç¶æ ã«å¯ŸããŠèµ·åã¹ã¯ãªãããå®éã«ãã¹ãããããšã¯ãªãå¯èœæ§ãé«ããšæããŸãã
ããã§ããã³ã³ãããæ£çºçã«èµ·åã«å€±æããå®æçã«ãã°ã«ãšã©ãŒãåºåããããšãåãå ¥ããæºåãã§ããŠããå ŽåãDockerã®çµã¿èŸŒã¿ã®åèµ·åããªã·ãŒã¯ããã«å¯Ÿããåé¿çãæäŸããŸãã ïŒãããŠãããªããããããªã³ã«ããããšãèŠããŠãããªããïŒ
å人çã«ã¯ããªã³ã¯ãããã³ã³ããã«å ¬éãããŠããã³ã³ããããŒããFigã«èªåæ€åºããããªã³ã¯ãããã³ã³ãããéå§ããåã«pingãå®è¡ããŠïŒæ£åžžãªã¿ã€ã ã¢ãŠãã§ïŒãThings Just Workãäœæããæçµçã«ãã®æ©èœããªãŒããŒã©ã€ã/ç¡å¹ã«ããæ§æèšå®ãæäŸããŸãã
ããã¯ãDockerã€ã¡ãŒãžããã«ããããšãã«å®è¡ã§ããŸãããããã¯ãå€éšã«ããŠã³ããããããŒã¿ããªã¥ãŒã ã«äŸåããŠããããã§ãã
æ¬åœã ããã§ã®ã¢ãããŒãã¯ãããŒã¿ããŒã¹ã³ã³ããã1åã ãèµ·åãããïŒå¿ èŠã«å¿ããŠãå¥ã®ãšã³ããªãã€ã³ã/ã³ãã³ãã䜿çšããŠïŒãããŒã¿ããŒã¹ãåæåããããããŒã¿ããŒã¹ã³ã³ããèªäœãšåãã€ã¡ãŒãžããäœæãããããŒã¿ããŒã¹ã®ããŒã¿å°çšã³ã³ããã䜿çšããããšã§ãã
ãã®ãããªã¹ã¯ãªããã¯ãäžè¬çãªããŒã¿ããŒã¹ãšã©ãŒãšãããŒã¿ããŒã¹ã®æºåãã§ããŠããŸããããšã©ãŒãåºå¥ããå¿ èŠãããå Žåãéåžžã«è€éã«ãªããŸãã
äœæ/å³ã¯ããã§åãåé¡ã«ééããŸãã MySQLãèµ·åããŠãããã©ãããããã³æ¥ç¶ã_åãå ¥ããŠãããã©ããã確èªããæ¹æ³ã¯ïŒ ïŒããã³PostgreSQLãããã³ïŒ_ããã«ãµãŒãã¹ãæ¿å ¥_ïŒïŒã ãŸãããpingãã¯ã©ãããå®è¡ããå¿ èŠããããŸããïŒ ããªããå§ããŠããã³ã³ããã®äžããã¹ãããïŒ
ç§ã®ç¥ãéããå
¬åŒã®WordPressã€ã¡ãŒãžã«ã¯ãMySQLãdocker-entrypoint.sh
æ¥ç¶ãåãå
¥ããŠãããã©ããã確èªããããã®ãã§ãã¯ãå«ãŸããŠããŸã
@thaJeztah ãMySQLæ¥ç¶ãšã©ãŒã®ããã«PHPã«ããã€ãã®ç°¡åãªåè©Šè¡ããžãã¯ãè¿œå ããã 2æ¥åã«tianonã«ãã£ãŠäœæãããŸãã-ããã§ããã :-)誰ãç¥ã£ãŠããããããããããã¯çµå±ã®ãšããæšæºçãªã¢ãããŒãã«ãªãã§ãããããç¹ã«ãã®çš®ã®åè©Šè¡ã®å®è£ ãå®éã«ãã¹ãŠã®ç»åäœæè ã«ãã£ãŠãã¹ããããŠããããšã«ã€ããŠã¯ããŸã çåããããŸãã
ããŒãã®pingã«ã€ããŠ-æé©ãªå®è£ ãäœã§ããããçŽæ¥èšãããšã¯ã§ããŸããã äžæçã«ãªã³ã¯ãããã³ã³ããããã®åçŽãªæ¥ç¶ãã§ãã¯ãšãECONNREFUSEDã®ååŸäžã«åè©Šè¡ããã®ã§ã¯ãªãããšæããŸãã åé¡ã®80ïŒ ïŒãŸãã¯99ïŒ ïŒã解決ãããã®ã¯äœã§ãããŠãŒã¶ãŒã¯æ¯åäœåºŠãäœåºŠãèªåã§åé¡ã解決ããå¿ èŠã¯ãããŸããã
@kennuããïŒ ãããã§ããããæè¿è¿œå ãããããšã«æ°ã¥ããªãã£ããã¡ããã©ãã®è°è«ã®ããã«ä»ã¹ã¯ãªããããã§ãã¯ããã
æ確ã«ããããã«ãç§ã¯ããªããæ±ããŠããåé¡ãç解ããŠããŸãããCompose / Figããã¹ãŠã®äººã«ãšã£ãŠïŒãããŠç¢ºå®ã«ïŒããŸãããã¯ãªãŒã³ãªæ¹æ³ã§ãããã解決ã§ãããã©ããã¯ããããŸããã ã¬ãžã¹ããªäžã®å€ãã®ç»åã«ã¯ããããã®åé¡ãåŠçããããã®ãã»ãŒãã¬ãŒãããèšå®ãããŠããªãããšã¯ç解ããŠããŸããããããä¿®æ£ããã®ã¯Compose / Figã®è²¬ä»»ã§ã¯ãªãããšæããŸãã
äžèšãèšã£ã; ãããDockerfileã®ãã¹ããã©ã¯ãã£ã¹ã®ã»ã¯ã·ã§ã³ã«ææžåããã®ã¯è¯ãããšã ãšæããŸãã
人ã ã¯ãããèªèãããµãŒãã¹ã®ãåæ¢ããåŠçããæ¹æ³ã説æããããã«ããã€ãã®äŸãè¿œå ããå¿ èŠããããŸãã åç §çšã«@dnephinãèšåãã
ç§ã¯åãåé¡ã«ééãã @ kennuããã®ãã®ã¢ã€ãã¢ã
Personally, I would make Things Just Work, by making Fig autodetect which container ports are exposed to a linked container, ping them before starting the linked container (with a sane timeout), and ultimately provide a configuration setting to override/disable this functionality.
ããã«ãããå ¬åŒã®mongodbã³ã³ãããŒã«äŸåããå Žåã®ããã«ãå€ãã®äžè¬çãªãŠãŒã¹ã±ãŒã¹ã解決ããããšæããŸãã
@soupdiverã«åæããŸãã ãŸããmongoã³ã³ãããŒãšã®é¢é£ã§åé¡ãçºçããstart.shã¹ã¯ãªããã§åäœããŠããŸãããã¹ã¯ãªããã¯ããŸãåçã§ã¯ãªãããªããžããªã«ä¿æããå¿ èŠã®ããå¥ã®ãã¡ã€ã«ãè¿œå ããŸãïŒç§ã®ããŒããªããžããªã®Dockerfileãšdocker-compose.ymlïŒã ãã ãããæ©èœãããæ¹æ³ãããã°ããã®ã§ãããåŸ æ©ã¿ã€ããŒã®ãããªåçŽãªãã®ã§ã¯ã»ãšãã©ã®å Žåãããã«ããã§ããªããšæããŸãã
åºæ¬çãªãããã¯ãŒã¯æ¥ç¶ãå©çšã§ããå¯èœæ§ããããããIMO pingã¯ååã§ã¯ãããŸãããããµãŒãã¹èªäœã¯ãŸã æºåãã§ããŠããŸããã
ããã¯ãããšãã°MySQLã€ã¡ãŒãžã®å Žåã§ããå
¬éãããããŒãã®æ¥ç¶ãã§ãã¯ã«curlãŸãã¯telnetã䜿çšããæ¹ãå®å
šã§ãããããã§ååãã©ããã¯ããããŸããã ãã ããã»ãšãã©ã®ã³ã³ããã«ã¯ããããã®ããŒã«ãããã©ã«ãã§ã€ã³ã¹ããŒã«ãããŠããŸããã
dockerãŸãã¯figã¯ãããã®ãã§ãã¯ãåŠçã§ããŸããïŒ
dockerãŸãã¯figã¯ãããã®ãã§ãã¯ãåŠçã§ããŸããïŒ
èŠããã«ïŒ_no_ã ããŸããŸãªçç±ã§;
ãŸããFig / Composeã«ãœãããŠã§ã¢ïŒcurlãtelnetãªã©ïŒãã€ã³ã¹ããŒã«ããŠã³ã³ãããŒãå€æŽãããããªããšæããŸãã
ãããã確ãã«éããŸãã
Fig / Composeã¯ãããè¡ãæ¹æ³ãèªåçã«çºæããããšã¯ã§ããŸããã
çºæããªãã ã€ããžã¯ãããã«ãŒã®èª¬æã確èªæ¹æ³ãªã©ãèããŠããŸããã
web:
image: nginx
link: db
db:
is_available: "curl DB_TCP_ADDR:DB_TCP_PORT"
telnet
ã³ãã³ãã¯ãã³ã³ãããŒã§ã¯ãªããdocker-hostã§å®è¡ãããŸãã
ããããç§ã¯ãã 倧声ã§èããŠããŸããç§ã¯ãããå®ç§ãªè§£æ±ºçã§ã¯ãªãããšãç¥ã£ãŠããŸãã ãã ããã³ã³ããã«ã«ã¹ã¿ã ãã§ãã¯ã¹ã¯ãªããã䜿çšããçŸåšã®æ¹æ³ã¯æ¹åãããå¯èœæ§ããããŸãã
telnetã³ãã³ãã¯ãã³ã³ãããŒã§ã¯ãªããdocker-hostã§å®è¡ãããŸãã
次ã«ã curl
ãŸãã¯<name a tool that's needed>
ããã¹ãã«ã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã ããã«ã¯ãã»ãã¥ãªãã£äžã®å€§ããªåé¡ãçºçããå¯èœæ§ããããŸãïŒããšãã°ã誰ããé¢çœããªããããšæã£ãŠis_available: "rm -rf /"
ïŒã ãããšã¯å¥ã«ã_host_ããããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ã§ããããšã¯ãã³ã³ãããŒå
ãããããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ã§ããããšãä¿èšŒãããã®ã§ã¯ãããŸããã
ããããç§ã¯ãã 倧声ã§èããŠããŸãã...
ç§ã¯ç¥ã£ãŠããŸãããããŠç§ã¯ãããæè¬ããŸãã ãããèªååããä¿¡é Œã§ããæ¹æ³ããªãããŸãã¯ã»ãšãã©ã®ãŠãŒã¹ã±ãŒã¹ã«åœ¹ç«ã€ãšèããŠãã ããã å€ãã®å Žåãè€éãªãã®ã«ãªã£ãŠããŸããŸãïŒããšãã°ã curl
äŸãèŠãŠãã ãããæ¥ç¶ãè©Šè¡ããæéã¯ã©ããããã§ããïŒåè©Šè¡ããŸããïŒïŒã ãã®ãããªè€éãã¯ãã³ã³ãããŒå
ã移åããæ¹ãé©åã§ããããã¯ãã³ã³ãããŒãFig / Composeã§ã¯ãªãDockerã§éå§ãããå Žåã«ã圹ç«ã¡ãŸãã
@thaJeztahç§ã¯ããªãã«å®å šã«åæããŸãã ãããŠã100ïŒ ã®è§£æ±ºçããªãå¯èœæ§ãéåžžã«é«ãã§ãã
以åã«è¡ã£ãææ¡ãç¹°ãè¿ããŸããfig.ymlã§ããã®ã³ã³ãããŒãçµäºããã®ãåŸ ã£ãŠããããã®ä»ã®ã³ã³ãããŒãå®è¡ããããšè¿°ã¹ãããšãã§ããã°ååã§ãã
ããã«ããããã¹ãŠã®äŸåé¢ä¿ïŒããŒãã®ãã§ãã¯ãããŒã¿ããŒã¹ã®åæåãªã©ïŒãåŸ æ©ããæ¹æ³ãç¥ã£ãŠããã³ã³ãããŒãäœæã§ããfigã®ç¥èãã§ããã ãå°ãªãããå¿ èŠããããŸãã
ç§ã¯ããã次ã®ãããªãã®ãšããŠæ§æãããŠããã®ãèŠãã§ãããïŒ
ãã
ã¢ããªïŒ
ãªã³ã¯ïŒ
--dbïŒdb
åææ¡ä»¶ïŒ
--runthisfirst
runthisfirstïŒ
ãªã³ã¯ïŒ
--dbïŒdb
ãã
runthisfirstã«ã¯ãããŒã¿ããŒã¹ãèµ·åããŠã¢ã¯ã»ã¹ã確èªã§ããããšãæå³ãããªã³ã¯ããããŸãã ã¢ããªã¯ãrunthisfirstãçµäºãããšãã«ã®ã¿å®è¡ãããŸãïŒrunthisfirstãæ£åžžã«çµäºããå¿ èŠãããå Žåã®ããŒãã¹ãã€ã³ãïŒã
ããã¯çããšããŠå®è¡å¯èœã§ããïŒ
KJL
2015幎2æ10æ¥ã§ã5æ28åã§ãããã¢ã¹ã»ã ã³ã¯[email protected]ã¯æžããŸããïŒ
@thaJeztahhttps ïŒ//github.com/thaJeztahç§ã¯ããªãã«å®å šã«åæããŸãã ãããŠã100ïŒ ã®è§£æ±ºçããªãå¯èœæ§ãéåžžã«é«ãã§ãã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHub https://github.com/docker/fig/issues/374#issuecomment-73561930ã§è¡šç€ºããŠ
ã·ã§ã«ã¹ã¯ãªããã©ã³ãã£ãŒã移è¡ããããšãããšããããã®åé¡ãçºçããŸããã 次ã®ã³ã³ãããèµ·åããåã«ããã®ç§æ°ã ãã¹ãªãŒãããåçŽãªã¹ãªãŒã/åŸ æ©ããŒãè¿œå ããã ãã§ãããã§ãããã
db:
image: tutum/mysql:5.6
sleep: 10
app:
link:
- db:db
ç§ã¯ããã€ãã®çç±ã§ãããæ¬åœã«å¥œãã§ã¯ãããŸããã
aïŒããã«ã¯ééã£ãå Žæã ãšæããŸã
bïŒã©ã®ãããå¯ãŸããïŒ
cïŒã¿ã€ã ã¢ãŠããé·ããªãå Žåã¯ã©ããªããŸããïŒ
æãããªåé¡ã¯å¥ãšããŠãç§ã¯æ¬åœã«èããŠããŸãã
ã€ã³ãã©ã¹ãã©ã¯ãã£ã¯ãã¢ããªã±ãŒã·ã§ã³ãäœãæ°ã«ããå¿
èŠããããŸã
ã§ããããã®éãåæ§ã§ãã IHMOã¢ããªã¯æ¬¡ã®ããã«äœæããå¿
èŠããããŸã
ããèªäœã®èŠä»¶ã«ã€ããŠãããå¯å®¹ã§ãããã³/ãŸãã¯ããè³¢ããªããŸãã
ããã¯èšã£ãŠããæ¢åã®ã¢ããªã±ãŒã·ã§ã³ãšã¬ã¬ã·ãŒã¢ããªã±ãŒã·ã§ã³
äœããå¿
èŠã«ãªããŸã-ããããããã¯ãããããã£ãšé²ãã§ããã¯ãã§ã
次ã®è¡ïŒ
docker-compose.yml
ïŒ
db:
image: tutum/mysql:5.6
app:
wait: db
link:
- db:db
wait
ã db
ãå
¬éãããããµãŒãã¹ãå©çšå¯èœã«ãªãã®ãåŸ
ã¡ãŸãã
åé¡ã¯ããããã©ã®ããã«å€æãããã§ãã
æãåçŽãªã±ãŒã¹ã§ã¯ãæ£åžžã«éãããšãã§ãããŸã§åŸ
ã¡ãŸã
å
¬éããããµãŒãã¹ãžã®tcpãŸãã¯udpæ¥ç¶ã
ããã¯ãã®åé¡ã«ã¯ããéããããããŸããããdockerããããã³ã³ãããŒããããªã¬ãŒãéå§ããŠå¥ã®ã³ã³ãããŒã§äœããã®ã³ãŒã«ããã¯ãçºçãããããšãã§ããã€ãã³ãããªã¬ãŒã·ã¹ãã ãæäŸããå Žåãè¯ã解決çã«ãªããŸãã å¥ã®ãµãŒãã¹ãéå§ããåã«MySQLããŒã¿ããŒã¹ãžã®ããŒã¿ã®ã€ã³ããŒããåŸ æ©ããå ŽåãããŒãã䜿çšå¯èœãã©ãããç£èŠããã ãã§ã¯äžååã§ãã
ãšã³ããªãã€ã³ãã¹ã¯ãªãããã³ã³ããå ããDockerã«ã¢ã©ãŒããèšå®ããïŒããšãã°ãäºåå®çŸ©ãããç°å¢å€æ°ãèšå®ããïŒãšãå¥ã®ã³ã³ããã§ã€ãã³ããããªã¬ãŒãããŸãïŒãããããåãåæç°å¢å€æ°ãèšå®ããïŒãšãäž¡åŽã®ã¹ã¯ãªãããç¹å®ã®ã¿ã€ãã³ã°ãç¥ãããšãã§ããŸãã¿ã¹ã¯ãå®äºããŸããã
ãã¡ãããç¬èªã®ãœã±ãããµãŒããŒããã®ä»ã®æ段ãèšå®ããããšãã§ããŸãããã³ã³ãããŒãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®åé¡ã解決ããã®ã¯é¢åã§ãã
@aanandç§ã¯_ã»ãšãã©_ããªãã®åŸ æ©ã¢ãããŒããåºçºç¹ãšããŠäœ¿çšããŠäœããæ©èœããŠããŸãã ãã ãã docker-composerunãšdockerrunã®éã«ã¯ãåè ããã³ã°ããŠããããã«èŠããåŸè ãé åçã«æ©èœãããšããå¥ã®ããšãèµ·ãã£ãŠããŸãã
docker-compose.ymlã®äŸïŒ
db:
image: postgres
ports:
- "5432"
es:
image: dockerfile/elasticsearch
ports:
- "9200"
wait:
image: n3llyb0y/wait
environment:
PORTS: "5432 9200"
links:
- es
- db
次ã«äœ¿çšãã...
docker-compose run wait
ããããããã¯ããã§ã¯ãããŸããã ãªã³ã¯ããããµãŒãã¹ãéå§ããããã§ãŒã¯ããã®ãåŸ
ã€ã ãã®ããã§ãïŒå°ãªããšãç§ã®virtualboxç°å¢å
ã§ã¯ã nc
ã«ãŒãã«å°éãã1ã€ã®ãããã衚瀺ãããŸã...äœããããŸããïŒã
ãã ãããªã³ã¯ããããµãŒãã¹ãå®è¡ããŠãããšããã®æ¹æ³ã䜿çšã§ããŸãïŒããã¯ãåºæ¬çã«CIãã«ãã§è¡ã£ãŠããããšã§ãïŒ
docker run -e PORTS="5432 9200" --links service_db_1:wait1 --links service_es_1:wait2 n3llyb0y/wait
docker-compose run
ãåãããã«æ©èœããã¯ãã§ãã éãã¯ããã¿ãããã©ã°-d
docker-compose run
ãšãšãã«
å°ãè©Šè¡é¯èª€ããåŸãäžèšã®ã¢ãããŒãã¯ããŸãããããã§ãïŒ ããã¯ãbusyboxããŒã¹ã«éåžžã«ããŸãæ©èœããnetcatutilããªãã ãã§ãã @aanand waitãŠãŒãã£ãªãã£ã®ä¿®æ£ããŒãžã§ã³ã¯ã docker-compose up
代ããã«docker-compose run <util label>
ã䜿çšãããšã docker -
ãã ããå ã®è³ªåã®ããã«é£éç¶æ³ãåŠçã§ãããã©ããã¯ããããŸããã ããããããã§ã¯ãããŸããã
ã©ãèããŠãããæããŠãã ããã
ããã¯éåžžã«èå³æ·±ãåé¡ã§ãã ããã³ã³ãããå¥ã®ã³ã³ããã®æºåãã§ãããŸã§åŸ
æ©ããæ¹æ³ããããšãæ¬åœã«èå³æ·±ããšæããŸãã ãããã誰ããèšãããã«ãæºåã¯ã©ãããæå³ã§ããïŒ ç§ã®å ŽåãMySQLã®ã³ã³ãããŒããããããã¯ã¢ããã管çããåæããŒã¿ããŒã¹ã®ã€ã³ããŒããæ
åœããããŒã¿ããŒã¹ãå¿
èŠãšããåã¢ããªã®ã³ã³ãããŒããããŸãã ããŒããå
¬éãããã®ãåŸ
ã€ã ãã§ã¯äžååã§ããããšã¯æããã§ãã æåã«mysqlã³ã³ãããéå§ããå¿
èŠãããããã®åŸãæ®ãã¯mysqlãµãŒãã¹ã䜿çšããæºåãã§ãããŸã§åŸ
æ©ããå¿
èŠããããŸãã ãããååŸããã«ã¯ã docker exec
æ©èœã䜿çšããåèµ·åæã«å®è¡ãããåçŽãªã¹ã¯ãªãããå®è£
ããå¿
èŠããããŸããã åºæ¬çã«ãæ¬äŒŒã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
run mysql
waitUntil "docker exec -t mysql mysql -u root -prootpass database -e \"show tables\""
run mysql-backup
waitUntil "docker exec -t mysql mysql -u root -prootpass database -e \"describe my_table\""
run web1
waitUntil "dexec web1 curl localhost:9000 | grep '<h1>Home</h1>'"
run web2
waitUntil "dexec web2 curl localhost:9000 | grep '<h1>Home</h1>'"
run nginx
ããã§ã waitUntil
é¢æ°ã«ã¯ã docker exec âŠ
ã³ãã³ããè©äŸ¡ããçµäºã³ãŒãã0ã§ãããã©ããã確èªããã¿ã€ã ã¢ãŠãä»ãã®ã«ãŒãããããŸãã
ããã«ããããã¹ãŠã®ã³ã³ãããäŸåé¢ä¿ã䜿çšã§ããããã«ãªããŸã§åŸ æ©ããããšãä¿èšŒãããŸãã
ãããã£ãŠãcomposeãŠãŒãã£ãªãã£å
ã«çµ±åãããªãã·ã§ã³ã«ãªãå¯èœæ§ããããšæããŸãã wait_until
ãä»ã®äŸåé¢ä¿ïŒã³ã³ããïŒã®ãªã¹ãã宣èšãã察å¿ããã³ãã³ãã«æ£åžžã«å¿çãããŸã§ïŒãŸãã¯ããªãã·ã§ã³ã®ãã¿ãŒã³ãŸãã¯æ£èŠè¡šçŸã䜿çšããŠçµæãã«äžèŽãããã©ããã確èªãããŸã§ïŒãããããåŸ
æ©ãããããªãã®ãããããŸããã grep
ã³ãã³ãã䜿çšããã ãã§ååãªå Žåã§ããæåŸ
ãããã®ã§ãïŒã
mysql:
image: mysql
...
mysql-backup:
links:
- mysql
wait_until:
- mysql: mysql -u root -prootpass database -e "show tables"
...
web1:
links:
- mysql
wait_until:
- mysql: mysql -u root -prootpass database -e "describe my_table"
...
web2:
links:
- mysql
wait_until:
- mysql: mysql -u root -prootpass database -e "describe my_table"
...
nginx:
links:
- web1
- web2
wait_until:
- web1: curl localhost:9000 | grep '<h1>Home</h1>'
- web2: curl localhost:9000 | grep '<h1>Home</h1>'
...
ãã®ãããªæž¯ãžã®åçŽãªç®çã¯ãããŸãããïŒ
http://docs.azk.io/en/azkfilejs/wait.html#
@robsonpeixoto ïŒå€ãã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ãããŒããåŸ ã€ã ãã§ã¯äžååã§ãã ããšãã°ãäœææã«ããŒã¿ãããŒã¿ããŒã¹ã«ã·ãŒãããŠããŠãããŒã¿æäœãå®äºãããŸã§WebãµãŒããŒãèµ·åããŠããŒã¿ããŒã¹ã«æ¥ç¶ããããªããšããŸãã ããŒãã¯åžžã«éããŠããã®ã§ãWebãµãŒããŒã®èµ·åã劚ããããããšã¯ãããŸããã
AWSCloudFormationã®WaitConditionã®ãããªãã®ãããã§ãããã http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html
+1 MySQLã«äŸåããRailsã¢ããªã®ãã¹ãã«Dockerã䜿çšãããšãåãåé¡ãçºçããŸã
+1ç§ã«ããã®åé¡ããããŸãã @adrianhurtã®ã¢ã€ãã¢ã奜ãã§ããããã§ã¯ãåŸ æ©ãå®äºãããã©ãããå€æããããã«è©äŸ¡ããæ¡ä»¶ãå®éã«æå®ããŸãã ããããã°ããŸã çŽ æŽããã宣èšåymlãããããreadyãã®ä»»æã®å®çŸ©ãæã£ãŠããå¿ èŠã¯ãããŸããã
+1
ãã®ã¿ãããã°ããéããŠããŸããïŒ http ïŒ
+1
åçŽãªã¿ã€ã ã¢ãŠãã®å Žåã¯+1
æºåå®äºç¶æ ã®å Žåã¯+1
+1
ãã®ã¹ã¬ããã§æšå¥šãããŠããããã«ãç§ã¯ãã°ããã®éãã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã§ãããéåžžã«ç¢ºå®ã«è§£æ±ºããŠããŸãã
ãããMySQL + PHPã«å®è£ ããæ¹æ³ã説æããããã«ãããã«ç§ã®ã³ãŒãã瀺ããŸãã
igorw / retryãã:)
ãããã¯ãŒã¯ã¯ä¿¡é Œã§ããã®ã§ãç©äºã¯åžžã«æ©èœããã¯ãã§ãã ç§ã¯æ£ããã§ããïŒ ããã§ãªãå Žåã¯ãåè©Šè¡ããããŸãã
+1
@ schmunk42ãããã®-æ¥ç¶ã®ç¢ºç«ãšã¹ãçããŒã¿ããŒã¹ã®ã»ããã¢ããæäœã®äž¡æ¹ã®è¯ãäŸã§ããããšã奜ãã§ãã
NodeJSãRubyãPHPãªã©ã®ããŸããŸãªã±ãŒã¹ã§ãããã¥ã¡ã³ãã«å«ããããã®ïŒããã€ãã®ïŒåºæ¬çãªäŸãäœæãããšããã§ãããã
+1ãå°ãªããšãã³ã³ãããæ£åžžã«èµ·åããåã«é 延ãè¿œå ããããã®ããã€ãã®ãªãã·ã§ã³ãæäŸããå¿ èŠããããŸãã
+1
ã³ãŒãã§ã¯ãªããµãŒãã¹ã«æ¥ç¶ããããšãããšãã«åé¡ã解決ããæ¹æ³ã
ããšãã°ããµãŒãã¹Service
ãšããŒã¿ããŒã¹InfluxDB
ãŸãã Services
ã¯InfluxDB
Services
ãå¿
èŠã§ã InfluxDB
èµ·åã¯é
ããªããŸãã
docker-composeã¯InfluxDB
æºåãã§ãããŸã§ã©ã®ããã«åŸ
æ©ã§ããŸããïŒ
ç§ã¯ã³ãŒããç§ã®ãã®ã§ããç§ã¯åè©Šè¡ãå ¥ããŠããã解決ããããšãã§ããŸãã ãããã3çªç®ã®ã¢ããªã®å Žåãã³ãŒããå€æŽããããšã¯ã§ããŸããã
@robsonpeixotoãã®ãã±ããã«ã¯ãnetcatãŸãã¯åæ§ã®æ¹æ³ã§ããã€ãã®äŸããããŸãã å¥ã®ãã±ããã§ç§ã®MySQLã®äŸãèŠãããšãã§ããŸãïŒ https ïŒ
ãã®ãããåã³ã³ããã«ã¯ãç¬èªã®æºåãã§ããŠããããšã瀺ããªãã·ã§ã³ã®æ©èœãå¿
èŠã ãšæããŸãã ããšãã°ãDBã®å Žåãããã»ã¹ãäœæããããšãã§ã¯ãªãããµãŒãã¹ãå®å
šã«æºåãã§ãããŸã§åŸ
ã¡ãããšæããŸãã ããšãã°ã docker exec
ã䜿çšããŠã«ã¹ã¿ãã€ãºãããã§ãã¯ãè¡ããåçŽãªã¯ãšãªã解決ã§ãããã©ããããã§ãã¯ããããšã§ãããã解決ããŸãã
å
éšãã§ãã¯ã³ãã³ãã瀺ãdocker run
ãªãã·ã§ã³ã®ãã©ã°ã¯ãåŸã§ãªã³ã¯çšã®ç¹å¥ãªãã©ã°ã䜿çšããŠå¥ã®ã³ã³ãããããªã³ã¯ããã®ã«æé©ã§ãã
äœãã®ãããªãã®ïŒ
$ sudo docker run -d --name db training/postgres --readiness-check /bin/sh -c "is_ready.sh"
$ sudo docker run -d -P --name web --link db:db --wait-for-readiness db training/webapp python app.py
ããã§ã is_ready.sh
ã¯ãã³ã³ãããŒããã€æºåãã§ããŠãããšèŠãªããããã®æ±ºå®ãæ
åœããåçŽãªããŒã«ãã¹ãã§ãã
+1
@ schmunk42çŽ æµãªåŒçšïŒ
+1
+1
+1
+1
+1
+1
+1
+1
+1
å®ã¯æ°ãå€ãã£ãã®ã§-1
ã³ã³ããããµãŒãããŒãã£ã®ãµãŒãã¹ãå©çšå¯èœãã©ããã確èªããæ¹ãçã«ããªã£ãŠããŸããããã¯ãããšãã°nc
ã䜿çšããå°ããªbashã©ãããŒã¹ã¯ãªããã䜿çšããŠç°¡åã«å®è¡ã§ããŸãã
é 延ã«äŸåããããšã¯é åçã§ããã次ã®çç±ããäžååãªè§£æ±ºçã§ãã
ã©ãããŒbashã¹ã¯ãªããã®èšè¿°ã«äŸåããæ¹ãã次ã®çç±ã§åªããŠããŸãã
ãã®ã¹ã¬ããããŒããèªããšã誰ãç§å¯ã«ã€ããŠèšåããŠããªãããšãããããŸãã å®è¡ããããšã·ãŒã¯ã¬ãããèŠæ±ããããŒã¿å°çšã³ã³ããã䜿çšããããšããŠããŸãã ç§ãæ±ããŠããåé¡ïŒã·ãŒã¯ã¬ããã®éä¿¡/埩å·åã«æéããããããããšãäºæããŠããããŒã¿ããªããããäŸåã³ã³ããã倱æããŸãã ãå®è¡ããåã«ãã¹ãŠãã³ã³ããã«å ¥ããŠããããšããæ¹æ³ã¯ç§å¯ãªã®ã§ãå®éã«ã¯äœ¿çšã§ããŸããã
æ»ãã³ãŒãã®ã³ã³ããã¹ããåå ã§ãcomposeã®ããŒã¿ã®ã¿ã®ã³ã³ãããŒã«ãããŸãããååšããããšã¯ç¥ã£ãŠããŸããããããè¡ãããã®ããè¯ãæ¹æ³ã¯ãããŸããïŒ
åæ§ã«ããã«ã€ããŠç§ã®èããå€ããã-1ã @dnephinã®ã¢ãããŒãã¯å®å šã«æ£ããã§ãã _application_ã_service_ã«äŸåããŠããå Žåãã¢ããªã±ãŒã·ã§ã³èªäœããã®ãµãŒãã¹ã®äœ¿çšäžå¯ãé©åã«åŠçã§ããå¿ èŠããããŸãïŒæ¥ç¶ã®å確ç«ãªã©ïŒã ããã¯ãbashã©ãããŒã¹ã¯ãªãããComposeãŸãã¯Dockerã®ããžãã¯ã§ãã£ãŠã¯ãªãããã¢ããªã±ãŒã·ã§ã³èªäœã®è²¬ä»»ã§ãã ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ä»¥å€ã®ãã®ããåæåã§ã®ã¿æ©èœããŸãã ãã®ãµãŒãã¹ãããŠã³ããå Žåãã©ãããŒã¹ã¯ãªãããªã©ã¯å®è¡ãããŸããã
ã¢ããªã±ãŒã·ã§ã³/ã©ã€ãã©ãª/ãã¬ãŒã ã¯ãŒã¯ã®éçºè ã«ãã®è²¬ä»»ãèªèããŠãµããŒãããŠãããããšãã§ããã°ãããã¯çŽ æŽãããããšã§ãã
æ¡çšããã¢ãããŒããæ€èšããã®ã¯é£ããã§ãããä»ã®ããŒã¢ã³ããµã€ãããŒãããããšã¯ãå§ãããŸããã å¥ã®Railsã¢ããªãçŸåšæåã®èµ·åæã«DBã移è¡ããŠã·ãŒãããŠãããšãã«ãRailsã¢ããªãMySQLããŒã¿ããŒã¹ã«æ¥ç¶ããããšããŠããç§ã®äŸã§ã¯ãRailsã¢ããªã«DBã䜿çšããªãããã«éç¥ããã«ã¯ã次ã®ãããããè¡ããŸãã ActiveRecordã©ã€ãã©ãªãå€æŽãããïŒçºçããªãïŒãDBã移è¡ããã³ã·ãŒããããŠãããã©ããã確èªãç¶ããã¹ã¯ãªãããå®è¡ããå¿ èŠããããŸãã ããããããã«ããã¯ãã®ããŒã¿ãç¥ããã«ãããã³/ãŸãã¯DBãã·ãŒãããŠããã·ã¹ãã ã§å®è¡ãããæ®ãã®ããŒã¿ã«æ¥ç¶ããããã«éç¥ããã¹ã¯ãªãããæããã«ãã©ãããã°ç¢ºå®ã«ç¥ãããšãã§ããŸããã
æãããªè§£æ±ºçãæ¬ ããŠãããããããŸãããããéçºè ã¯ç¬èªã®ã³ãŒãã§ããã«å¯ŸåŠã§ããã¯ãã§ãããšããããªãã®çãã¯ãæ¢è£œã®ã©ã€ãã©ãªã䜿çšããŠãããšãããããŒã¢ã³ããµã€ãããŒãããããšããæ³å®ããããŠããªããšãã«å£ããŸããã³ã³ããã
@mattwallingtonComposeããã®ç¶æ³ã®è§£æ±ºçãã©ã®ããã«æäŸããããã
ãããéåžžã«å
·äœçã§ãããComposeãçºæããã®ã¯ããã«å°é£ã«ãªããŸãã ããªãã®ã±ãŒã¹ã«åœ¹ç«ã€ãããããªãã®ã§ãåæå/移è¡/ã·ãŒãã«é¢ããäžèšã®@dnephinã®ãã³ãã®ããã€ããèªã¿ãŸãã
ç§ã®æåŸã®è¡ã®èŠç¹ãèŠéãããšæããŸããå€ãã®æ¢è£œã®ã©ã€ãã©ãªã¯ã埩å åã®ããæ¹æ³ã§æ§ç¯ãããŠããªãããã_æ£ç¢ºã«_æ©èœããŸããã Composeãå®è£ ã§ããããããã¹ãŠã解決ã§ããéæ³ã®ãœãªã¥ãŒã·ã§ã³ã¯ãããŸããã
ç解ããŸããã ãããã®ãŠãŒã¹ã±ãŒã¹ã®å€ãã§æ©èœãã以åã®ç§ã®ææ¡ã¯ãã³ã³ãããŒéã§å ±æç°å¢å€æ°ã䜿çšããããšã§ãã äžæ¹ã¯å€æ°ã®ããŒãªã³ã°ãããã¯ããããäžæ¹ã¯ã¢ã¯ã·ã§ã³ãå®è¡ããŠããå€æ°ãèšå®ã§ããŸãã
ã³ã³ããéã®å ±æç°å¢å€æ°ã«é¢ãã+ 1 @ mattwallingtonã®ã¢ã€ãã¢
ããããšãããããŸããã ããã¯åçŽã§ãïŒè£œåã¬ãã«ã§ãã³ãŒããèŠãŠããªãã£ãã®ã§ãéçºåŽããäœãå¿ èŠãããããŸããïŒãããããã®åé¡ã®å€ãã解決ããç¹å®ãããŠããªããããããããä»ã®å€ãã®åé¡ã解決ããŸãããã®åé¡ã
ããããããã«ããã¯ãã®ããŒã¿ãç¥ããã«ãããã³/ãŸãã¯DBãã·ãŒãããŠããã·ã¹ãã ã§å®è¡ãããæ®ãã®ããŒã¿ã«æ¥ç¶ããããã«éç¥ããã¹ã¯ãªãããæããã«ãã©ãããã°ç¢ºå®ã«ç¥ãããšãã§ããŸããã
@mattwallington ïŒã¹ããŒãããŒãã«ã®ç§»è¡çªå·ã確èªããŠãã ããã çªå·ãæ£ãããã°ã移è¡ãå®è¡ãããããšãããããŸãã
ããã¯ãbashã©ãããŒã¹ã¯ãªãããComposeãŸãã¯Dockerã®ããžãã¯ã§ãã£ãŠã¯ãªãããã¢ããªã±ãŒã·ã§ã³èªäœã®è²¬ä»»ã§ãã ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ä»¥å€ã®ãã®ããåæåã§ã®ã¿æ©èœããŸãã ãã®ãµãŒãã¹ãããŠã³ããå Žåãã©ãããŒã¹ã¯ãªãããªã©ã¯å®è¡ãããŸããã
@ agilgur5 ïŒã¯ããã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠåŠçãããããšã«åæããŸãããbashã¹ã¯ãªããã¯ããµãŒãã¹ãå©çšã§ããªããšãã«ã¢ããªãåèµ·åãããªã©ããã®ããã«ã³ãŒãã£ã³ã°ãããŠããªãã¢ããªã±ãŒã·ã§ã³ãåŠçããããã®ç°¡åãªãœãªã¥ãŒã·ã§ã³ã§ãã
ã¢ããªã¬ãã«ã§äœããã¹ãããäœãã§ãããã«ã€ããŠäžæ¥äžè°è«ããããšãã§ããŸãããåžå Žã®ãã¹ãŠã®ã¢ããªãããã«å¯ŸåŠããèªå·±å埩ã§çŽ æŽããããã®ã«ãªãããšãæåŸ ããã®ã§ã¯ãªãïŒããããããªãïŒã解決ã§ããããã€ãã®æ©èœãè¿œå ããããšã«å察ããã®ã¯ãªãã§ããã¢ããªã®ãã®åé¡ã¯ããµãŒãããŒãã£ã¢ããªã®äœææ¹æ³ããå®è¡ããå¿ èŠããããå®è¡ããªãå 容ã«é¢ä¿ãªããDockerã§å®è¡ãããŸãã ãããç§ãã¡ã管çã§ãããã®ã§ãã ç§ãã¡ã«ã¯ãããå¶åŸ¡ã§ããªãã®ã§ã誰ãåé¡ã解決ããã¹ããã決ããã®ã§ã¯ãªããåé¡ã解決ããŸãããã
@mattwallingtonã«åæããŸãã ãã¹ãŠã®ã³ã³ããã€ã¡ãŒãžã®ãã¹ãŠã®éçºè ããã®ã¢ããªã¬ãã«ã®èªå·±å埩ã«ã¯ããã®äœåãªåŽåãå¿ èŠã«ãªãå¯èœæ§ããããŸããããããã®å€§éšåã¯ãç¡ç¥ã§ããããå¿ããããŠå®è£ ããã³ãã¹ãã§ããªãããã§ãã æçµçãªçµæãšããŠãäžéšã®ã³ã³ããã¯èªå·±å埩ããæ¹æ³ãç¥ã£ãŠããŸãããå€ãã®ã³ã³ããã¯ããã§ã¯ãããŸããã ãããŠããŠãŒã¶ãŒãšããŠãããªãã¯ããã§ãªããã®ã管çããããã®ããŒã«ããªãã§ãããã
é ã«æµ®ããã ã¢ã€ãã¢ïŒã³ã³ãããŒã®èµ·åãé ãããããšã§åé¡ã解決ãã代ããã«ãComposeã¯å€±æããã³ã³ãããŒã®å埩ãè©Šã¿ãããšãã§ããŸãã
recover: auto
ãããªãã®ã¯ãé害ãçºçããã³ã³ããã2ã4ã8ã16ãããã³32ç§ã§5ååèµ·åããŠãããå®å
šã«æŸæ£ããŸãã
ã³ã³ããäŸåã³ã³ããã®æŠå¿µã«ã€ããŠèª°ãã_èã_ãŸãããïŒ
äŸãã°ïŒ
`` `ïŒïŒyml
dbïŒ
ç»åïŒmysql
ãåŸ
ã€ïŒ
ãªã³ã¯ïŒ
--db
ããªã¥ãŒã ïŒ
-/ var / lib / docker.sockïŒ/docker.sock
-$ {PWD} /docker-compose.yml:/docker-compose.yml
ã³ãã³ãïŒdocker-compose up -d app
ã¢ããªïŒ
ç»åïŒmyuser / myapp
ãªã³ã¯ïŒ
--db
`` `
ããã§ã®åºæ¬çãªèãæ¹ã¯ãDocker Hubã«å ¬éã§ããå°çšã®åå©çšå¯èœãªãµãŒãã¹ãäœæããŠãèªå·±å埩ã¡ã«ããºã ãæããªãã³ã³ãããŒã®åé¡ã_解決_ãã誰ããèªåã®ã³ã³ããžã·ã§ã³ã«æ³šå ¥ã§ããããã«ããããšã§ãã
ç§ã¯ãã®ãããªãµãŒãã¹/ã³ã³ãã/ã€ã¡ãŒãžã®ãããã¿ã€ããäœæããä»ã®äººã«ãããè©ŠããŠã¿ãŠããããã©ã®ããã«æ©èœãããã確èªããããšãã§ããŸã...
@prologicäŸåé¢ä¿ã®åé¡ã¯ã話ããããµãŒãã¹ãå®éã«çšŒåããŠããããšãã©ã®ããã«ç¢ºèªãããã§ãã
db
ã³ã³ããã¯ping
å¿çããå¯èœæ§ããããŸãããå®éã«mysql
/ psql
ã³ãã³ãã§äœ¿çšã§ããããã«ãªãåã«ãèµ·ååã®ã¯ãªãŒã³ã¢ãã/ããŒã¿ããŒã¹ã®åæåãè¡ã£ãŠããŸãã
ãã®ãã¹ããæ§æå¯èœãªæ¹æ³ã§å®çŸ©ããããã¹ã¯ãªããã§åå©çšå¯èœãªwaitfor
ã¿ã€ãã®ãµãŒãã¹ã«æäŸãããã§ããŸããïŒ
ç§èŠãããã¯éåžžã«äžè¬çãªåé¡ã§ããã誰ããç¬èªã®ç¹å®ã®èŠä»¶ãæã£ãŠããŸãã ãã®å·ã§ä»¥åã«ã³ã¡ã³ãããããã«ãdockerã¯ãã³ã³ãããŒãèªèº«ã®æºåç¶æ³ããã§ãã¯ããããã®åçŽãªã³ãã³ããæå®ããæ¹æ³ãæäŸã§ããïŒãããŠãããã¹ãã§ããïŒãšæããŸãã æããã«ãç§ãã¡éçºè ã¯ãåã³ã³ãããŒã®æºåç¶æ³ã確èªããæ¹æ³ãå ·äœçã«ç€ºãå¿ èŠããããŸãã
å éšãã§ãã¯ã³ãã³ãã瀺ãããã®dockerrunã®ãªãã·ã§ã³ã®ãã©ã°ã¯ããªã³ã¯ã«ç¹å¥ãªãã©ã°ã䜿çšããŠãåŸã§å¥ã®ã³ã³ãããŒãããªã³ã¯ããã®ã«æé©ã§ãã
äœãã®ãããªãã®ïŒ
$ sudo docker run -d --name db training/postgres --readiness-check /bin/sh -c "is_ready.sh"
$ sudo docker run -d -P --name web --link db:db --wait-for-readiness db training/webapp python
ããã§ãis_ready.shã¯ãã³ã³ãããŒããã€æºåãã§ããŠãããšèŠãªããããã®æ±ºå®ãæ åœããåçŽãªããŒã«ãã¹ãã§ãã
ã³ã³ããããã®æºåãæåã§ãã§ãã¯ããããã®ã³ãã³ãã§ããããŸãã
ããã§ãis_ready.shã¯ãã³ã³ãããŒããã€æºåãã§ããŠãããšèŠãªããããã®æ±ºå®ãæ åœããåçŽãªããŒã«ãã¹ãã§ãã
ã€ãŸãããã¹ãŠã®éçºè ã¯ãã³ã³ãããŒã®æºåãã§ããŠãããã©ããã確èªããããã«äœ¿çšã§ãã_äœã_ãå«ããããã«ã€ã¡ãŒãž/ã³ã³ãããŒãæºåããå¿ èŠããããŸãã
ããã§æ£æ¹åœ¢1ã«æ»ããŸãã; éçºè ã¯ãã³ã³ããããµãŒãã¹ã®åæ¢/èµ·åæéã«å¯ŸããŠå埩åã®ãããã®ã«ãã責任ããããŸãããªããªããéçºè ã¯ãèªåãã¡ã®ç¶æ³ã«ãšã£ãŠãäœããæå³ããããäŒããããšãã§ããå¯äžã®äººã ããã§ãã
ãŸãã¯ãããã§äœããèŠèœãšããŠããŸããïŒ
åæããã 責任ã¯éçºè /ã³ã³ãã/ãµãŒãã¹ã«ãããŸã
æšææ¥ã«ã2015幎7æ30æ¥ãSebastiaanãã³Stijn [email protected]
æžããŸããïŒ
is_ready.shã¯ããæ åœããåçŽãªããŒã«ãã¹ãã§ãã
ã³ã³ããããã€æºåãã§ããŠãããšèŠãªããããã®æ±ºå®ãã€ãŸãããã¹ãŠã®éçºè ã¯èªåã®ç»å/ã³ã³ããã次ã®ããã«æºåããå¿ èŠããããŸã
ã³ã³ãããã§ãããã©ããã確èªããããã«äœ¿çšã§ãã_something_ãå«ãã
æºåãã§ããŸãããããã§æ£æ¹åœ¢1ã«æ»ããŸãã; éçºè ã責任ãè² ããŸã
ã³ã³ããããµãŒãã¹ã®åæ¢/èµ·åæéã«å¯ŸããŠå埩åã®ãããã®ã«ãã
圌ãã¯åœŒãã®ç¶æ³ã«ãšã£ãŠãããäœãæå³ããã®ããäŒããããšãã§ããå¯äžã®äººã§ããïŒãŸãã¯ãããã§äœããèŠèœãšããŠããŸããïŒ
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/docker/compose/issues/374#issuecomment-126278215 ã
ãžã§ãŒã ãºãã«ãº/ããããžãã¯
EïŒ [email protected]
WïŒprologic.shortcircuit.net.au
ã¯ãããã¡ããã ç§ã«ãšã£ãŠãã³ã³ããã®æºåãã§ããããšãæ¬åœã«ç¥ã£ãŠããã®ã¯ãèªåã®ã³ã³ããã ãã§ãã Dockerã¯ãã³ã³ãããŒã®å 容ã«ã€ããŠäœãç¥ãããšãã§ããŸããã ããã¯ãã©ãã¯ããã¯ã¹ã§ãã ãããã§ããå¯äžã®ããšã¯ãã³ã³ããã«å°ããããšã§ãïŒç§ãææ¡ããããã«ãå®è¡ããããšãã«æå®ãããã«ã¹ã¿ã ã¢ã¯ã·ã§ã³ããŸãã¯ããããã¹ãããä»ã®äžè¬çãªæ¹æ³ã§ïŒã ãããŠæããã«ãéçºè ã¯åœŒãå¿ èŠãšããŠãããã®ãšãã®ãã©ãã¯ããã¯ã¹ã®å 容ãç¥ã£ãŠããå¯äžã®äººã§ãã
ã¯ãããã®ãšããïŒ
2015幎7æ30æ¥ïŒæšææ¥ïŒã«ãadrianhurt [email protected]ã¯æžããŸããïŒ
ã¯ãããã¡ããã ç§ã«ãšã£ãŠãã³ã³ããããã€ããããæ¬åœã«ç¥ã£ãŠããã®ã¯
æºåã¯èªåã®ã³ã³ããã§ãã Dockerã¯ã®å 容ã«ã€ããŠäœãç¥ãããšãã§ããŸãã
ã³ã³ããã ããã¯ãã©ãã¯ããã¯ã¹ã§ãã ãããã§ããå¯äžã®ããšã¯å°ããããšã§ã
ã³ã³ããïŒç§ã®ããã«ãå®è¡ããããšãã«æå®ãããã«ã¹ã¿ã ã¢ã¯ã·ã§ã³ã䜿çšïŒ
ææ¡ãããããŸãã¯ããããã¹ãããããã®ä»ã®äžè¬çãªæ¹æ³ïŒã ãããŠæããã«éçºè
圌ãå¿ èŠãšããŠãããã®ãšãã®ãã©ãã¯ããã¯ã¹ã®å 容ãç¥ã£ãŠããã®ã¯åœŒã ãã§ããâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/docker/compose/issues/374#issuecomment-126285056 ã
ãžã§ãŒã ãºãã«ãº/ããããžãã¯
EïŒ [email protected]
WïŒprologic.shortcircuit.net.au
OK-ãããã¯ãŒã¯é害ãåŠçã§ããªãéçºäžãŸãã¯ã¬ã¬ã·ãŒãœãããŠã§ã¢ã®ãã¹ãŠã®ããã«ãçµå±ãã®åé¡ã解決ããããšããŸãã ç§ãã¡ãããããŠãããšèšã£ãŠããã®ã§ã¯ãªããæ§æãã»ãã³ãã£ã¯ã¹ãããã³è€éãã®æ觊ãã€ãã¿ããã ãã§ãã
èŠä»¶ã®æå°ã»ããã¯æ¬¡ã®ããã§ãã
ãŸãããã«ã¹ãã§ãã¯ããã°ããã®éDockerã«çµã¿èŸŒãŸããªããšä»®å®ããŸãããã
_å¥ã®ãµãŒãã¹ã®ã³ã³ãããçµäºããã®ã_åŸ ã€_ããšãå¯èœã«ããããšã§ãäžè¬çãªã±ãŒã¹ã§è§£æ±ºã§ããã®ã§ã¯ãªãããšæããŸãã ãã®åŸããã«ã¹ãã§ãã¯ãå¥ã®ãµãŒãã¹ãšããŠäœæã§ããŸãã
web:
image: mywebapp
links: ["db"]
wait_for: ["db_wait"]
db_wait:
image: netcat
links: ["db"]
command: sh -c "while ! nc -w 1 -z db 5432; do sleep 1; done"
db:
image: postgres
ããçš®ã®ã«ã¹ã¿ã ãã«ã¹ãã§ãã¯ãå¿
èŠãªå Žåã¯ããåŸ
æ©ããµãŒãã¹ã§å®çŸ©ããŸãã ããã§ã db_wait
ã¯ã mytable
ãmydb
ããŒã¿ããŒã¹ã«ååšããå Žåã«ã®ã¿çµäºããŸãã
db_wait:
image: postgres
links: ["db"]
command: sh -c "while ! psql --host db --dbname mydb -c "\d mytable"; do sleep 1; done"
æåã«å®è¡ããdbæºåã¹ã¯ãªãããããå Žåã¯ããããåŸ æ©ãããããšãã§ããŸãã
web:
image: mywebapp
links: ["db"]
wait_for: ["prepare_db"]
prepare_db:
image: prepare_db
links: ["db"]
command: ./prepare.sh
db:
image: postgres
æåã®ã±ãŒã¹ïŒã³ã³ãããŒãTCPæ¥ç¶ãåãå ¥ãããŸã§åŸ ã€ïŒã¯ãããã«ãµããŒããã䟡å€ãããã»ã©äžè¬çã§ããå¯èœæ§ããããŸãã
web:
image: mywebapp
links: ["db"]
wait_for_tcp: ["db:5432"]
db:
image: postgres
ããããã¹ãŠã«é ãããæå³ããããŸããäžéãã«ã¹ãã§ãã¯ãŸãã¯æºåãµãŒãã¹ã®å®è¡äžã¯docker-compose up -d
ããããã¯ããå¿
èŠããããŸããããã«ãããå®äºåŸã«ã³ã³ã·ã¥ãŒããŒãµãŒãã¹ãéå§ã§ããŸãã
ã¯ãã ãã ããç§ã®æèŠã§ã¯ãdockerèªäœãã³ã³ãããŒã®æºåãã§ããããšãå€æããæ¹æ³ãæäŸããå¿ èŠããããcomposeãããã管çã§ããŸãã ãã®åŸãdockerã§çŽæ¥æ°ããåé¡ãæèµ·ããããšãã§ããŸãã ç§ã«ãšã£ãŠãããã¯æ¬¡ã®ãããªãã®ãããããŸããïŒ
web:
image: mywebapp
links: ["db"]
wait_for: ["db"]
db:
image: postgres
ready_when: sh -c "while ! psql --host db --dbname mydb -c "\d mytable"; do sleep 1; done"
ãã®åŸãåé¿çãšããŠæ°ãããµãŒãã¹ãäœæããå¿ èŠã¯ãããŸãã
åæããŸããã éçºè ã«æè»æ§ãäžããŸãã ãŸããã³ã³ãããŒãäžæåæ¢ããããšã¯ãéçºè ãåŸ æ©äžã«ãã®ã³ã³ãããŒãå®è¡ããå¿ èŠãããããšã§ã¯ãªãå ŽåããããŸãã ãããããçºçããå¿ èŠãããç¬èªã®initãããã€ããããŸãããdbãæ¥ç¶ã®æºåãã§ãããŸã§åŸ ã¡ãŸãã ãããã£ãŠããããåçŽãªå ±æç°å¢å€æ°ã§ããå Žåãéçºè ã¯å¿ èŠã«å¿ããŠããã䜿çšã§ããŸãã
å ±æç°å¢å€æ°ã¯ã©ã®ããã«æŽæ°ãããŸããïŒ ç§ã®ç¥ãéããããã»ã¹ãéå§ããããšãããã»ã¹ã®ç°å¢å€æ°ã®ã»ããã«å€æŽãå ããããšã¯ã§ããŸããã
ããšãã°bashã»ãã·ã§ã³ã§å€æŽã§ããŸãããä»ã®ãã¹ãŠã®ã¬ã€ã€ãŒã«äŒæãããããã§ã¯ãããŸããã
ãããè¡ãã«ã¯ãå€æŽãã³ãããããŠã³ã³ãããåèµ·åããå¿ èŠããããŸãã ããã¯ããã®ã·ããªãªã§ã¯ãŸã£ãã圹ã«ç«ã¡ãŸããã
ããã«ãå€æ°ãå€æŽãããå¯èœæ§ãããå Žåã§ããã³ã³ãããŒå ã®ããã»ã¹ã¯ãããããŒãªã³ã°ããããšãç¥ãå¿ èŠããããŸããããã«ãããããã¯ããã®æ©èœãè¡šé¢äžå¯Ÿè±¡ãšãªãã¬ã¬ã·ãŒãœãããŠã§ã¢ã®éãœãªã¥ãŒã·ã§ã³ã«ãªããŸãã
éçºç°å¢ã®ã¬ã¬ã·ãŒã³ã³ããã§ãã®åé¡ã解決ããããšã ãã話ããŠããã®ã§ãcompose docker-compose ps -s
ïŒäŸåé¢ä¿ã®é åºã§ãµãŒãã¹ãäžèŠ§è¡šç€ºãïŒ1077ïŒã®äžã«ããããŒã«ãšããŠè§£æ±ºã§ãããšæããŸãã
ãããã®2ã€ã®ã³ãã³ãã䜿çšããŠã次ã®ãããªããšãè¡ãããŒã«ãäœæã§ããŸãã
docker-compose ps -s
ãå®è¡ããŠãäŸåé¢ä¿é ã«ãµãŒãã¹åã®ãªã¹ããååŸããŸãdocker-compose up -d --no-recreate <first service from the list>
å®è¡ããŸãdocker exec
åŒã³åºãã§ããå¯èœæ§ããããŸãdocker-compose logs
å®è¡ããŸãïŒãŸãã¯-d
ãæž¡ãããå Žåã¯å®è¡ããŸããïŒãã®ããã«ããhealthcheckãããã³ãwait forãæ§æã¯å€éšã§äœæã§ããŸãããäœæè ã¯ãäœæèªäœã®äžéšãšããŠå®è£ ãããå Žåã«å¿ èŠãšãªã以äžã®ãã®ãæäŸããå¿ èŠã¯ãªããšæããŸãã
ãããæ©èœããªãçç±ã¯äœã§ããïŒ
ã¹ã³ãŒããã¬ã¬ã·ãŒã³ã³ããã«éå®ã§ããŠããããã§ããããã¯ã¯ããã«åççã§ãïŒ+1ïŒ
@dnephinæè»æ§ããããComposeã«ã¬ã¬ã·ãŒã³ã³ããã®ãµããŒããçµã¿èŸŒãŸããŠããå¿ èŠããªããšããåœé¢ã®èŠ³ç¹ããã¯çŽ æŽããããšæããŸããã @ mattwallingtonã説æããã®ãšåæ§ã®åœé¢ã®åé¡ããããä»ã®ã³ã³ããã§å¯èœã§ããã°ã©ããªãã§ããããããã®ãµãŒãã¹ã«æ¥ç¶ããåã«ãããã€ãã®ããšïŒinitãªã©ïŒãå®è¡ããŸããïŒ ãã®ã³ã³ããã§ãããã¯ããããšã¯_åäœããŸãããçæ³çã§ã¯ãããŸããïŒãšã¯ãããã¬ã¬ã·ãŒã³ã³ããã«çæ³çãªãœãªã¥ãŒã·ã§ã³ããããã©ããã¯ããããŸããïŒã ããã¯å°ãªããšãç§ã®åé¡ã解決ããã§ããããä»ç§ã¯ãã®ãã±ãããèŠã€ããªããã°ãªããŸããïŒ
+1
docker-composeãã¡ã€ã«ã§äŸåé¢ä¿ãæå®ã§ããããã«ãããã...
...ãªã³ã¯ã䜿çšããŠããŸããïŒnet = hostãšäºææ§ããªãããïŒã puppetãç¬èªã®äŸåé¢ä¿ããªãŒãæã£ãŠããããã«ãèµ·åããé åºãç¥ãããšã¯ä»äºã§ããããå°ãªããšããã«ãã³ã³ãããŒç®¡çããŒã«ã®é¢å¿äºã§ãããšæããŸãããããŠãŒã¶ãŒãæãããç¥ã£ãŠããŠãªãŒããŒã©ã€ãã§ããå ŽåããããŸãã äžèšã®ãã¹ãŠãèªããšãå¯äžã®é£ããã¯ãäŸåé¢ä¿ãã§ãŒã³å ã®æ¬¡ã®ã³ã³ãããŒãéå§ã§ããããã«ãã³ã³ãããŒãã皌åäžãã§ãããã©ãããå€æããããšã§ãã ããã¯ïŒä»ã®ãšããïŒãªã³ã¯ã¡ã«ããºã ãšãŸã£ããåãã¡ã«ããºã ã§ããå¯èœæ§ããããŸã-äœã§ããªãããã¯ãŸãã§ãã åŸã§ããäŸåé¢ä¿ã®å®çŸãã®æ確åã¯ãdocker-composeãã¡ã€ã«ã§æå®ã§ããŸããããšãã°ããã®äŸåé¢ä¿ã¯ãã³ã³ãããŒãå®è¡ãããŠããããšãéèŠã§ãã
depends_on:
container: foo
requires: running
ãŸãã¯ããã®äŸåé¢ä¿ã¯ãTCPããŒãããªãã¹ã³ããŠããã³ã³ãããéèŠã§ãã
depends_on:
container: foo
requires: listening
docker-composeã®äžäœã«ããå€éšããŒã«ãŸãã¯ã¹ã¯ãªããã®ä»äºã§ãããšèšãããšã¯ãdocker-composeãåããã·ã³ã§2ã€ä»¥äžã®ã³ã³ãããŒãå®è¡ãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ã«å¯ŸããŠå®éã®é¢å¿ã責任ãè² ããªãããšãšåãã§ãã ããã§ããã®ç®çã¯äœã§ããïŒ
ç©äºãã©ã®é åºã§éå§ãããã¹ãããç¥ãããšã¯ããã«ãã³ã³ãã管çããŒã«ã®ä»äºãŸãã¯å°ãªããšãæžå¿µã§ãããšç§ã¯æã£ãã§ãããã
ããããå¿ ããããããšã¯éããŸããã ãã®ã¹ã¬ããã§ãã§ã«äœåºŠã説æãããŠããçç±ããããã®ãžã§ããã³ã³ãã管çããŒã«ã«æž¡ãèšãèš³ã¯2ã€ãããªããšæããŸãã
ãã ãããœãããŠã§ã¢ãå¶åŸ¡ã§ãããããæ¬çªç°å¢ã«å±éããããšãèšç»ããŠããå Žåã¯ãæºåæ¡ä»¶ã泚ææ·±ãå®çŸ©ãããšããŠããæ£ããé åºã§éå§ããã ãã®å€éšããŒã«ã«é Œãããšã¯ã§ããŸããã ããã¯æ ¹æ¬çãªåé¡ã®è§£æ±ºçã§ã¯ãªãããããã¯ãŒã¯ã«åé¡ãçºçããç¬éã«ã·ã¹ãã ã厩å£ããŸãã ãããããçºçãããã³ã«ãã¹ãŠã®Webããã³ããšã³ãã³ã³ãããèªåçã«åèµ·åããå¿ èŠããããŸãããããã誰ã«ãšã£ãŠã蚱容ã§ããããŠã³ã¿ã€ã ã§ãããšã¯æããŸããã
é©åã«äœæããããœãããŠã§ã¢ããããã¯ãŒã¯ã®åæ¢ã«å¯ŸåŠããããšã«åæããŸãã ãã¹ãŠã®ãœãããŠã§ã¢ãé©åã«äœæãããŠããããã§ã¯ãªããéçºè ãèãããããã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ã«ã€ããŠåžžã«èããŠããããã§ã¯ãªãããšã«ãç§ãã¡ã¯åæããŠãããšæããŸãã
ãããããJVMãå®è¡ããã¯ã©ã€ã¢ã³ãã³ã³ãããšããã«æ¥ç¶ããå¥ã®ç£èŠããŒã«ãäž¡æ¹ãšããã¹ãPIDåå空éã§å®è¡ããŠãäžæ¹ãä»æ¹ãç£èŠã§ããããã«ãããã®ã§ããããã³ããŒãæ¿èªããã€ã¡ãŒãžã§ãã®ãããªããŒã«ãå®è¡ããããšã®ã¿ããµããŒããããã©ã€ã»ã³ã¹ãããŠããŸãã ç£èŠããŒã«ãæ¢åã®JVMãç£èŠããå Žåãããããã©ã®é åºã§èµ·åããããéèŠã«ãªããŸãïŒæããã«ïŒã é åºãéèŠãªãŠãŒã¹ã±ãŒã¹ã¯ããããæ°çŸããããããã¯ãŒã¯ïŒmysqlãelasticsearchããµãŒãã¹æ€åºã¯ã©ã¹ã¿ãŒããã¹ãŠèšåãããŠããŸãïŒãé¢ä¿ãããã®ãããã°ãããŸããŸãªåå空éãå¹æçã«äœ¿çšããŠå ±æã§ããä»ã®ãã®ãé¢ä¿ãããã®ããããŸãã
ã ããç§ã¯ãŠãŒã¹ã±ãŒã¹ïŒ1ïŒã«ééããªãåæããŸããç¶æ³ã«ãã£ãŠã¯ã³ã³ãããå€æŽã§ããªãã ãã§ã
ããããããŒã«ãè€æ°ã®äœãã«é¢ä¿ãããšããã«ãããã¯ããã«æ³šæã«å察ããŸãã é åºä»ããéèŠã§ãé åºä»ããä¿èšŒããå¯äžã®æ¹æ³ãdocker-composeã®åšãã«bashã¹ã¯ãªãããèšè¿°ããŠæåã«äœããäœæãã次ã«äœããäœæããããšã§ããå Žåãdocker-composeã¯ãäºå®ä»¥å€ã«ãã§ãŒã³ã«ååšããªãå¯èœæ§ããããŸãã JSON / YAMLã¯cmdlineåŒæ°ããããããã§ãã
IMHO究極çã«ã¯ãããŒã«ã¯å€ãã®ãŠãŒã¹ã±ãŒã¹ã«åœ¹ç«ã€ãã©ããã®ã©ã¡ããã§ãã Docker-composeã¯ãåããã¹ãäžã®è€æ°ã®ã³ã³ãããŒã®é åºä»ããããŠããªãèµ·åã«æããã«åœ¹ç«ã¡ãŸãã ååãªæ°ã®äººãšååãªãŠãŒã¹ã±ãŒã¹ã泚æã«é¢ãããã®ã§ãããããŒã«ããããã«å¯Ÿå¿ããŠããªãå Žåã人ã ã¯ãããã®ãŠãŒã¹ã±ãŒã¹ã®ããã«ä»ã®å Žæã«è¡ãã ãã§ããããã¯æ®å¿µã§ãã
ãšã«ãããå€ãåŒæ°ãåããã·ã¥ããŠããã ããªã®ã§ããã®ã¹ã¬ããããã€ãžã§ã¯ãããŸãã
ããã¯ãéåžžã«å€ãã®ç°ãªãéçºãããã¯ã«é¢ããäœåãã®ã¹ã¬ããã§è¿°ã¹ãããŠããã®ãšåãè°è«ã§ããããã¹ãŠã®ã³ãŒãããã¹ãŠã®äººã«ãã£ãŠé©åã«èšè¿°ãããŠããã°ããã®ãããªå¿ èŠã¯ãªãã®ã§ããããŸããããã ããã¯ãäžçäžã®ãã¹ãŠã®äººã ãåç³çæã®ççŒãé»æ°ã®äœ¿çšããããã°ãå°çã«åŒãèµ·ãããŠããåé¡ã解決ã§ãããšããããšãšåãã§ãã ããªãã¯æ£ããã§ãã ãã¹ãŠã®ã¢ããªãé©åã«æ©èœããå Žåãããã§ããã«ã€ããŠè©±ãåãããšã¯ãããŸããã ããããç§ãã¡ã¯å°çã«äœãã§ããŸãã å°é£ãªæ¹æ³ã§ç©äºãåŠã°ãªããã°ãªããªãåŸåãããååšã®çš®ã§å€§èŠæš¡ãªæ¬ é¥ããã£ãå Žæã 次ã®è³é調éã©ãŠã³ããŸãã¯ãã€ã圌ããæãããŒãžã§ã³ãæ§ç¯ããããšãå¯èœã«ãããããããªã次ã®é¡§å®¢ã«å°éããããšãç¥ãããã«ãæå°éã®å®è¡å¯èœãªè£œåããæ§ç¯ããããã«äŒç€Ÿãè»éã«ä¹ããã ãã®åã人ã ã
äžçã¯å®ç§ã§ã¯ãªãã決ããŠå®ç§ã§ã¯ãªãã®ã§ãç§ãã¡ã¯èªåãã¡ãã³ã³ãããŒã«ã§ããããšããã§ããŸããã ãããŠãã®å Žåãç§ãã³ã³ãããŒã«ã§ããã®ã¯ããã¹ãŠã®äººïŒã€ãŸããç§ã絶察ã«æ°ã«å ¥ã£ãŠããããŒã«ãéçºãããã®1ã€ã®æ©èœãããªãå Žåã¯çã£ãããã«äœ¿çšãã人ïŒã«ãããçµã¿èŸŒããã説åŸããããšã ãã§ããç§ãã¡ãäœãã§ããäžçã«ååšãããœãããŠã§ã¢ãåŠçã§ããæ¹æ³ãç§ãã¡ãäœãã§ããããšæã£ãŠãããã®ã§ã¯ãããŸããã
2015幎7æ31æ¥ã«ã¯ã3ïŒ42 AMã§ãAanandãã©ãµãã®[email protected]ã¯æžããŸããïŒ
ç©äºãã©ã®é åºã§éå§ãããã¹ãããç¥ãããšã¯ããã«ãã³ã³ãã管çããŒã«ã®ä»äºãŸãã¯å°ãªããšãæžå¿µã§ãããšç§ã¯æã£ãã§ãããã
ããããå¿ ããããããšã¯éããŸããã ãã®ã¹ã¬ããã§ãã§ã«äœåºŠã説æãããŠããçç±ããããã®ãžã§ããã³ã³ãã管çããŒã«ã«æž¡ãèšãèš³ã¯2ã€ãããªããšæããŸãã
äŸåããã¢ããã¹ããªãŒã ãµãŒãã¹ãå©çšã§ããªãããšã«èæ§ã®ãªãæ¢æã®ã³ã³ããã€ã¡ãŒãžãå®è¡ããŠãããæè¡çãŸãã¯ããžãã¹äžã®çç±ãããããããå€æŽãŸãã¯æ¡åŒµããããšã¯ã§ããŸããã
ãœãããŠã§ã¢ãæ¬çªç°å¢ã§ã¯ãªãéçºç°å¢ã§çŽç²ã«å®è¡ããŠããã埩å åãå®è£ ãããããæéãè²»ããã»ããããã§ãããã
ãã ãããœãããŠã§ã¢ãå¶åŸ¡ã§ãããããæ¬çªç°å¢ã«å±éããããšãèšç»ããŠããå Žåã¯ãæºåæ¡ä»¶ã泚ææ·±ãå®çŸ©ãããšããŠããæ£ããé åºã§éå§ããã ãã®å€éšããŒã«ã«é Œãããšã¯ã§ããŸããã ããã¯æ ¹æ¬çãªåé¡ã®è§£æ±ºçã§ã¯ãªãããããã¯ãŒã¯ã«åé¡ãçºçããç¬éã«ã·ã¹ãã ã厩å£ããŸãã ãããããçºçãããã³ã«ãã¹ãŠã®Webããã³ããšã³ãã³ã³ãããèªåçã«åèµ·åããå¿ èŠããããŸãããããã誰ã«ãšã£ãŠã蚱容ã§ããããŠã³ã¿ã€ã ã§ãããšã¯æããŸããã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
+ 1 @ aanandã ããã¯ãç¯å²ãå¶éã§ãããã®ã§ã¯ãããŸããã ãã®æ©èœã¯ãå®è¡ãããå Žåã人ã ãä¿¡é Œã§ãããã®ã§ããå¿ èŠããããŸãã 圌ãã¯é·ãéãèä¹ æ§ã®ãããã€ã³ãã©ã¹ãã©ã¯ãã£ãã³ãŒãã£ã³ã°ããŠããã倧è¡ãå€æããã®ã«é·ãæéãããã£ãŠããŸãã 圌ãã¯ãããé·ãé䜿çšããŸãã
ã³ã³ããéã®èµ·åã¿ã€ãã³ã°ã®äŸåé¢ä¿ã®åé¡ã軜æžããããã«äœããå®è£ ããããšãé€å€ããŠããªãããšãç¹°ãè¿ãè¿°ã¹ãããšæããŸã-ç§ã¯æšæ¥ããã®ã¹ã¬ããã§1ã€ã®å¯èœãªè§£æ±ºçãã¹ã±ããããŸããã
ããããç§ã¯ããã®æ©èœã誰ã®ããã«ããã®ããã©ã®ãããªåé¡ã解決ãããã®ããã©ã®ãããªåé¡ã解決ãããªãã®ãããããŠã©ã®çšåºŠä¿¡é Œã§ããã®ãã«ã€ããŠãåãããŒãžã«ããããšãæãã§ããŸãã ãããç§ãæããããšããŠããããšã§ãã
ããã«ãååšããæºåã®è€æ°ã®å®çŸ©ïŒãã³ã³ãããŒãéå§ããããããã³ã³ãããŒãTCPæ¥ç¶ãåãå ¥ããŠãããããã«ã¹ã¿ã ãã«ã¹ãã§ãã¯ãã¹ãïŒãããã³ããããã®å®è£ ã®è€éããç°ãªãããšãèæ ®ããŠãæ¯èŒãè¡ããããšæããŸããããããã®ããã«äœ¿ãããµããŒãããäœäººã®äººã ãæ©æµãåãããã«ã€ããŠã®èãã
ãµãŒãã¹ãåæããããã®äžè¬çãªææ³ã¯ãetcdãªã©ã䜿çšããããµãŒãã¹ã¬ãžã¹ããªãã®ãããªãã®ã§ãã wait_for_serviceã¯ã©ãã§ããïŒ
web:
image: mywebapp
links: ["db"]
wait_for_service:
type: etcd (or consul, or zk) -- or use swarm type notation
addr: http://my.etcd.com/
path: postgres.service
db:
image: postgres
composeã¯ããµãŒãã¹ãæ¬åœã«æºåãã§ããŠãããã©ãããç¥ããŸããããã¬ãžã¹ããªå ã®ããŒã¿ãæ€çŽ¢ããããã«åºã¥ããŠäŸåã³ã³ãããŒãéå§ã§ããŸãã å¯çšæ§ãã¬ãžã¹ããªã«å ¬éããã®ã¯ãµãŒãã¹ïŒpostgresãªã©ïŒã®è²¬ä»»ã§ãããããã¬ã¬ã·ãŒã¢ããªã±ãŒã·ã§ã³ã®å Žåãäœããã®ã©ããã³ã°ã¹ã¯ãªããããããè¡ããŸããã¢ããªãèµ·åããããŒãã皌åããã®ãç£èŠããŠãããã¬ãžã¹ããªã«å ¬éããŸãã
ããã«ã¡ã¯@aanandã
ããã¯ç§ãééãããã®ãªã®ã§ãä»æ¥ã¯ãã€ãã¿ãŒã§@bfirshãšè©±ãåã£ãŠããŸããã
å ·äœçã«ã¯ãå€ãã®å°ããªãããã³ã°ãããã³ã³ããŒãã³ãããåæ£ã·ã¹ãã ãæ§ç¯ãããšãã«ããã¹ãŠã®ã¡ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ã¢ããªãšãã®äŸåé¢ä¿ãã¹ãã³ã¢ããããçµ±åãã¹ããå¿ èŠã§ããããšãããããŸããã次ã«ããããã«å¯ŸããŠããŸããŸãªãã¹ããå®è¡ããŠããããã¹ãŠãååºŠç Žæ£ããŸããã
ããã¯ãããšãã°Riakã䜿çšããä»ã®ã»ãšãã©ã®ãã®ãšæ¯èŒããŠãéå§ã«æéãããããšããåé¡ã«ã€ãªãããŸãã
ãã³ã³ãããŒã¯éåæãéå§ããããã«å¯ŸåŠããããšèšãããšã«ç¹ã«å察ã¯ããŸããããäžè²«ãããã«ã¹ãã§ãã¯ãå ¬éããåãµãŒãã¹ãäžå¿ã«èšèšãããšãã³ãŒãã䜿çšããã®ã§ã¯ãªããå°ãªããšããµãŒãã¹ããšã«1ã€ã®å®è£ ã«ã察åŠãããããšãå«ãŸããŸãããµãŒãã¹ã«äŸåããåã¢ããªã§ã®æ¥ç¶ã®åè©Šè¡ãåŠçããŸãã
ç¬èªã®ãã«ã¹ãã§ãã¯ãå®çŸ©ãããµãŒãã¹ã¯ãç£èŠã®ç®çã«ã圹ç«ã¡ãŸãã
@elliotcmäž¡æ¹ã®ç¹ã§åæããŸããã
CIã§ãã¹ãããããã«ãDockerã³ã³ãããŒã§äœ¿çšããŠããªã³ã¯ããããµãŒãã¹ã®æºåãã§ããã®ãåŸ ã€ããšãã§ããå°ããªãŠãŒãã£ãªãã£ãæ§ç¯ããŸããã ãªã³ã¯ããããã¹ãŠã®TCPãµãŒãã¹ãç°å¢å€æ°ããèªåçã«æ€åºããæåãŸãã¯ã¿ã€ã ã¢ãŠããããŸã§TCPæ¥ç¶ã®ç¢ºç«ãç¹°ãè¿ãåæã«è©Šè¡ããŸãã
ãŸãããªããããæ§ç¯ããã®ãããããŠãããã©ã®ããã«äœ¿çšããã®ãã説æãã
@meeeeããã¯æ¬åœã«çŽ æŽããããŠäŸ¿å©ã«èŠããŸãïŒ ã¹ãã³ã¢ããã®äŸãæããŠãã ããã ç¹ã«docker-composeã§äœ¿çšããŠããŸããïŒ
ä»æ¥ã¯ãmysqlã³ã³ãããåããŠèµ·åãããšããããªãããŒãªã±ãŒã¹ããããŸããã ã³ã³ããã¯ãæåã®å®è¡æã«èªèº«ãããŒãã¹ãã©ããããæ§ææã«ããŒã¿ããŒã¹ããŒã¢ã³ãåèµ·åããŸãã ããã«ãããããŒãã®å¯çšæ§ãã§ãã¯ãææå°æ©ã«ããªã¬ãŒãããäŸåã³ã³ãããŒãéå§ãããŸããããæ¥ç¶ã«å€±æããŸããã ããã¯CIç°å¢ã§ãããå®å šã«ãŒãããã»ããã¢ããããå¿ èŠããããŸããã
ããçš®ã®åŸ æ©/ãã§ãã¯åäœããµããŒãããããã«composeã«éåžžã«ç±å¿ã§ãããäžèŠããªãããŒãªã±ãŒã¹ãããã€ããããŸãã ãã£ã¹ã«ãã·ã§ã³ã«åå ã§ããŠããããã§ãã
@prologicã¢ããªã±ãŒã·ã§ã³ããã¹ããå®è¡ããåã«ãä»ã®ãµãŒãã¹/ã³ã³ãããŒã«å¿ããŠDockerã³ã³ãããŒã§waitforservices
ã³ãã³ããå®è¡ããã ãã§ãã ãªã³ã¯ããããã¹ãŠã®ãµãŒãã¹ãæ€çŽ¢ãããããã«æ¥ç¶ã§ããããã«ãªãããç¹å®ã®æéãçµéãããŸã§å®è¡ãããŸãïŒããã©ã«ãã§ã¯60ç§ïŒã ãã€ããªãçµäºããåŸãä»ã®ãµãŒãã¹ã«äŸåãããã¹ãŠã®ã³ãŒããå®è¡ããã ãã§ãïŒãã ããçµäºã¹ããŒã¿ã¹ã確èªããããšããå§ãããŸãïŒã
@pugnascotiaããŒã¿ããŒã¹ãµãŒããŒã¯ããŒãã¹ãã©ãããããŠããéã®ã¿ããŒã«ã«ãã¹ãã§ãªãã¹ã³ã§ããŸã-ãšã«ããã³ã³ããã®æºåãã§ããŠãããã©ããã瀺ãäœããã®ã€ã³ãžã±ãŒã¿ãå ¬éããå¿ èŠããããŸãã MySQLã¯äœ¿çšããŠããŸããããwaitforservicesã¯å ¬åŒã®postgresã€ã¡ãŒãžã§å®å šã«æ©èœã
@aanand Postgresã¯ãå®éã«éžæããåªããäŸã§ããTCPããŒããéãã®ãåŸ
ã€ã ãã§ã¯ååã§ã¯ãªãããã§ãããã®ã¿ã€ãã®ïŒããã«ãŒïŒã·ããªãªã§ãããè¡ããšã FATAL: the database system is starting up.
ãããªãšã©ãŒãçºçããããšããããŸãpsql
ãå¿
èŠãšæãããŸããç§ã¯select version()
ã䜿çšããŠããŸããããã£ãšè»œã代æ¿æ段ããããããããŸããã
èå³æ·±ãåŸ æ©å®è£ ãæã€ç¹å®ã®MavenDockerãã©ã°ã€ã³ããããŸãã çŸæç¹ã§ã¯ãbashã©ãããŒã䜿çšããŠåãµãŒãã¹ãéå§ããŠããŸãããããã¯ãcomposeã䜿çšãããšããç¹ãããªãç¡å¹ã«ããŸãã
ãããåé¿çãšããŠäœ¿çšããïŒé²åŒŸãã©ããã¯ããããŸããïŒïŒ
db:
image: postgres:9.3
ports:
- "5432:5432"
createdbs:
image: postgres:9.3
links:
- db
command: >
/bin/bash -c "
while ! psql --host=db --username=postgres; do sleep 1; done;
psql --host=db --username=postgres -c 'CREATE DATABASE \"somedatabase\";';
"
ç§ã¯@olalondeãšåæ§ã®æ¹æ³ã䜿çšããŠããŸãã /bin/bash -c
åŸã«å®è¡ãããã³ãã³ãã«äžéåŒçšç¬Šã䜿çšããå Žåãä»ã®ã¢ããªã±ãŒã·ã§ã³ã§ãªã³ã¯ããåå©çšãããç°å¢å€æ°ãå©çšããããšãã§ããããããŠãŒã¶ãŒåãšãã¹ã¯ãŒãã2ã€ã«ä¿æããªããŠã䜿çšã§ããŸããå Žæã ããã¯ãããŒã¿ããŒã¹ãèµ·åããå¿
èŠãããAPIãªã©ã®ãµãŒãã¹ããããç¹å®ã®ããŒãã«ãŸãã¯ã¬ã³ãŒããååšãããã©ããã確èªããã¯ãšãªãã§ãã¯ãå®è¡ããããšã«ãããé©åãªããŒã¿ãããŒãã¹ãã©ããããç¶æ³ã§ããŸãæ©èœããŸãã ããã¯ãããŒã¿ããŒã¹ãé©åã«ã¯ãšãªããããã«ãã³ã³ãããŒã«äœããã®ã¯ã©ã€ã¢ã³ããã€ã³ã¹ããŒã«ããå¿
èŠãããããšãæå³ããŸãããããã¯æ©èœããŸãã
+1ãã®æ©èœã«æ¬åœã«èå³ããããŸã
äŸåé¢ä¿ã«+1ã ç§ã¯ãååãšããŠãã¢ãŒããã¯ãã£ã¯ããããèµ·åé åºããµããŒãããã®ã«ååå ç¢ã§ãªããã°ãªããªãããšã«åæããŸãã ããããå€ãã®å Žåãããããããšã¯å®çšçã§ã¯ãããŸããã
ãã®æ©èœã®åçºã¯ãä»ã®äººãé ãããã¢ãŒããã¯ãã£ãæ瀺ããããšããŠããããšã«èµ·å ããŠããããã«æããŸãã 圌ãã«ã¯æ¬åœã«ããããæš©å©ããããŸããã ãã®æ©èœã«ãããæéã®ããããªãã¡ã¯ã¿ãªã³ã°ãåé¿ã§ããŸãã é·æçãªäŸ¡å€ã¯ã»ãšãã©ãããŸããã ïŒãªãã¡ã¯ã¿ãªã³ã°ã®ããã®ãªãã¡ã¯ã¿ãªã³ã°ïŒã
ã¯ãããåé¿çããšèšããŸããã ãããŠç§ã¯æ±ããæããããŸãã ããããç§ã«ãšã£ãŠã®äœæ²ãšã¯ãä»ã®äººãçç£çã«ãªãããšãå¯èœã«ããããšã§ãã ãã®åçŽãªæ§æã«ããããããå¯èœã«ãªããŸãã
ãã®æ©èœãããŒã«ã«ååšããå Žåãåé¡ã1åã§è§£æ±ºããçã®äŸ¡å€ã®è¿œå ã«é²ãããšãã§ããŸãã 代ããã«ãå€éšã®äŸåé¢ä¿ã«é¢ããèµ·åé åºã®åé¡ãåé¿ããããšããŠãå£ã«é ãã¶ã€ããŠããŸãã
@beardface ãããã³ä»ã®ãã¹ãŠã®äººïŒå ·äœçã«ã¯ãã¢ããªã®éçºãé²ããããšãã§ããæ©èœã¯ã©ãã§ããïŒ
@aanandçªå·3ã¯ç§ã®æ祚ã§ãã ããã«ãããéçºè ã¯ããµãŒãã¹ã«äŸåããŠãã€ã«ãªããã決å®ãã代ããã«ããã«ã¹ãã§ãã¯ããžãã¯ãéžæã§ããæè»æ§ãåŸãããŸãã ãã®ç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ãéçºè ã®èªç±åºŠãé«ãã»ã©åªããŠããŸãã ã³ã³ããã«ã€ã³ã¹ããŒã«ããããã¹ãŠã®çš®é¡ã®ã¢ããªãäºæž¬ããããšã¯äžå¯èœã§ãã
+3
ãã ããããã€ãã®åºæ¬çãªãã«ã¹ãã§ãã¯ãå«ãŸããŠãããšäŸ¿å©ã§ãã _http 200 ok on port 80_ã®ãããªãã®ã¯éåžžã«äžè¬çã§ãããããåªåãã䟡å€ããããããããŸããã
ãããããªãŒãå«ãŸããŠãããçªå·3ããããšäŸ¿å©ã§ãïŒããã§ããããŠäžèšã®ãã¹ãŠãèšããŸããïŒïŒ
ã€ãŸãããã³ã³ããã皌åããŠããããããã¡ã€ã«ãååšãããããããŒããéããŠãããã¿ã€ãã®åŸ æ©ã®çµã¿èŸŒã¿æ©èœãšããŠãŒã¶ãŒãç¬èªã®ãã¢ããªã±ãŒã·ã§ã³å±€ããã§ãã¯ãå®çŸ©ã§ããããã«ããæ¹æ³ã§ãã
3ãç§ã®æ祚ãååŸããŸã
3ã¯ããäžè¬çã§ã2ã¯ããäžè¬çã§ã1ã誰ãã3ã奜ãã§ããããã2ãŸãã¯1ã§ååãªäººãããŸãã
3ã«æ祚ãã
æããã«3çªç®ã®ãªãã·ã§ã³ã ãã®è°è«ã ãã§ããããã®ã±ãŒã¹ããããŸãã ãããã£ãŠã1çªç®ãš2çªç®ã®ãªãã·ã§ã³ã¯çŽ æŽããããã®ã§ãããå€ãã®äººã ãæºè¶³ããã§ãããããåé¡ã¯æªè§£æ±ºã®ãŸãŸã§ãã
3ã«æ祚ãã
3ã«æ祚ãã
3ã«æ祚ããŠãã ãããããŒã¿ãã¹ãã«ãèå³ããããŸãã
3ã«æ祚ããŸãã
3ã«æ祚ããŠãã ãããããŒã¿ãã¹ãã«ãèå³ããããŸãã
3ã«æ祚ãã
3
ã¿ããªãããããšãã ä»ããæ祚ããããããšãã§ããŸã-ã¡ãã»ãŒãžã¯æ確ã ãšæããŸãã
https://github.com/docker/compose/issues/374#issuecomment -126312313ã§ææ¡ãããã¶ã€ã³ã«é¢ãããã£ãŒãããã¯ã«èå³ããããŸãã代æ¿ã®ãã¶ã€ã³ææ¡ãšããã®é·æ/çæã«ã€ããŠã®èª¬æããããŸãã
wait_for_tcp
䟿å©ãªæ¹æ³ã¯äŸ¿å©ã§ããããã«ã¹ãã§ãã¯ãå®è¡ããããã®å¥åã®ã³ã³ãããŒãçšæããããšããäžèšã®@olalondeãš@mbentleyã§èª¬æãããŠããã®ãšåãã³ã³ãããŒã§å®è¡ãããããç°¡åã§ãããã©ããã¯ããããŸããã ã
docker-maven-pluginã§alexecãè¡ã£ãŠãããããªããšãè¡ãã®ã¯ã©ãã§ããïŒ åœŒã¯ãdocker-compse / figã«äŒŒãæ§æãæ瀺çã«èšèšããŸãããããããŸã§ã®ãšãããç§ã®ãããžã§ã¯ãã§ã¯ããŸãæ©èœããŠããŸããã
healthChecks:
pings:
# check this URL for 200 OK
- https://localhost:8446/info
# check another URL with non-default time out, with a pattern, and non checking SSL certificates
- url: https://localhost:8446/info
timeout: 60000
pattern: pattern that must be in the body of the return value
sslVerify: false
logPatterns:
- pattern that must be in log file
- pattern: another pattern with non-default timeout
timeout: 30000
ãœãŒã¹ïŒ https ïŒ
tcpæ¥ç¶ãã¢ããããŠããããšã確èªããã ãã§ã¯ãããŒã¿ããŒã¹ãéå§ãããŠããããšãç¥ãã«ã¯äžååã§ãã ããŒã¿ããŒã¹ã®ç¶æ ããã§ãã¯ããã³ãã³ããããæ¹ãè¯ããšæããŸãã
@ceaganãã®ããã«ã ã«ã¹ã¿ã ã³ãã³ãã圹ç«ã¡ãŸãã äŸãã°
healthChecks:
custom:
# retry this command until it returns success exit code
- cmd: psql --host=localhost --username=postgres
sleep: 1s
ãŸãã倧æåãšå°æåã®èŠåãèŠããŠããå¿
èŠããªãããã checks
æ¹ãhealthChecks
ãããåªããŠãããšæããŸãã wait
ïŒãã«ã¹ãã§ãã¯ã®å®è¡ãéå§ãããŸã§ã®åŸ
æ©ç§æ°ïŒã attempts
ïŒãã«ã¹ãã§ãã¯ãããããããŸã§ã®åæ°ïŒã retire
ããããšäŸ¿å©ãªå ŽåããããŸãã
ããã¯ããã©ãœã³ãã¬ãŒã ã¯ãŒã¯ããããã©ã®ããã«è§£æ±ºããããšããæ¹åã«é²ã¿ãŸãã åºæ¬çãªäŸåé¢ä¿ãšãã«ã¹ãã§ãã¯ã Dockerã³ã³ãããŒãéå§ããã®ã«éåžžã«äººæ°ããããããäœæã«ããããæ¡çšããããã®ãªãã·ã§ã³ïŒã¿ã€ã ã¢ãŠããééãå¿çã³ãŒããªã©ïŒã確èªãã䟡å€ããããŸãã
ããã§ãåãããªãã·ã§ã³3ã
+1
+1
+1
ã«ã¹ã¿ã ã®åŸ æ©ã¹ã¯ãªããã䜿çšããŸãããéåžžã«äŸ¿å©ã§ãã
+1
+1
ãªãã·ã§ã³3-healthChecksã¯è¯ãããã§ãã
+1
+1
+1
+3ã
è°è«ã«ä»ã®èããè¿œå ããããã«ã @ aanandãææ¡ããéžæè¢ã¯å®éã«èšã£ãŠããŸãïŒã³ã³ããã®ç¶æ
ã¯dockerã®è²¬ä»»ã§ãã Docker-composeã¯ãdockerãç¶æ
æ
å ±ãæäŸããå Žåãããããã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ãã¯ãªãŒã³ã§ãšã¬ã¬ã³ããªæ¹æ³ã§å®è£
ã§ããŸãã ããããdockerã¯ããã§ã¯ãããŸããã å³æã®ã¹ããŒãã¬ã¹ã³ã³ããã®ããžã§ã³ã«åºå·ããŠããããã§ãèµ·åãéåžžã«éãããããã®çš®ã®åæã®åé¡ã¯éèŠã§ã¯ãããŸããã
ç§ã®å Žåãããããã®å Žåã«ããµãŒãã¹ã«æé©ãªã¢ãŒããã¯ãã£ãéžæã§ãããšããèããè¿œæ±ããŠããŸãã ããšãã°ãè€æ°ã®MariaDBã€ã³ã¹ã¿ã³ã¹ãå¿
èŠãªå Žåããããããããã1ã€ã®ã¢ããªã±ãŒã·ã§ã³ã«ãµãŒãã¹ãæäŸããŸãã ãŸããè€æ°ã®ã¢ããªã±ãŒã·ã§ã³ã«ãµãŒãã¹ãæäŸããåäžã®MariaDBã€ã³ã¹ã¿ã³ã¹ãå¿
èŠãªå ŽåããããŸãã Dockerã«äœãæåãã代ããã«äœããã¹ãããæããŠã»ãããªãã Dockerã«ã¯åžžã«ãã®çš®ã®èªæãããããã§ã;ïŒã
æåã®è§£æ±ºçã¯ãDockerã説åŸããŠãã³ã³ãããŒãèªèº«ã«é¢ããä»»æã®ã¡ã¿ããŒã¿ã宣èšã§ããããã«ãããã®æ©èœã䜿çšããŠãä»ã®äººãä¿¡é Œã§ããããã«ã³ã³ãããŒããæºåå®äºããšèŠãªããããã©ãããdocker-composeã«ç¢ºèªãããããšã§ãã
ãåäžããŒã¿ããŒã¹-è€æ°ã¢ããªãã®ã¢ãããŒãã«ã€ããŠã¯ã次ã®ãããªå®çŸ©ãå¿
èŠã§ãã
db:
image: postgres:9.3
ports:
- "5432:5432"
app1:
image: wordpress
links:
- db [WP]
app2:
image: ghost
links:
- db [GST]
Docker Composeã¯ãdbããèµ·åãããã®ã¡ã¿ããŒã¿ã«ã€ããŠè³ªåããŸãïŒDocker Composeã«é¢é£ïŒã ymlãã¡ã€ã«ããããapp1ãã¯ãdbãããwordpress察å¿ãïŒæ¥ç¶ãåãå ¥ããã ãã§ãªããå¿ èŠãªãªããžã§ã¯ããå«ãïŒã§ããããšãæåŸ ããŠããããšãããããŸãã
ãã®ç¶æ³ã解決ããããã®ç°¡åãªè§£æ±ºçã¯ãããŸããã ç§ã¯çŸåšã2ã€ã®ã¹ãããã§æåã§ãããè¡ã£ãŠããŸããã«ã¹ã¿ã postgresql-bootstrapã€ã¡ãŒãžãããã§ãããŒã¿ããŒã¹ãšããã«ã¢ã¯ã»ã¹ããããŒã¿ããŒã¹ãŠãŒã¶ãŒãäœæããŸãã Wordpressã³ã³ããã«ãã£ãŠæäŸãããïŒãŸãã¯ããããæœåºãããïŒDDLããããŒã¿ããŒã¹ãªããžã§ã¯ããçæããããã®ã«ã¹ã¿ã liquibase-postgresqlã€ã¡ãŒãžã ããããŠåããŠããapp1ããèµ·åã§ããŸãã
ãã®ããããã€ã³ãã©ã¹ãã©ã¯ãã£ãã³ã³ãããç°ãªãã¢ããªã±ãŒã·ã§ã³ãæäŸããŠããå Žåã¯ãã³ã³ããããã€ã³ãã©ã¹ãã©ã¯ãã£ãã°ã«ãŒããšãã¢ããªãã°ã«ãŒãã«åããå¿
èŠããããŸãã
Docker Composeã¯ãDockerèªäœãšåãããã«ã¹ããŒãã¬ã¹ã«ãªããããšèããŠããŸãã ãããæ¬åœã«äŸ¿å©ã«ãªãããã®ãªãããããå¯èœãã©ããã¯ããããŸããã
ãªãã·ã§ã³3ã®å Žåã¯+1
+1
ãªãã·ã§ã³3ã®å Žåã¯+1ã
ãªãã·ã§ã³3ã®å Žåã¯+1
ãªãã·ã§ã³3ã®å Žåã¯+1
ãã®åé¡ã¯ãã°ããåãããããŸããã解決çã¯äœã§ããïŒ
@ bweston92ç§ã¯ãã¹ããŒã¿ã¹ã@aanandãããããšã ãšæãåã«ãã®ã¹ã¬ããã§ãœãªã¥ãŒã·ã§ã³ãææ¡ããæ¢ã
代æ¿èšèšã®ææ¡ãšããã®é·æ/çæã®èª¬æã
å人çã«ã¯ã @ aanandãææ¡ãããœãªã¥ãŒã·ã§ã³ã¯éåžžã«çã«ããªã£ãŠãããšæããŸãã ããã¯ç§ã«ã¯éåžžã«æçœã§ãããšåæã«ãæè»ã§ããããŸãã TCPããŒããéãã®ãåŸ ã€ããŸãã¯äžå®æéåŸ ã€ãšããç§ã®ããŒãºãã«ããŒããŸãã
ç§ã®ãŠãŒã¹ã±ãŒã¹ã¯ãã¹ãçšã§ãã ããŒã¿ããŒã¹ãäœæãããåã«ãã¹ããéå§ãããšãã¹ãã倱æããããã次ã®ããã«ã³ãã³ããbash -c "sleep 2; python manage.py test --keepdb"
ã«å€æŽããŸããã
db:
image: postgres:9.5
test:
build: .
command: bash -c "sleep 2; python manage.py test --keepdb"
volumes:
- ./test_project:/app
links:
- db
- selenium
environment:
- EXTERNAL_TEST_SERVER=http://testserver:8000/
- SELENIUM_HOST=http://selenium:4444/wd/hub
selenium:
image: selenium/standalone-chrome:2.48.2
links:
- testserver
testserver:
build: .
command: bash -c "sleep 5; python manage.py testserver 8000 --static"
volumes:
- ./test_project:/app
ports:
- "8000:8000"
links:
- db
ããŒã¿ããŒã¹ãæåã«èµ·åããŠåŸ
ããã«docker-compose run test
ãå®è¡ã§ããããã«ããŸãã
æè¿ã®ã©ã®åé¡ããæ瀺çãªäŸåé¢ä¿ã宣èšã§ããæ°ããDockeræ§ææ©èœã«æ祚ããã®ã«ãé©åãªãå Žæã§ããããå€æããã®ã¯é£ããã§ãããç§ã®æ祚ã¯åŒ·åãªãã®ã ãšèããŠãã ããã æ°ããDocker1.9ãããã¯ãŒã¯æ©èœãšããããæ¯æããã³ã³ãããªã³ã¯ã®éæšå¥šãè¿«ã£ãŠãããããã³ã³ããAãã³ã³ããBã®åã«èµ·åããããšã確èªããåªããæ¹æ³ã¯ãããŸãããDocker1.9ãŠãŒã¶ãŒå®çŸ©ãããã¯ãŒã¯ã䜿çšãããšãã³ã³ãããªã³ã¯ãæå®ããªããªããŸããã ããã¯...å£ããŠããŸãã
åæããã ãªãã·ã§ã³3ãååŸããããã®ã¿ã€ã ã©ã€ã³ã¯ãããŸããïŒ ãããä¿é²ãããã®ã¯çŽ æŽãããããšã§ãã
äŸåé¢ä¿ã®é åºãå®éã«ã¯ãã®åé¡ãä¿®æ£ããªãããšã«æ³šæãã䟡å€ããããŸãã ãã®åé¡ã¯ãªã³ã¯ã«ãåœãŠã¯ãŸããŸãã å€ãã®å Žåãã³ã³ããã¯åé¡ã«æ°ä»ããªãã»ã©éãèµ·åããŸãããåé¡ã¯ãŸã ååšããŠããŸãã
ãã®åé¡ã解決ããããã«å¿ èŠãªã®ã¯ãã¢ããªã±ãŒã·ã§ã³å¯Ÿå¿ã®ãã«ã¹ãã§ãã¯ã§ãã ãã«ã¹ãã§ãã¯ã¯åºæ¬çã«ãæäœãæåããããã¿ã€ã ã¢ãŠããçºçãããŸã§ãããã€ãã®æäœãåè©Šè¡ããã«ãŒãã§ãã HTTPãµãŒãã¹ã®å Žåã2xxã³ãŒããååŸãããŸã§httpãªã¯ãšã¹ããè¡ãå¯èœæ§ããããŸãã ããŒã¿ããŒã¹ã®å Žåãæ¥ç¶ããŠããŒãã«ããéžæããŠããå¯èœæ§ããããŸãã
ãããã«ãããããã¯ã¢ããªã±ãŒã·ã§ã³åºæã§ãããããéçºè ãå®çŸ©ããå¿ èŠããããŸãã https://github.com/docker/compose/issues/374#issuecomment -135090543ãããªãã·ã§ã³3ãå®è£ ããå Žåã§ãããã®ãã«ã¹ãã§ãã¯ããžãã¯ãå®è£ ããå¿ èŠããããŸãã
ãã®åé¡ã§ã¯ãã§ã«æ°åèšåãããŠããŸãïŒhttps://github.com/docker/compose/issues/374#issuecomment-53036154ãhttps://github.com/docker/compose/issues/374#issuecomment-71342299 ïŒã§ãããç¹°ãè¿ãã«ãªããŸãããæ¥ç¶ãåè©Šè¡ããŠã¢ããªã±ãŒã·ã§ã³å埩åã®ãããã®ã«ããããšã§ããã®åé¡ãä»æ¥è§£æ±ºã§ããŸãã ãšã«ãããã©ã®æ¬çªã·ã¹ãã ã§ããããè¡ãå¿ èŠããããŸãã
ã¢ããªã±ãŒã·ã§ã³ãé害ã«å¯ŸããŠå埩åã®ãããã®ã«ããæ©èœã¯ãå®è³ªçã«ãã«ã¹ãã§ãã¯ãšåãããžãã¯ã§ããããšãããããŸãã ãããã£ãŠãã©ã¡ãã®å Žåã§ããåãããžãã¯ãå®è£ ããå¿ èŠããããŸãã å¯äžã®éãã¯ããããå«ããå Žæã§ãã çŸåšãã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãšã³ããªãã€ã³ãã¹ã¯ãªããã«å«ããããšãã§ããŸãã ææ¡ãããå€æŽã«ãããäœæãã¡ã€ã«ã§å®çŸ©ã§ããããã«ãªããŸãã ãããã«ããããµãŒãã¹ããšã«ãã«ã¹ãã§ãã¯ãå®è£ ããå¿ èŠããããŸãã
ãšã³ããªãã€ã³ãã¹ã¯ãªããã®ä»£ããã«äœæãã¡ã€ã«ã«å«ããããšã«ã¯å€§ããªå©ç¹ããããŸããïŒ ããã¯ãŸã è°è«ã®äœå°ããããããããŸããã
Composeãã¡ã€ã«ã«é
眮ããããšã®å€§ããª_äžå©ãªç¹_ã¯ã up
倧å¹
ã«é
ããªãããšã§ãã
æ°ãããããã¯ãŒãã³ã°ã䜿çšãããšã up
ã䞊è¡ããŠå®è¡ã§ããŸãïŒstopãrmãscaleã®å Žåãšåæ§ïŒã ãã¹ãŠã®ã³ã³ããã¯äžåºŠã«èµ·åããåæåãè¡ã£ãŠãããäŸåé¢ä¿ãå©çšå¯èœã«ãªãã®ãåŸ
ã¡ãŸãã ããã«ãããç°å¢ã®éå§ãéåžžã«éããªããŸãã
Composeããã«ã¹ãã§ãã¯ã®å®äºãåŸ ããªããã°ãªããªãå Žåãèµ·åã¯äºå®äžé 次ã§ãã ã³ã³ããã®èµ·åãšã¢ããªã±ãŒã·ã§ã³ã®åæåã¯äžŠè¡ããŠè¡ãããããã§ã¯ãªãããã¹ãŠãé ããªããŸãã
ã»ãšãã©ã®ã¢ããªã¯ãLBã®èåŸã«ãããããå€éšããç£èŠãããŠãããªã©ã®çç±ã§ãã«ã¹ãã§ãã¯ãè¡ãããŸããæ°ããã¢ããªãéãããšã¯é£ãããããŸããã ãããã£ãŠãcomposeãããããµããŒãããŠããå Žåãããã¯äººã ã䜿çšã§ããéžæè¢ã§ãã å¿ é ã§ã¯ãããŸããã çŸå®ã®äžçã§ã¯ã人ã ã¯ããŸããŸãªã¢ããªã±ãŒã·ã§ã³ã«å¯ŸåŠããå¿ èŠããããçªç¶ãã¹ãŠã®ã¢ããªãã¹ããŒãã«ããããšãã§ãããšãããã®æŠå¿µã¯éçŸå®çã§éçŸå®çã§ãã ãããŠããšã³ããªãã€ã³ãã®ã©ãããŒããžãã¯ã¯èŠèŠããã§ãã ã³ãã¥ããã£ã§ã¯æ©èœã«å¯ŸããååãªéèŠãããããªãã·ã§ã³3ã¯å€ãã®ç¥šãç²åŸãããšæããŸãã
ç§ã®iPhoneããéä¿¡ããã
2015幎11æ18æ¥ã«ã¯ã11:01ã§ããããšã«Nephinã®[email protected]ã¯æžããŸããïŒ
äŸåé¢ä¿ã®é åºãå®éã«ã¯ãã®åé¡ãä¿®æ£ããªãããšã«æ³šæãã䟡å€ããããŸãã ãã®åé¡ã¯ãªã³ã¯ã«ãåœãŠã¯ãŸããŸãã å€ãã®å Žåãã³ã³ããã¯åé¡ã«æ°ä»ããªãã»ã©éãèµ·åããŸãããåé¡ã¯ãŸã ååšããŠããŸãã
ãã®åé¡ã解決ããããã«å¿ èŠãªã®ã¯ãã¢ããªã±ãŒã·ã§ã³å¯Ÿå¿ã®ãã«ã¹ãã§ãã¯ã§ãã ãã«ã¹ãã§ãã¯ã¯åºæ¬çã«ãæäœãæåããããã¿ã€ã ã¢ãŠããçºçãããŸã§ãããã€ãã®æäœãåè©Šè¡ããã«ãŒãã§ãã HTTPãµãŒãã¹ã®å Žåã2xxã³ãŒããååŸãããŸã§httpãªã¯ãšã¹ããè¡ãå¯èœæ§ããããŸãã ããŒã¿ããŒã¹ã®å Žåãæ¥ç¶ããŠããŒãã«ããéžæããŠããå¯èœæ§ããããŸãã
ãããã«ãããããã¯ã¢ããªã±ãŒã·ã§ã³åºæã§ãããããéçºè ãå®çŸ©ããå¿ èŠããããŸãã ïŒ374ïŒã³ã¡ã³ãïŒã®ãªãã·ã§ã³3ãå®è£ ããå Žåã§ãããã®ãã«ã¹ãã§ãã¯ããžãã¯ãå®è£ ããå¿ èŠããããŸãã
ãã®åé¡ã§ã¯ãã§ã«æ°åèšåãããŠããŸããïŒïŒ374ïŒã³ã¡ã³ãïŒãïŒ374ïŒã³ã¡ã³ãïŒïŒãç¹°ãè¿ãã«ãªããŸãããæ¥ç¶ãåè©Šè¡ããŠã¢ããªã±ãŒã·ã§ã³ãé害ã«å¯ŸããŠå埩åã®ãããã®ã«ããããšã§ããã®åé¡ãä»æ¥è§£æ±ºã§ããŸãã ãšã«ãããã©ã®æ¬çªã·ã¹ãã ã§ããããè¡ãå¿ èŠããããŸãã
ã¢ããªã±ãŒã·ã§ã³ãé害ã«å¯ŸããŠå埩åã®ãããã®ã«ããæ©èœã¯ãå®è³ªçã«ãã«ã¹ãã§ãã¯ãšåãããžãã¯ã§ããããšãããããŸãã ãããã£ãŠãã©ã¡ãã®å Žåã§ããåãããžãã¯ãå®è£ ããå¿ èŠããããŸãã å¯äžã®éãã¯ããããå«ããå Žæã§ãã çŸåšãã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãšã³ããªãã€ã³ãã¹ã¯ãªããã«å«ããããšãã§ããŸãã ææ¡ãããå€æŽã«ãããäœæãã¡ã€ã«ã§å®çŸ©ã§ããããã«ãªããŸãã ãããã«ããããµãŒãã¹ããšã«ãã«ã¹ãã§ãã¯ãå®è£ ããå¿ èŠããããŸãã
ãšã³ããªãã€ã³ãã¹ã¯ãªããã®ä»£ããã«äœæãã¡ã€ã«ã«å«ããããšã«ã¯å€§ããªå©ç¹ããããŸããïŒ ããã¯ãŸã è°è«ã®äœå°ããããããããŸããã
äœæãã¡ã€ã«ã«å ¥ããããšã®å€§ããªæ¬ ç¹ã¯ãæ§æãå€§å¹ ã«é ããªãããšã§ãã
æ°ãããããã¯ãŒãã³ã°ã䜿çšãããšã䞊è¡ããŠè¡ãããšãã§ããŸãïŒstopãrmãscaleã®å Žåãšåæ§ïŒã ãã¹ãŠã®ã³ã³ããã¯äžåºŠã«èµ·åããåæåãè¡ã£ãŠãããäŸåé¢ä¿ãå©çšå¯èœã«ãªãã®ãåŸ ã¡ãŸãã ããã«ãããç°å¢ã®éå§ãéåžžã«éããªããŸãã
Composeããã«ã¹ãã§ãã¯ã®å®äºãåŸ ããªããã°ãªããªãå Žåãèµ·åã¯äºå®äžé 次ã§ãã ã³ã³ããã®èµ·åãšã¢ããªã±ãŒã·ã§ã³ã®åæåã¯äžŠè¡ããŠè¡ãããããã§ã¯ãªãããã¹ãŠãé ããªããŸãã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
@dnephinæçµçµæã¯ããã¹ãŠã®ãµãŒãã¹ã«å¯ŸããŠåãã©ãããŒã¹ã¯ãªããã䜿çšããããšã§ãã ç§ã®ãã€ã³ãã¯ãéåžžã«äžè¬çãªãã®ïŒ80ããã³443ã®HTTP 200ã5432ã®TCPãªã©ïŒããããããcomposeãšäžç·ã«åºè·ããããšããå§ãããŸãã
ãã¡ãããããããã¹ãŠãã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã§è§£æ±ºããã®ã¯ãã°ãããããšã§ãããå®éã«ã¯ãããŒã¿ããŒã¹ããã£ãã·ã¥ããããµãŒãžãã¥ãŒãªã©ãä»ã®ãã¹ãŠã®å¯åéšåã§ã¯ãªããèªåã®ã¢ããªã±ãŒã·ã§ã³ã®ã¿ãå¶åŸ¡ã§ããŸãã
ç§ã¯@mbdasãš@jayfkã®äž¡æ¹ã«åæããè¿œå ããŸããããã«å¯ŸããæµæããäŸåé¢ä¿ã®ä»æ§ãšãã®çµæãšããŠã®ã³ã³ãããŒèµ·åã®é åºã§ãã£ãŠãã倱æãçºçããã³ã³ãããŒãªã³ã¯ãšããªã¥ãŒã ã®äœ¿çšãã³ã³ãããŒã«ã³ã³ããã®èµ·åé åºãçºçããããšã¯ãããŸããã§ãããæ°ãããããã¯ãŒã¯ã¢ãã«ã¯ããªã³ã¯ãéæšå¥šã«ãªã£ãŠããããšãæå³ããŸãïŒãããŠãæ°ãããããã¯ãŒã¯ã¢ãã«ã¯æåéããªã³ã¯ãšå ±åã§ããŸããïŒãåãèµ·åã§ãã -ãªã³ã¯ãèš±å¯ããã泚ææ©èœã¯ãäœããã®æ¹æ³ã§ç§ãã¡ã«è¿ãããŸãã 確ãã«ããªã³ã¯ããŒã¹ã®ã³ã³ããã®é åºä»ãã§çºçããå¯èœæ§ã®ããé害ã±ãŒã¹ã¯ãæ°ãããããã¯ãŒã¯ã¢ãã«ãšã³ã³ããã®äŸåé¢ä¿ã§ãçºçããå¯èœæ§ããããŸãããç§ãã¡ã¯çããããåãå ¥ããããšãåŠã³ãŸããã
@delfuego ïŒãªã³ã¯ãã©ã®ããã«éæšå¥šã«ãªã£ãŠããã®ããç¹ã«ãªã³ã¯ãäœã«çœ®ãæããããŠããã®ãã«ã€ããŠè©³ãã説æããŠããã ããŸããïŒ ããã€ãã®ããã¥ã¡ã³ã/äŸãžã®ãªã³ã¯ã§ååã§ã
@ h17liner ïŒã¯ããé¢çœãã§ãïŒ ããããšã
ç§ã¯@dnephinã«
ãã®åé¡ã§ã¯ãã§ã«æ°åèšåãããŠããŸãããç¹°ãè¿ãã«ãªããŸãããæ¥ç¶ãåè©Šè¡ããŠã¢ããªã±ãŒã·ã§ã³ãé害ã«å¯ŸããŠå埩åã®ãããã®ã«ããããšã§ãä»æ¥ãã®åé¡ã解決ã§ããŸãã ãšã«ãããã©ã®æ¬çªã·ã¹ãã ã§ããããè¡ãå¿ èŠããããŸãã
ãã¹ããå®è¡ãããããªãã®ã®ããã«ãç§ã¯ãããäœããšã¯æããªãã ã¢ãã«ãDjangoã¢ããªã§æ£ããä¿åããããã©ããããã¹ãããŠããã ãã®å ŽåãããŒã¿ããŒã¹æ¥ç¶ã«åŸ©å åãè¿œå ããããšãã©ãã»ã©æå³ãããã®ãââããããŸããã
@delfuegoå ã ïŒïŒ686ïŒãã®åé¡ã«å¯ŸããŠé©åãªå Žæã«ãããšæããŸãã ãã®åé¡ã¯æ³šæã«é¢ãããã®ã§ã¯ãªããèµ·åã®äººçºçãªé 延ã«é¢ãããã®ã§ãïŒæ³šæããã§ã«ååšããå ŽåïŒã ãããã¯é¢é£ããŠããŸãããå¥ã ã®åé¡ã§ãã
ãŠãŒã¶ãŒãäœæããããªããžãããã¯ãŒã¯ã§ãµããŒããããŠããããäžè¬çã«éæšå¥šã§ãããšææžåãããŠãããªã³ã¯ã«ã¯åæããŸãããé åºã¯ãããŸããã ãããã£ãŠããªãã·ã§ã³3ã¯ã泚æãšçºè¡éå§ææã®äž¡æ¹ãåŠçããŸãã
ç§ã®iPhoneããéä¿¡ããã
2015幎11æ19æ¥ã«ã¯ã8:14ã«ããããšã«Nephinã®[email protected]ã¯æžããŸããïŒ
@delfuegoå ã ïŒïŒ686ïŒãã®åé¡ã«å¯ŸããŠé©åãªå Žæã«ãããšæããŸãã ãã®åé¡ã¯æ³šæã«é¢ãããã®ã§ã¯ãªããèµ·åã®äººçºçãªé 延ã«é¢ãããã®ã§ãïŒæ³šæããã§ã«ååšããå ŽåïŒã ãããã¯é¢é£ããŠããŸãããå¥ã ã®åé¡ã§ãã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
ãªãã·ã§ã³4ãææ¡ãããïŒå®éã«ã¯3ã®ããªãšãŒã·ã§ã³ã ãšèšã人ããããããããªãïŒ
ãã¹ãŠã®èµ·åã³ãã³ãã0ã®çµäºã³ãŒãã§çµäºãããŸã§ãã³ã³ãããŒã®æºåã¯ã§ããŠããŸããã ã³ã³ããããšã«ymlãã¡ã€ã«ã§ãããã®èµ·åã³ãã³ããå®çŸ©ã§ããå¿
èŠããããŸãã ãããã®ã³ãã³ãã¯ãå®è¡äžã®ã³ã³ãããŒã«å¯ŸããŠãdockerexecãã§å®è¡ããã®ãšåãããã«å®è¡ãããŸãã åŸæ¥ã®åäœãã¹ãã§ã¯ãsetUpïŒïŒã¡ãœãããštearDownïŒïŒã¡ãœãããèããŠãã ããã ã¯ãããã·ã£ããããŠã³ãã³ãã³ãã䜿çšããããšãã§ããŸãã
æããã«ãéå±€å
ã®æ¬¡ã®ã³ã³ãããŒã¯ãäŸåãããã¹ãŠã®ã³ã³ãããŒã®æºåãæŽããŸã§èµ·åãããŸããã
PSçŽ æŽãããDockerCon.Eu2015ãããããšã
HEALTHCHECK
ãã£ã¬ã¯ãã£ãã¯ãã¯ããã«æè»æ§ãããïŒã€ãŸããåŸã§ãã€ã§ã䜿çšã§ããŸãïŒã䟿å©ã§ãã ã»ããã¢ããã¯CMD
ãŸãã¯ïŒããã«è¯ãããšã«ïŒ ENTRYPOINT
ã¹ã¯ãªããå
ã§å®è¡ããå¿
èŠããããããã»ã¹ã·ã°ãã«ãåŠçããŠå解ããŸãã
ããã§ã®åé¡ã®æ žå¿ã¯ãã¹ã¿ãã¯ãèµ·åããããã«1ã€ã®docker-compose up
ã³ãã³ããå¿
èŠã§ããããã¹ãŠãéæ³ã®ããã«æ©èœããããšã ãšæããŸãã
ãã¹ãŠã®ãã£ãŒãããã¯ã«åºã¥ããŠãããŸããŸãªãŠãŒã¹ã±ãŒã¹ã«å¯ŸããŠæããã«å€ãã®ãœãªã¥ãŒã·ã§ã³ããããŸãããã1ã€ã®ãµã€ãºã§ãã¹ãŠã«å¯Ÿå¿ãããããšã¯ã§ããŸããã
è€æ°ã®docker-composeã³ãã³ããå®è¡ããããšã§ããåæåãã¿ã¹ã¯ãéåžžã«ç°¡åã«å®è¡ã§ããŸãããã®ã¢ãããŒãã¯ãæãäžè¬çã§æè»ãªã¢ãããŒãã ãšæããŸãã
ããšãã°ãAnsibleãã¬ã€ããã¯ãããšãŒãžã§ã³ããã³ã³ããã§å®è¡ããããŒã¿ããŒã¹ïŒMySQLïŒã³ã³ãããããŒã3306ã§å®è¡ãããã®ãåŸ æ©ããåäžã®ã¿ã¹ã¯ãå®è¡ããŸãããã®ããšãŒãžã§ã³ããã³ã³ããã¯ãdbãã³ã³ããã«èªåçã«ãªã³ã¯ãããŸãã以äžãå®è¡ãããšèµ·åããŸãã
$ docker-compose run --rm agent
Creating db_1
PLAY [Probe Host] *************************************************************
TASK: [Set facts] *************************************************************
ok: [localhost]
TASK: [Message] ***************************************************************
ok: [localhost] => {
"msg": "Probing db:3306 with delay=0s and timeout=180s"
}
TASK: [Waiting for host to respond...] ****************************************
ok: [localhost -> 127.0.0.1]
PLAY RECAP ********************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0
ãã®åŸãdbã³ã³ãããŒãå®å
šã«æ©èœããŠããããšã確èªããŠã docker-compose up
ãå®è¡ã§ããŸãã
ããããµããŒãããåçŽãªdocker-compose.ymlãã¡ã€ã«ã次ã«ç€ºããŸãã
...
...
db:
image: mysql
hostname: db
expose:
- "3306"
environment:
MYSQL_DATABASE: xxx
MYSQL_USER: xxx
MYSQL_PASSWORD: xxx
MYSQL_ROOT_PASSWORD: xxx
agent:
image: cloudhotspot/ansible
links:
- db
volumes:
- ../../ansible/probe:/ansible
environment:
PROBE_HOST: "db"
PROBE_PORT: "3306"
ããšãŒãžã§ã³ããã³ã³ããã¯ã以äžã«ç€ºã/ansible
ããŠã³ãããªã¥ãŒã ã§site.yml
ãšããååã®ãã¬ã€ããã¯ãå®è¡ããŸãã
- name: Probe Host
hosts: localhost
connection: local
gather_facts: no
tasks:
- name: Set facts
set_fact:
probe_host: "{{ lookup('env','PROBE_HOST') }}"
probe_port: "{{ lookup('env','PROBE_PORT') }}"
probe_delay: "{{ lookup('env','PROBE_DELAY') | default(0, true) }}"
probe_timeout: "{{ lookup('env','PROBE_TIMEOUT') | default (180, true) }}"
- name: Message
debug: msg="Probing {{ probe_host }}:{{ probe_port }} with delay={{ probe_delay }}s and timeout={{ probe_timeout}}s"
- name: Waiting for host to respond...
local_action: >
wait_for host={{ probe_host }}
port={{ probe_port }}
delay={{ probe_delay }}
timeout={{ probe_timeout }}
sudo: false
åäžã®docker-compose up
ç®æšã«å¯Ÿãã1ã€ã®è§£æ±ºçã¯ãDockeræ§æã«ãã¯ãŒã¯ãããŒãæ©èœãå°å
¥ãã1ã€ä»¥äžã®docker-composeã³ãã³ãã次ã®ããã«æå®ããããšã§ãããè€éã§å¶åŸ¡ããããªãŒã±ã¹ãã¬ãŒã·ã§ã³ã·ããªãªãå¯èœã«ãããªãã·ã§ã³ã®ã¯ãŒã¯ãããŒä»æ§ãã¡ã€ã«ãå«ããããšã§ããå®è¡ããå¿
èŠã®ãããã¿ã¹ã¯ãïŒ
# The default workflow, specified tasks will be run before docker-compose up
# The "up" task is implicit and automatically invoked for the default workflow
# The "up" task is explicit for custom workflows as some workflows may not want docker-compose up
default:
tasks:
- run --rm agent
- up
# Custom workflows that can be invoked via a new docker-compose command option
# This example:
# 1. Runs agent container that waits until database container is up on port 3306
# 2. Runs Django database migrations from app container
# 3. Runs Django collect static task from app container
# 4. Runs test container that runs acceptance tests against linked app container
# Does not execute a docker-compose up afterwards
test:
tasks:
- run --rm agent
- run --rm app manage.py migrate
- run --rm app manage.py collectstatic --noinput
- run --rm test
ä»æ¥ãç§ã¯Makefileã䜿çšããŠäžèšãå®çŸããŸããããã«ãããããŸããŸãªã·ããªãªã§ç¬èªã®ã¯ãŒã¯ãããŒãå®çŸ©ããé«æ¬¡ã®æ©èœãæäŸãããŸãã
ãã¯ãŒã¯ãããŒãæ©èœãªã©ãdockercomposeã«å°å ¥ã§ããã°ããã®ç¹å®ã®åé¡ããã®ä»å€ãã®åé¡ã«å¯ŸããŠéåžžã«äžè¬çã§æè»ãªãœãªã¥ãŒã·ã§ã³ãæäŸãããŸãã
åæããŸããããåé¡ã¯ãæ¬çªç°å¢ã§ã®ãããã€ã«ã¯docker-composeã§ååã§ãããšäººã ãæåŸ ããŠããããšã§ãã å人çã«ã¯ããããå®çŸå¯èœã«ãªããŸã§ã«ã¯é·ãæéãããããšæããŸããKubernetes / Helmã¯ãã®ç®æšã«ããªãè¿ãããã§ãã
@ olalonde ã
HEALTCHECK
Dockerãã£ã¬ã¯ãã£ãã䜿çšãããšã depends_on
æ©èœã¯ãã³ã³ãããŒã®èµ·åïŒãã«ã¹ãã§ãã¯ãªãïŒãŸãã¯ãã«ã¹ãã§ãã¯ã¹ã¯ãªããã®æ£åžžçµäºïŒçµäºã³ãŒã0
ïŒã®ãããããåŸ
æ©ã§ããŸãã ããã¯å¯èœãªéãæè»æ§ãããïŒä»»æã®ããžãã¯ãå®çŸ©ã§ããŸãïŒããã«ã¹ãã§ãã¯ããžãã¯ãïŒãã§ãã¯ãããã³ã³ãããŒå
ã§ïŒå±ããå Žæã«ä¿æããŸãã
@delfuegoã¯ãéçºããã¹ãã®å Žåã§ãããã®æ©èœã圹ç«ã¡ãŸãã å人çã«ã¯ã docker-compose run test
ãå®è¡ããŠãäºåã«ãµãŒãã¹ãèµ·åãããæåã§åŸ
æ©ãããããã«åäœãããããšæã£ãŠããŸãã ããã¯å¯èœã§ããããããžã§ã¯ããéå§ããã®ãå°ãé¢åã«ãªãããã¹ãã倱æããå¯èœæ§ã®ããæ¹æ³ãå¢ããŸãã
+1
解決ã«ã¯äžéãå¿ èŠã ãšæããŸããcomposeã¯ãã¢ããªã±ãŒã·ã§ã³ãå©çšå¯èœãã©ãããå€æã§ããããŸããŸãªæ¹æ³ããã¹ãŠèª¬æããããšã¯ã§ããŸããã ãã«ã¹ãã§ãã¯ã®èãæ¹ã¯ã人ã«ãã£ãŠæå³ãç°ãªãããäžæãã©ãããã»ã©åçŽã§ã¯ãªããããããŸããã æ¬çªç°å¢ã§ã¯ãHTTPãã§ãã¯ã«åæ ŒããŠããŠããå¿çæéãç°åžžã«é·ãå Žåã¯ãã³ã³ãããŒãåæ¢ããå¯èœæ§ããããŸãã
ãããã£ãŠãéçºã«ã¯ãHTTPå¿çãéããŠããããŒããäœæããããã¡ã€ã«ããŸãã¯çºè¡ããããã°è¡ã®åºæ¬çãªãµããŒãã§ååã ãšæããŸãã ãããããé«åºŠãªãã®ã¯ãã»ãšãã©ããã«ã¢ããªã±ãŒã·ã§ã³åºæã«ãªããŸãã ãŸããéçºè ãã¢ããªã±ãŒã·ã§ã³ã¹ã¿ãã¯ã®åã ã®éšåãããå ç¢ã«ããããšã奚å±ãããšããã¢ã€ãã¢ãæ°ã«å ¥ã£ãŠããŸãã
@pugnascotiaããããšããããã¯å»ºèšçãªã³ã¡ã³ãã§ãããåççãªã¢ãããŒãã§ãïŒãäž¡æ¹ã®
çŸåšè°è«ãããŠãã解決çã¯ãå®éã«ã¯ãã¯ããã«åçŽãª_æåã«å ±åããã_åé¡ã«å¯ŸåŠããŠããªãããã§ã...ãµãŒãã¹ãå©çšå¯èœã«ãªãã®ãåŸ ã£ãŠããã®ã§ã¯ãªãããµãŒãã¹ãçµäºããã®ãåŸ ã£ãŠããŸãã
åãããŒããå ¬éãã2ã€ã®ã³ã³ãããŒããããŠãŒã¹ã±ãŒã¹ããããŸãã æåã¯15ã60ç§éå®è¡ããããã®åŸçµäºããŸãã 次ã«ã2çªç®ã®ãµãŒãã¹ãéå§ãããŸãã ããŒãã®ç«¶åãæ€åºããŠçµäºãããããä»æ¥ã®composeã§ãããè¡ãïŒæãããªïŒïŒæ¹æ³ã¯ãããŸããã 'restartïŒalways'ã解決çã§ã¯ãããŸããã
ã¯ããComposeã¯ãã®ãŠãŒã¹ã±ãŒã¹åãã«èšèšãããŠããŸããã Composeã¯ããã€ãã©ã€ã³ã®æ§ç¯ã§ã¯ãªããã©ã³ã¿ã€ã ç°å¢ã«éç¹ã眮ããŠããŸãã ç§ã¯ãããæåã«å ±åãããåé¡ã«ã€ããŠã®ãã®ã§ã¯ãªããšæããŸãã
ãããã«ãæåã®æ©èœã«å¯Ÿããããã€ãã®èŠæ±ããããŸãããããããã¯äœæã«ã¯æå³ããªããšæããŸãã 2ã€ã®æ©èœã¯å€§ããç°ãªããåãæ§æ圢åŒã«é©åãããããšãããšãå€ãã®æ··ä¹±ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®äœäžã«ã€ãªããå¯èœæ§ããããŸãã
@ewindischãŠãŒã¹ã±ãŒã¹ã¯ãããããžã§ãã®ãã§ãŒã³ã®å®è¡ã«äžè¬åã§ããŸãã Composeã¯ããµãŒãã¹éã®äŸåé¢ä¿ïŒãã§ãŒã³ãªã©ïŒãç¶æããããããã®å Žåã«åœ¹ç«ã¡ãŸãïŒãã®ããã«èšèšãããŠããŸãããïŒã ãã ããComposeã¯ã³ã³ãããŒã®ãå€éšãã§ãããã³ã³ãããŒã®ãå éšãã®ããã»ã¹ãäœãå®è¡ããã®ãããããªããããã·ãŒã±ã³ã¹åŠçãšIMHOã¯åŠçããŸããã
Composeããã¥ã¡ã³ãã®ãã®éšåã§ã¯ãComposeã«ãã®æ©èœããªãçç±ã«ã€ããŠèª¬æããŸãã
https://docs.docker.com/compose/faq/#how -do-i-get-compose-to-wait-for-my-database-to-be-ready-before-starting-my-application
ãã ãããããã®ããŒãžã§ã¯ãã®åé¡ã«ã€ããŠã¯ãŸã£ãã觊ããããŠããŸããã
https://docs.docker.com/compose/django/
https://docs.docker.com/compose/rails/
https://docs.docker.com/compose/wordpress/
å°ãªããšãããããã®ããŒãžã«ã¯ãComposeãããŒã¿ããŒã¹ã³ã³ããã®æºåãã§ãããŸã§åŸ æ©ããªããšãã確èªå¿çãå«ããå¿ èŠããããŸãã ãŸããããã«å¯ŸåŠããæ¹æ³ã®äŸãå«ããããšãã§ããŸãã
@ewindischå®éãããã¯ç§ãhttps://github.com/docker/compose/issues/374#issuecomment -126312313ã§ææ¡ããŠãããã®ã§ããã€ãŸãã_that_åé¡ã解決ãããšãã¹ã¿ãŒãã¢ããã®é åºã®åé¡ã解決ããããã®ããŒã«ããŠãŒã¶ãŒã«æäŸããããšãã仮説ãç«ãŠãããŠããŸãïŒé·æçãªå埩åã®åé¡ã§ã¯ãªãå ŽåïŒã
ä»ã®èª°ããããã§ããã°ãç§ã¯ãŸã ãã®ãœãªã¥ãŒã·ã§ã³ç©ºéãæ¢çŽ¢ããããšã«èå³ããããŸãã
ãããã
ç§ãã
+1
+3
+1
https://github.com/docker/compose/issues/374#issuecomment-126312313ãœãªã¥ãŒã·ã§ã³ãå®è£ ããããã®+1ã
倧ãã«è³æïŒ
çŸåšãããã¯ã³ã³ããã§å®è¡ãããããŒã«ã®äœ¿çšã«åœ±é¿ããŸãããDockerã€ãã³ãïŒjwilder / nginx-proxyãªã©ïŒã«äŸåããŠããŸãã ç§ã®ããæ¹ã¯ãdocker-ãªã¹ããŒãæåã§æ§æããåŸã§ä»ã®ãã¹ãŠã®ã³ã³ãããŒãå®è¡ããããšã§ãïŒããã¯ãdocker-composeãåäžã®ãšã³ããªãã€ã³ããšããŠãã¹ãŠæãªãïŒã
@meetmattåŸã§jwilder / nginx-proxyãå®è¡ããŠã¿ãŸãããïŒ éå§é åºã¯ããã»ã©éèŠã§ã¯ãããŸãããéå§æã«æ¢åã®ïŒå®è¡äžã®ïŒã³ã³ãããŒãååŸããŸãã
+1
+1
ééçãªãã£ãã«ããŒã¹ã®ãœãªã¥ãŒã·ã§ã³ãæ¬åœã«æ¬²ããã§ãã åºæ¬çã«libchanã®ããã«ã ããããã°ãããŒã¿ããŒã¹ã«ã¯ãšãªãå®è¡ãããšãããŒã¿ããŒã¹ã®æºåãã§ãããŸã§ãªã¯ãšã¹ãããããã¡ãªã³ã°ãããŸãã
åæ£ã·ã¹ãã ã§ã¯ãããŒãé åºãååãªãœãªã¥ãŒã·ã§ã³ã ãšã¯æããŸããã ããšãã°ãããŒã¿ããŒã¹ãåèµ·åããå¿ èŠãããããçµæãšããŠä»ã®ãµãŒãã¹ãã¯ã©ãã·ã¥ããå¯èœæ§ãããå Žåã¯ã©ããªããŸããïŒ å®éã®ãœãªã¥ãŒã·ã§ã³ã¯ããã®ãŠãŒã¹ã±ãŒã¹ãåŠçããŸãã
å®è¡ãã€ãã©ã€ã³ã®äºæž¬å¯èœæ§ã¯ç§ãã¡ãä»äºã§è¡ãããšã®éèŠãªããšãªã®ã§ãç§ãæ°ããŠãã ããã +1
+1
ç§ã¯äœãã足ããªãã«éããªãã
Docker RunïŒDockerãšã³ãžã³èªäœïŒã«ãåŸ æ©ããè¿œå ããããšãæå±ããŠãã人ãããªãã®ã¯ãªãã§ããã ç§ãèããããšãã§ãããã¹ãŠã®å Žåã«ãããŠãäŸåã³ã³ãããŒã¯ãã€ãæºåãã§ããŠãããããç¥ã£ãŠããŸãããdockerã¯ãããå°éããŸããã
å ã®ã±ãŒã¹ïŒmysqlã倧ããªããŒã¿ã»ãããšå±å€ãããŒãããïŒã§ã¯ãmysqlã³ã³ããã¯æºåãã§ãããšãã«æ»ããä¿¡å·ãéãããšãã§ãããããŸã§å±å€ã³ã³ããã¯èµ·åããŸããã§ããã
èªåã§æ±ºããæºåãã§ãããïŒããšãã°ããã°ã«ç¹å®ã®ã¡ãã»ãŒãžã衚瀺ããããšã-> signal CONTAINER_UPïŒãä»»æã®ããžãã¯ãå®è¡ããŠDockerã«ã·ã°ãã«ãéä¿¡ããããšæããŸãã
net: "container:[name or id]"
ã³ã³ããã®ã¹ã¿ãŒãã¢ããã泚æããŠã¿ãŸãããïŒ links
ã¯éæšå¥šã«ãªããã¹ã¿ãã¯å
šäœã§net: "host"
ãããã¯ãŒã¯ã䜿çšãããããåé€ããå¿
èŠããããŸããã æ®å¿µãªãããããã¯links
ã§ã¯èš±å¯ãããŠããŸããã ã³ã³ããã®èµ·åé åºãå€æŽããå¥ã®æ¹æ³ã¯ãããŸããããããšãäžèŠãªããªã¥ãŒã ãã³ã³ããéã§å
±æããå¿
èŠããããŸããïŒ
æŽæ°ïŒ
links
代ããã«åœ¹ã«ç«ããªãããªã¥ãŒã ã§å泚æããŸããïŒ
base:
build: ./base
net: "host"
volumes:
- /root/lemp_base
phpmyadmin:
build: ./phpmyadmin
net: "host"
volumes_from:
- base
volumes:
- /root/lemp_phpmyadmin
ffmpeg:
build: ./ffmpeg
net: "host"
volumes_from:
- phpmyadmin
volumes:
- /root/lemp_ffmpeg
mariadb:
build: ./mariadb
net: "host"
volumes_from:
- ffmpeg
volumes:
- /root/lemp_mariadb
php:
build: ./php
net: "host"
volumes_from:
- mariadb
volumes:
- /root/lemp_php
nginx:
build: ./nginx
net: "host"
volumes_from:
- php
volumes:
- /root/lemp_nginx
ïŒã¹ã¿ãã¯ããä»ã®å ±æããªã¥ãŒã ãšãcontainer_nameãããŒããªã©ã®å¥ã®æ å ±ãåçŽã«èŠããããã«ã¯ãªã¢ããŸãããïŒ
net: "container:base
ã§äœ¿çšãããå Žåã docker-compose build
ã³ãã³ãã§ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã
ERROR: Service "mariadb" is trying to use the network of "lemp_base", which is not the name of a service or container.
ãã®ãœãªã¥ãŒã·ã§ã³ã§ç§ãæ°ã«å
¥ããªãã®ã¯ãä»ã®ãã¹ãŠã®ã³ã³ãããŒãbase
ãã/var/www
ãã©ã«ããŒã«ããWebãµãŒããŒãã¡ã€ã«ãååŸããããšã§ãã
ç·šéïŒ
äœããã®çç±ã§ããã®ã¹ã¿ãã¯ã¯èµ·åæã«/var/www
ãã©ã«ããŒå
šäœãåé€ããŸãã
ç§ã®è¬èãªæèŠã¯ãã³ã³ããéã®äŸåé¢ä¿ãç¥ã£ãŠããDocker Composeã§çµããã¡ã«ããºã ã¯ãé¢å¿ã®åé¢ã«åãããšããããšã§ãã Docker Composeã¯ãã³ã³ãããŒAãšBã®å®è¡ãæ åœããŸããã³ã³ãããŒAãšBã¯ãç¬èªã®ãµãŒãã¹ãæ åœããŸãã BãAã«äŸåããŠæ£ããåäœããå ŽåãAãåäœç¶æ ã«ãªãã®ãåŸ ã€ã®ã¯Bã®è²¬ä»»ã§ãã è°è«ã§è¿°ã¹ãããã«ãããã¯ã¿ã€ã ã¢ãŠããåè©Šè¡ãªã©ã«ãã£ãŠå®è¡ã§ããŸãããããã¯Bã®åé¡ã§ãããDocker ComposeãAã§ã¯ãããŸãããSoCã¯ããµãŒãã¹ã®ç¬ç«æ§ãšé©åãªã¹ã±ãŒãªã³ã°ã«ãšã£ãŠæãéèŠã§ãã
ããªãã®ã¢ã€ãã¢3 @ aanandã«é¢ããäœæ¥ã¯ãããŸããïŒ é²æ©ããããã©ãããç¥ãããšã¯è¯ãããšã§ããããã¯å®ç§ãªè§£æ±ºçã§ãªããŠãããã€ãã®éåžžã«äžè¬çãªãŠãŒã¹ã±ãŒã¹ãå©ããææãªã¹ã¿ãŒãã®ããã«èãããŸãã
+1
+1
ãã¶ãç§ã¯ééã£ãŠããŸããã args: buildno:
ã¯docker-compose.yml
ããŒãžã§ã³2ã®ã³ã³ããã泚æã§ããŸããïŒ
ç§ã¯ãããComposeã«å±ããªãæžå¿µã§ããããšã«åæããåŸåããããŸãã @jwilderã®åªããDockerizeã¯ãäŸåã³ã³ãããåŸ æ©ããããã®ååŸããã°ããã§ãããåŸ æ©ããŠãããããã³ã«/ããŒããæå®ã§ããŸãã ããã¯ãããã§èª¬æããã»ãšãã©ã®ãŠãŒã¹ã±ãŒã¹ã«é©ããŠããããšããå§ãããŸãã
api:
build: .
ports:
- "8000:80"
expose:
- "80"
test:
build: test
command: dockerize -wait http://api:80 -wait tcp://db:5432 somecommand -some arg -another arg2
links:
- api:api
çæ³çã«ã¯ãDocker Events APIã䜿çšããŠãããèªåçã«æ€åºããŸãããããã¯ããã¹ãŠã®ã³ã³ãããŒãDockerã©ã³ã¿ã€ã ã«ã¢ã¯ã»ã¹ããå¿ èŠãããããšãæå³ããŸãã
äœæ²ä»¥å€ã§åŸ ã€ã¹ãã ãšæããŸãã ç§ã®éçºã§ã¯ã @ mefellowsãææ¡ãããã®ãštimercheck.ioã¹ããŒã¿ã¹ããŒãžã®ãã€ããªããã䜿çšããŸãã RabbitMQãªã©ã䜿çšããæéããããã«ãå¿ èŠãªãã®ãæ£ç¢ºã«æäŸã§ãããã®ã§ãã
15ç§ã®ã¿ã€ã ã¢ãŠãã§ãéããŠããããŒããåŸ æ©ããã·ã§ã«ã¹ã¯ãªãããšã³ããªãã€ã³ãã䜿çšããŠããŸãã
#!/usr/bin/env bash
# wait for db to come up before starting tests, as shown in https://github.com/docker/compose/issues/374#issuecomment-126312313
# uses bash instead of netcat, because netcat is less likely to be installed
# strategy from http://superuser.com/a/806331/98716
set -e
echoerr() { echo "$@" 1>&2; }
echoerr wait-for-db: waiting for db:5432
timeout 15 bash <<EOT
while ! (echo > /dev/tcp/db/5432) >/dev/null 2>&1;
do sleep 1;
done;
EOT
RESULT=$?
if [ $RESULT -eq 0 ]; then
# sleep another second for so that we don't get a "the database system is starting up" error
sleep 1
echoerr wait-for-db: done
else
echoerr wait-for-db: timeout out after 15 seconds waiting for db:5432
fi
exec "$@"
ããã¯ãä»åŸã®ïŒãããŠããã¥ã¡ã³ãã®æŽæ°ãå·®ãè¿«ã£ãŠãããšæãããïŒ depend_on
ã«ãã£ãŠè§£æ±ºãããã¯ãã§ãã
ãããã depends_on
ã¯æ³šæã®ã¿ã§ãã å¥ã®ã³ã³ããã®éå§ãå®éã«é
ãããã«ã¯ãããã»ã¹ãããèªäœã®åæåãçµäºããããšãæ€åºããäœããã®æ¹æ³ãå¿
èŠã«ãªããŸãã
ããã説æããŠãããŠããããšãã =ïŒ
å€åããã¯http://www.onegeek.com.au/articles/waiting-for-dependencies-in-docker-composeãå©ããããšãã§ã
ç§ã¯wait-for-itãšåŒã°ããçŽç²ãªbashã³ãã³ãã©ã€ã³ãŠãŒãã£ãªãã£ãäœæããŸãããããšãã§ããŸãã
ç§ã«ãšã£ãŠããå¯çšæ§ãã§ãã¯ãã®ä»»æã®ã³ã¬ã¯ã·ã§ã³ãããŒãã³ãŒãã£ã³ã°ããããšã¯ãå§ãã§ããŸããã ããçš®é¡ã®å±éã«åºæã®ç¶æ³ã¯æ°å€ãããããã¹ãŠã網çŸ
ããããšã¯ã§ããŸããã äŸãšããŠãç§ã®ãã«ãã³ã³ããã¢ããªã§ã¯ãç¹å®ã®ãã°ã¡ãã»ãŒãžãç¹å®ã®ãã°ãã¡ã€ã«ã«è¡šç€ºãããã®ãåŸ
ã€å¿
èŠããããŸããããããŠåããŠãã³ã³ãããµãŒãã¹ã®æºåãæŽããŸãã
代ããã«å¿
èŠãªã®ã¯ãå®è£
ã§ããSPIã§ãã Dockerãæãé »ç¹ãªãŠãŒã¹ã±ãŒã¹ïŒTCPæ¥ç¶ãªã©ïŒã®å®è£
äŸãããã€ãæäŸããŠããå Žåã¯ãããã§åé¡ãããŸããã ããããèªåã®æ©èœããã©ã°ã€ã³ããŠDockerã«åŒã³åºãããæ¹æ³ãå¿
èŠã§ãã
Docker Composeã¯ãã³ã³ãããŒã確å®ã«çšŒåãããããšãã§ããªãå Žåã補åå
šäœãšããŠã¯ã»ãšãã©åœ¹ã«ç«ã¡ãŸããã ãã®ãããå®å®ããåäžãªãã³ã³ãããµãŒãã¹ã¬ãã£ãã¹SPIããå¿
èŠã§ãã ãŸãããæºåå®äºãã¯ããŒã«å€ã§ãã£ãŠã¯ãªããŸãããæºåã®ã¬ãã«ãé«ããªãå¯èœæ§ãããããã§ãïŒãä»ããèªãããšãã§ãããããä»ããæžãããšãã§ããããªã©ïŒã
@realulimè¯ãèšäºã ãã©ã°ã€ã³ãä»ããŠãµãŒãã¹ã®ãæºåå®äºãç¶æ ãäœãæå³ããããå®çŸ©ã§ããããã«ãããšããèãã«å®å šã«åæããŸãã ãŸãããµãŒãã¹ãhttp / tcpæ¥ç¶ããªãã¹ã³ããŠããããšã ãããã§ãã¯ãããã©ã°ã€ã³ã®ããã©ã«ããèšå®ããããšããå§ãããŸãã ããã¯ãã®å Žã§å€§å€æ°ã®ã±ãŒã¹ãã«ããŒããã§ãããã
ããã¯ããšã³ããªãã€ã³ããã¡ã€ã«ã§ç§ãæãã€ãããã®ã§ãã
until netcat -z -w 2 database 5432; do sleep 1; done
# do the job here, database host on port 5432 accepts connections
@kulbida ã
ç§ã¯MySQLãšéåžžã«ãã䌌ãäœããããŸãã ãã®å Žåã®ãããŒã¿ããŒã¹ãã¯ãäœæãã¡ã€ã«å
ã®ãªã³ã¯ã§ãã
if [[ "$APP_ENV" == "local" ]]; then
while ! mysqladmin ping -h database --silent; do
sleep 1
done
# Load in the schema or whatever else is needed here.
fi
ãã®ã¹ã¬ããã«ã¯ãèµ·åé åºã¯ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®ãšã©ãŒå埩ã®ãµãã»ããã«ããããã¢ããªã±ãŒã·ã§ã³ããšã«ããåŠçããå¿ èŠããããšäž»åŒµããã³ã¡ã³ããããã€ããããŸãã ãããåžžã«åœãŠã¯ãŸããšã¯éããªãå Žåã説æããããã«ã1ã€ã®äŸã瀺ããããšæããŸãã äžéšã®ãµãŒãã¹ãã¯ã©ã¹ã¿ãŒåãããããŒã¿ããŒã¹ã«äŸåããŠãããã©ãããæ€èšããã¯ã©ãã·ã¥ãªã©ã«ãã£ãŠã¯ã©ãŒã©ã ã倱ãããå Žåã¯ãã¢ããªããèªåçã«åè©Šè¡ããå¿ èŠã¯ãããŸããã ããã¯ãããšãã°ãããŒã¿ããŒã¹ãªã«ããªã«æåã®æé ãå¿ èŠã§ããããããã®æé ãå®è¡ããããŸã§ãµãŒãã¹ãæ確ã«åæ¢ãããŸãŸã«ããå¿ èŠãããå Žåã«åœãŠã¯ãŸããŸãã
ããã§ãã¢ããªã®ãšã©ãŒåŠçããžãã¯ã¯èµ·åããžãã¯ãšã¯ããªãç°ãªãå ŽåããããŸãã
ããã¯æãäžè¬çãªã·ããªãªã§ã¯ãªããããããŸãããããã®ãã¿ãŒã³ããšãã©ãèŠãããŸãã ãã®å Žåãã¯ã©ã¹ã¿ãªã³ã°ã¯ãäžè¬çãªã±ãŒã¹ã§ã®ããããã¯ãŒã¯ãä¿¡é Œã§ããªããåé¡ã解決ããããã«äœ¿çšãããŸããããã«ãããã¢ããªã§ãšã©ãŒç¶æ ãåè©Šè¡ããå¿ èŠããããšããäºæ³ã®äžéšãå€æŽãããŸãã ã¯ã©ã¹ã¿ãŒã®ã¯ã©ãã·ã¥ã¯éåžžã«ãŸãã§ãããèªåçã«åèµ·åãããšãªã¹ã¯ãé«ããªãå¯èœæ§ããããããã¢ããªã±ãŒã·ã§ã³ã§åè©Šè¡ãããããããµãŒãã¹ãæåã§åèµ·åããããšããå§ãããŸãã ãã€åè©Šè¡ãããã«ã€ããŠã®ä»®å®ã«ææŠããå¯èœæ§ã®ããä»ã®ã·ããªãªããããšæããŸãã
ããäžè¬çã«ã¯ãã¹ã¿ãŒãã¢ããã®é åºãšãšã©ãŒåŠçã¯åžžã«åçã§ãããšã¯éããããã¬ãŒã ã¯ãŒã¯ãã¹ã¿ãŒãã¢ããã®é åºã管çããããã®ïŒãªãã·ã§ã³ã®ïŒæ©èœãæäŸããããšãé©åã§ãããšäž»åŒµããŠããŸãã ãã ããããã¯äœæã§ã¯ãªããdocker-engineã«å±ããŠããã®ã§ããããã ããã¯ãcomposeã䜿çšãããŠãããã©ããã«é¢ä¿ãªããdockerãèµ·åãããã³ã«å¿ èŠã«ãªãå¯èœæ§ããããŸãã
ãã«ã¹ãã§ãã¯ã®ãµããŒããè¿œå ããããã®ææ¡https://github.com/docker/docker/issues/21142ã§ãDockerãšã³ãžã³ãªããžããªããå§ãŸãè°è«ããã
ãã¡ã€ã«ã·ã¹ãã ã䜿çšããŠãã¡ã€ã«ã®ååšã確èªããã®ã¯ã©ãã§ããïŒ
ready_on: /tmp/this_container_is_up_and_ready
ããããã°ããã€çšŒåãããã決ããã®ã¯ã³ã³ããéçºè 次第ã§ãããcomposeã¯ã³ã³ãããæºåãã§ããŠãããšå®£èšãããŸã§åŸ ã€ããšãã§ããŸãã ããã¯æ瀺çãªèŠåã§ããããã®åäœãæããªãç»åã«è¿œå ã®ã¬ã€ã€ãŒãšããŠç°¡åã«è¿œå ã§ããŸãã
ãã«ã¹ãã§ãã¯ã®çµã¿èŸŒã¿ãµããŒãã¯è¯ãã§ãããã ãããŸã§ã®éãããŒã«ã«ã®docker-composeã»ããã¢ããã§äœæ¥ããããã¯ã¯æ¬¡ã®ãšããã§ãã
nginx:
image: nginx:latest
command: /bin/bash -c "sleep 2 && echo starting && nginx -g 'daemon off;'"
...
ïŒæ¬çªç°å¢ã§ã¯ãã¢ããªã¯proxy_pass
ã䜿çšããŠããã§ã«å®è¡ãããŠããããã€ãã®ã¢ããã¹ããªãŒã ãµãŒããŒã«ãããã·ããŸããããŒã«ã«ã®éçºãšãã¹ãã§ã¯ããããã®Dockerã€ã³ã¹ã¿ã³ã¹ãèµ·åããŸãããã以å€ã®å Žåã¯ãnginxãèµ·åãããŸã§å°ãåŸ
ã€å¿
èŠããããŸããã¯ã©ãã·ã¥ããŠåæ¢ããŸãã daemon off
ã¯ãnginxãåäžã®ããã»ã¹ã«ä¿æããŸããããã§ãªãå Žåãdockerã¯ã芪ããã»ã¹ãããŒã¢ã³ã®åãçæãããšããã«ã³ã³ãããŒãåæ¢ããŸããïŒ
ç§ã®2ã»ã³ããè¿œå ããã ãã§ãANTãã«ãããŒã«ã䜿çšããŠããå Žåã¯ãç¹å®ã®ãœã±ãããéããŸã§å®è¡ãé ããããµããŒããçµã¿èŸŒãŸããŠããŸãã
JenkinsCIãµãŒããŒã¯DockerComposeã䜿çšããŠãããžã§ã¯ãã³ã³ãããŒãèµ·åãã次ã®ããã«ã¡ã€ã³ã³ã³ãããŒå ããANTãå®è¡ããŸãã
docker-compose up -d
docker exec -it projectx-fpm-jenkins ant -f /var/www/projectX/build.xml
ããã¯ãdocker-compose.ymlãã¡ã€ã«ã®é¢é£ããæ§æã§ãã äžã§èª¬æããããã«ãfpmãmysqlã«äŸåãããã ãã§ã¯ãMySQLãµãŒãã¹ãå®éã«å¿ èŠãªãšãã«æºåãã§ããŠããããšãä¿èšŒããã®ã«ååã§ã¯ãªãããšã«æ³šæããŠãã ããã
version: '2'
services:
nginx:
build: ./docker/nginx
depends_on:
- fpm
fpm:
build: ./docker/fpm
depends_on:
- mysql
mysql:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=projectx
- MYSQL_DATABASE=projectx
ããããANTã¿ã¹ã¯ã®éã¯ãããåŸ ã€ããšãã§ããŸãã
<!-- other targets... -->
<target name="setup db">
<!-- wait until the 3306 TCP port in the "mysql" host is open -->
<waitfor>
<socket server="mysql" port="3306"/>
</waitfor>
<exec executable="php">
<arg value="${consoledir}/console"/>
<arg value="doctrine:database:create"/>
<arg value="--no-interaction"/>
</exec>
</target>
@kulbidaããã¯ããªãã¯ãããŸãããããããšãã ããå°ãéããã®ïŒ
while ! nc -w 1 -z db 5432; do sleep 0.1; done
_depends_on_ãåé¡ã解決ããå¯èœæ§ããããŸãã
docker-composeããã¥ã¡ã³ãããã
ãµãŒãã¹éã®äŸåé¢ä¿ãè¡šçŸããŸããããã«ã¯2ã€ã®å¹æããããŸãã
ããŒãžã§ã³ïŒã2ã
ãµãŒãã¹ïŒ
ãŠã§ãïŒ
ãã«ãïŒã
depends_onïŒ
--db
--redis
redisïŒ
ç»åïŒredis
dbïŒ
ç»åïŒpostgres
@alexch ïŒé¡§å®¢åŽã®ããã©ãŒãã³ã¹ãã¹ãïŒnginx +çµç±ã§ã«ãŒãã£ã³ã°ããããã€ã¯ããµãŒãã¹ïŒã Dockerized nginxãã¹ã-éåžžã«é«ãå€ããã»ãŒãŒãã®äœãå€ãžã®è² è·ã®äœäžã1ã2åããšã«ç¹°ãè¿ãããŠããŸããã æçµçã«ããããã³ã°ãããŠããªãNginxãVMãšããŠå®è¡ããããšã«ããŸããïŒããã©ãŒãã³ã¹ã®å€§ããªéãã®ããïŒããããããããã¯ãŒã¯ãã©ã€ããŒãã©ã°ã€ã³/ libNetworkã®åé¡ã§ãã
@syamsathyan depends_on
ã¯åœ¹ã«ç«ããªãããã§ãã
@ skorokithakis ã @ kulbidaããã¯çŽ æŽããã解決çã§ãã æ®å¿µãªããã netcat
ã¯ãããŒã¿ããŒã¹ã«æ¥ç¶ããå¿
èŠã®ããã©ã®ãµãŒãã¹ïŒ postgres
ãå«ãïŒã§ãããã©ã«ãã§äœ¿çšã§ããŸããã å¥ã®æ¹æ³ãç¥ã£ãŠããŸããïŒ
@nottrobinæãå ¥ããŸãããã€ã¡ãŒãžã«ã€ã³ã¹ããŒã«ããã ãã§ãïŒ/
@nottrobinç§ã®ããŒã ã¯ããã«åãçµãã§ããŸãã1æ¥ã2æ¥ã§ããªãã«ç¥ãããŸãïŒ
æè¿bashã䜿çšããŠããå Žåã¯ãnetcatã䜿çšããªããœãªã¥ãŒã·ã§ã³ããããŸãïŒhttp://stackoverflow.com/a/19866239/1581069ã«è§ŠçºãããŠããŸãïŒã
while ! timeout 1 bash -c 'cat < /dev/null > /dev/tcp/db/5432'; do sleep 0.1; done
以äžã®è©³çŽ°ããŒãžã§ã³ïŒ
while ! timeout 1 bash -c 'cat < /dev/null > /dev/tcp/db/5432' >/dev/null 2>/dev/null; do sleep 0.1; done
å®å šã«æ©èœãã@typekpb ã ããããšãïŒ
HEALTHCHECK
ãµããŒããhttps://github.com/docker/docker/pull/23218ã«åŸã£ãŠã¢ããã¹ããªãŒã ã«ããŒãžãããã®ã§ãããã¯ãã³ã³ãããŒãæ£åžžã§ãããã©ãããå€æããŠããã次ã®é åºã§éå§ããããšãæ€èšã§ããŸãã ããºã«ã®ååã解決ããŸãã:)
ããã§ãdocker / dockerïŒ23218ã«åŸã£ãŠãHEALTHCHECKãµããŒããã¢ããã¹ããªãŒã ã«ããŒãžãããŸãããããã¯ãã³ã³ãããŒãæ£åžžã§ãããã©ãããå€æããŠããã次ã®é åºã§éå§ããããšãæ€èšã§ããŸãã ããºã«ã®ååã解決ããŸãã:)
ãããã docker-compose.yml
ã«å®è£
ããæ¹æ³
ãããã docker-compose.ymlã«å®è£ ããæ¹æ³ã¯ïŒ
ããºã«ã®ãã1ã€ã®ããŒã¹ã¯ãdocker-composeã§æ£åžžãªã³ã³ãããŒãç£èŠãããã®å·ã§ããã«èª¬æããdepends_onæ§æã®ãããªãã®ã䜿çšããããšã§ãã ç©äºãæ©èœãããã«ã¯ãdocker-composeã«ããããå¿ èŠã«ãªããŸãã
ãŸããDockerã®ãã«ã¹ãã§ãã¯æ©èœã¯çŸåšãªãªãŒã¹ãããŠããªããããDocker / DockerComposeã®ãªãªãŒã¹ãµã€ã¯ã«ã«åãããå¿ èŠãããããšã«ã泚æããŠãã ããã
ã¡ãœãã.waitForPort()
ãæã€jsã©ã€ãã©ãªãäœæããŸããã åã«è¿°ã¹ãããã«ãããã¯ãã¹ãŠã®ç¶æ³ã§æ©èœãããšã¯éããŸããããã»ãšãã©ã®ãŠãŒã¹ã±ãŒã¹ã§ã¯åé¡ãªãæ©èœããå¯èœæ§ããããŸãã
ç§ã®ããã°ãåç
§ããŠãã ããã
HEALTHCHECKã®ããŒãžã¯çŽ æŽããããã¥ãŒã¹ã§ãã
ãããŸã§ã®éããã®ããã¥ã¡ã³ãã§ã¯åé¡ãšããã€ãã®è§£æ±ºçã«ã€ããŠèª¬æããŸãã
ããã§ã¯äžååã§ããïŒ
@pablofmoralesãããã depends_on
ã¯ã³ã³ãããèµ·åããŠããããšã確èªããã ãã ããã§ãã
äžéšã®ããŒã¢ã³ãç¹ã«MySQLã¯ãèªèº«ãããŒãã¹ãã©ããããå²ãåœãŠãããããŒããšã¢ãã¬ã¹ã®ãªãã¹ã³ãéå§ããããã«ãããã«æéãå¿ èŠã§ãã
ç§ã¯ãŸã ãREADY_ONã宣èšããŸã å šäœçã«æé«ã ãšæã£ãŠããŸãã ã€ã¡ãŒãžã«é¢ä¿ãªããã³ã³ãããŒèªäœã«äœãããã€æºåã§ãããã«ã€ããŠã®æ±ºå®ãæ®ãããªããã€ã³ããããšãæ瀺ããDocker Remote APIã®ãªãœãŒã¹ãã¹ïŒã³ã³ãããŒå ïŒæ©èœã«ãããå¿ èŠãªå€æŽãæå°éã«æããŸãã
ã³ã³ããããã¢ãããããŠãããšãã®åäœã¯ããããæã€ã¹ãå¯äžã®åœ±é¿ã§ãã READY_ONãã¡ã€ã«ãååšããå Žåã«ã®ã¿ããã¢ããããšããŠå ±åãããŸãã
ããã¯ãã¿ããªã話ãåã£ãŠããè¡åã®90ïŒ ã ãšæããŸãã ããã§ã®ããã«ã¹ãã§ãã¯ãã¯2ã€ã®ç°ãªãã€ãã³ããšããŠæ··åãããŠãããšæããŸããã1ã€ã«ãŸãšããããšããŠããŸãã 1ã€ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ãã¹ãã³ã¢ãããããšãã«äžé£ã®ã€ãã³ãã®ãæºåãã§ããŠãããããã1ã€ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ãç¶æã§ããããã«ããããã®ããã«ã¹ãã§ãã
ãæºåå®äºãã¯ãDockerãæ¯æŽããã®ã«å®å šã«é©åãªå Žæã§ãã ãå¥åº·ãã«é¢ããŠã¯ãã·ã¹ãã ã®é¢ã§éåžžã«å€æ§ã§ããããããåŠçããã®ã¯ã³ã³ãã次第ã ãšæããŸãã
ãã«ã¹ãã§ãã¯ã®ããè¯ã代æ¿æ段ãšããŠããã«ã¹ã ãã§ãªããµãŒãã¹ã®æ€åºãšç£èŠãã«ããŒããã³ã³ãããã€ãããã®ãããªãã®ãæ€èšããããšããå§ãããŸãã https://github.com/joyent/containerpilot
ã¯ããããã¯æ£ç¢ºã§éèŠãªéãã§ãã ããããç»åãå€§å¹ ã«è€éã«ãªãããšãªããã³ã³ããã¯ã©ã®ããã«ããŠãã®ãã¡ã€ã«ãæžã蟌ãã®ã§ããããã ããã䜿çšããããã¹ãŠã®ã³ã³ããã«å¯ŸããŠã©ãããŒã¹ã¯ãªãããå¿ èŠã«ãªãããã«æãããŸãã
ãšã«ãããã€ã³ã¹ã¿ã³ã¹ãåæåããããã«ã¹ã¯ãªãããéå§ããå¿ èŠããããŸã...ã¹ã¯ãªãããè¡ãå¿ èŠãããæåŸã®ããšã¯ãã¡ã€ã«ã«è§Šããããšã§ãã ç§ã«ã¯ããã«ã¹ãã§ãã¯ãè¡ãããã«ãªã¢ãŒããã·ã³ã§execãå®è¡ããããšãããããã¯ããã«ç°¡åã«æããŸãã å°ãªããšãã¿ãããã¡ã€ã«ã䜿çšãããšãã³ã³ããã®ã³ã³ããã¹ããå ¥åããªããŠããAPIãä»ããŠååçã«ç£èŠãªã©ãè¡ãããšãã§ããŸãã
åæããŸãããå€ãã®ã³ã³ããã¯ã¹ã¯ãªããã䜿çšãããPostgresãRedisãªã©ã®ãµãŒãã¹ãã€ã³ã¹ããŒã«ãããããç£èŠããã«èµ·åãããŸãã
ç§ã®å ŽåãKong APIGatewayã䜿çšããŠããŸã
kongã³ã³ãããå®è¡ããåã«ãCassandraããã®ã¹ã¯ãªããã§åäœããŠãããã©ããã確èªããŸã
while true; do
CHECK=`kong-database/check`
if [[ $CHECK =~ "system.dateof" ]]; then
break
fi
sleep 1;
done
ãã§ãã¯ãã¡ã€ã«ã«ã¯ãããå«ãŸããŠããŸã
#!/bin/bash
docker cp cassandra-checker kong-database:/root/
docker exec -i kong-database cqlsh -f /root/cassandra-checker
cassandra-checkerã¯åçŽãªã¯ãšãªã§ã
SELECT dateof(now()) FROM system.local ;
ãã¡ããã§ããã代æ¿æ段ã¯ãã«ã¹ãã§ãã¯ã§ããããã«ã¯ããšã«ããäœæããå¿ èŠã®ããã¹ã¯ãªãããå¿ èŠãªã®ã§ããªãŒããŒãããã®éãã¯ãããŸããã ããã¯æ瀺çãªãªããã€ã³ã§ããããŸããã€ãŸãããã®åäœãå¿ èŠã§ãããšè¿°ã¹ãŠãããšããããšã§ãã ã¹ã¯ãªãããå®è¡ããªããã®ã«ã€ããŠã¯ããã€ã§ãpidãã¡ã€ã«ãŸãã¯unixãœã±ããã®ready_onãã¹ãã§ãã¯ãè¡ãããšãã§ããŸãã ã¹ã¯ãªããã¯å¿ èŠãããŸããã
ããã¯æ¬åœã§ããããªãã¯æ£ããã§ãã
å€ãã®å Žåããã¡ã€ã«ã®ååšã確èªããããšã¯åé¡ãããŸããããã³ã³ãããèµ·åã¹ã¯ãªãããå¿ èŠãšããªããšãã«èµ·åã¹ã¯ãªããã䜿çšããããã«åŒ·å¶ããã®ã¯é¢åã§ãã ä»ã®éåžžã«åçŽãªæ¡ä»¶ã®ãã§ãã¯ãã§ããªãã®ã¯ãªãã§ããïŒ ç¹ã«äŸ¿å©ãªã®ã¯ãããã»ã¹ãç¹å®ã®tcpããŒãã§ãªãã¹ã³ãããŸã§åŸ ã€ããšã§ãã
ãã®ã¢ã€ãã¢ã¯ãªããã€ã³ã§ãããããäœã匷å¶ããããšã¯ãããŸããã å®éãããªãã¯äœãæåŸ ãããã¹ãããæ確ã«èšã£ãŠããŸãã
å®è¡ãå¿ èŠãªã»ããã¢ããããŒã¿ã倧éã«ããå¯èœæ§ããããããtcpããŒãã®ãªãã¹ã³ã§ã¯ãã³ã³ãããåæåãããããšãéç¥ããã®ã«ååã§ãªãå ŽåããããŸãã å°çãtcpãä»ããŠããpostgresã³ã³ãããžã®æ¥ç¶ãéããããšãããŒã¿ããŒã¹ã®æºåãã§ããŠããªãããšã瀺ããšã©ãŒã衚瀺ãããŸãã
ç§ãããªããæ£ããç解ããŠãããªããããã¯ããªããã€ã³ããããªããã°ããªãã¯ãã®æ©èœã䜿ãããšãã§ããªããã§ãã ãšã«ãŽããã®æ©èœãå¿ èŠã§ãã¢ããªãpidãã¡ã€ã«ã䜿çšããªãå Žåã¯ãèµ·åã¹ã¯ãªããã䜿çšããå¿ èŠããããŸãã
MySQLïŒOPã®å ŽåïŒã®å Žåããªãã¹ã³ãããšæºåãæŽããŸãã 圌ãã¯ãããçå®ã§ããããšã確èªããããã«å€ãã®åé¡ãæ±ããŠããŸãããããããã®ãããªå Žåã«ã ç§ã®èãã§ã¯ããããã®æ¡ä»¶ã®ããããã«å¯ŸããŠæºåå®äºãã§ãã¯ãæ§æããããšãããªããã€ã³ãã§ããããã«ãåæã§ããæ¡ä»¶ã®çããªã¹ãããããããããšããããšã§ãã ç§ã¯ãããå¯äžã®æ¹æ³ã§è¡ãããªããã°ãªããªãçç±ã¯ããããŸããã
mysqlã®å ŽåãäžåºŠãªãã¹ã³ãããšãæºåãã§ããŠããŸããã åçŽãª1ããŒãã®å Žåã¯æºåãã§ããŠããŸãããè€æ°ã®ããŒããããå Žåã¯ããŸã æºåãã§ããŠããŸããã ãå¯äžç¡äºã®æ¹æ³ãã®æå³ã¯ç解ã§ããŸãããåºæ¬çãªæœè±¡åãšããŠã¯å®ç§ã ãšæããŸãã ç§ã¯ãããããªããæãã©ããªéå ·ã§ãé©çšã§ããå ŽæãšããŠãã£ãšèŠãŠããŸãã ã¹ã¯ãªããã¯å€éšãµãŒãã¹ãšéä¿¡ããŠã³ã³ãããæ€èšŒããããšãã§ããŸãããã®å Žåãå€éšãµãŒãã¹ã¯ã³ã³ãããšãŒãžã§ã³ãã«ãã¡ã€ã«ãæžã蟌ãããã«ä¿¡å·ãéãããšãã§ããŸãã æè»æ§ftwã
ãã®ãæ¡ä»¶ãã®ãªã¹ãã§äœããè©Šã¿ãå Žåãåžžã«ãããæ©èœããªãå ŽåããããŸãã ãã ãããã¡ã€ã«ã«è§Šããããšã¯åžžã«æ©èœããŸããã€ã¡ãŒãžã¯æºåãã§ãããšå€æãããšãã«ãããèªèããŠããããã§ãïŒãããä»ã®ãã¹ãã§åŸ ã€å¿ èŠããããŸãããã¡ã€ã«ãããŠã³ããŒãããå¿ èŠããããŸãã$ external_serviceãå©çšå¯èœã§ããããšã確èªããå¿ èŠããããŸããã¹ãã³ã¢ããããŸãïŒæ£ããããããäœããã®çç±ã§ç§ã¯ããŒã¿ããŒã¹ãžã®æ£ããæš©éãæã£ãŠããŸããããªããã®ç»åã¯èªã¿åãå°çšã§ã...ãªã©ãªã©ã
ãããã®çš®é¡ã®ã¹ã¯ãªããã¯ãã§ã«ããããšããã«ååšããŠããŸã...ãããŸã§ãã®ãããªæ©èœããªãã£ãããããããã®ã¹ã¯ãªãããäœæããå¿ èŠããããŸããã ãããã£ãŠãã¹ã¯ãªããããã§ã«ååšããå¯èœæ§ãé«ãããããã®ãããªã¹ã¯ãªãããããããããããšã¯æå°éã§ãã
ãã1ã€ã®å¯èœæ§ã®ããã±ãŒã¹ã¯ããã®ãã¹ãã«å¯ŸããŠchefãŸãã¯ansibleã®ãããªãã®ãå®è¡ããŠããããã¡ã€ã«ãæžã蟌ãããšã§ãã
DockeråŽã®ãã§ãã¯ã®åé¡ã§ããå Žåã¯ã次ã®ããã«ãªããŸãã
UPCHECK --port=7474 --interval=0.5s --response="Please log in"
ã¡ãªã¿ã«ããã¡ã€ã«ãœãªã¥ãŒã·ã§ã³ã«ã¯å€ãã®ã¡ãªããããããšæããŸãããè€éãã䌎ããŸãã
80ïŒ
ã®å Žåãtcpå¿çã®æ€èšŒã¯åé¡ãªãæ©èœããŸãã
ãŸã...ç§ã¯æãïŒ
UPCHECK --file=/tmp/container_is_ready --interval=0.5s --timeout=2m
ãŸã£ããåãã§ãã
ç§ã¯å®éã«docker-composeã®åå®è£ ã«åãââçµãã§ãããç¹å®ã®æ¡ä»¶ãåŸ ã€æ©èœãè¿œå ããŠããŸãã libcomposeã䜿çšãïŒãããã£ãŠãDockerã®çžäºäœçšãåæ§ç¯ããå¿ èŠã¯ãããŸããïŒããã®ããã®äžé£ã®æ§æã³ãã³ããè¿œå ããŸãã ããã§ããããã§ãã¯ããŠãã ããïŒ https ïŒ
ã³ãŒãã¯å®æããŠããŸããããããå®éã«äœ¿çšã§ããããã«ãªãåã«ãããã€ãã®ã¢ããã¹ããªãŒã ã®åé¡ã解決ãããã®ãåŸ ã£ãŠããããšã«æ³šæããŠãã ããã
Gossã¯ãã³ã³ããã®èµ·åãé ãããããã®ããªãæè»ãªã·ã ãšããŠäœ¿çšã§ããŸããããã«ãã€ã¡ãŒãžãå°ãå€æŽããã ãã§ãããå®çŸããæ¹æ³ã説æããããã°æçš¿ãæžããŸããã
Kubernetesã«ã¯init-containersã®æŠå¿µããã
+1
ã³ã³ãããŒã§å ¬éããŠãããµãŒãã¹ã«ããã®ãµãŒãã¹ãå ¬éããæºåãã§ããŠãããã©ããããŸãã¯å ¬éã§ãããã©ãããå€æãããæ¹ããããšæããŸãã
ããšãã°ãPHPã¢ããªã±ãŒã·ã§ã³ã®å ŽåãMySQLã®æ¥ç¶ã«äŸåããå¯èœæ§ããããŸãã ããã§ãPHPã³ã³ããã®ENTRYPOINT
ã«ãç§ã¯ãã®ãããªãã®ãæžããŸããã
#!/bin/bash
cat << EOF > /tmp/wait_for_mysql.php
<?php
\$connected = false;
while(!\$connected) {
try{
\$dbh = new pdo(
'mysql:host=mysql:3306;dbname=db_name', 'db_user', 'db_pass',
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);
\$connected = true;
}
catch(PDOException \$ex){
error_log("Could not connect to MySQL");
error_log(\$ex->getMessage());
error_log("Waiting for MySQL Connection.");
sleep(5);
}
}
EOF
php /tmp/wait_for_mysql.php
# Rest of entry point bootstrapping
ãã®ããã«ããŠãå ¬éããŠãããµãŒãã¹ã®äŸåé¢ä¿ãã€ãŸãphpã解決ãããŠããããšã確èªããããžãã¯ãè¿œå ã§ããŸãã
ããã³ãããŒã«ã·ã¥ãªãŒãïŒ
ã³ã³ãããŒã§å ¬éããŠãããµãŒãã¹ã«ããã®ãµãŒãã¹ãå ¬éããæºåãã§ããŠãããã©ããããŸãã¯å ¬éã§ãããã©ãããå€æãããæ¹ããããšæããŸãã
ãã¡ããããã®åäœããã䜿çšãããã¹ãŠã®ã³ã³ããã«ããŒãã³ãŒãããããšãã§ããŸãã
MySqlã³ã³ããã ããããMySqlãµãŒãã¹ã®äœããå€æŽãããå Žåãããªãã¯
ç¹°ãè¿ãã³ãŒãã£ã³ã°ã¯èšããŸã§ããªãããã¹ãŠã®äŸåã³ã³ãããå€æŽãã
ããããã«å¿
èŠã§ãã ããã¯DRYã§ã¯ãªããå®å®ããå¥çŽããªãããã
è匱ãªã·ã¹ãã ã«ã€ãªãããŸãã
ãœãããŠã§ã¢ã®è·äººæã®èŠ³ç¹ãããããçš®ã®
ã³ã³ããéçºè
ãå®è£
ã§ãããã³ã³ããã¬ãã£ãã¹SPIãã ãªã³
å察åŽã«ã¯ãContainerReadinessAPIããå¿
èŠã§ãã
ãµãŒãã¹ã¯äŸåããå¯èœæ§ããããŸãã
ãŠã«ãªãã
@realulim MySQLã³ã³ããã§ã®å€æŽã¯ã圱é¿ãåãããã¹ãŠã®ã³ã³ãããŸãã¯ãªã³ã¯ãããã³ã³ããã«è€è£œãŸãã¯äŒæããå¿ èŠãããããšã«åæããŸãã
ãã ããå€æŽãDB_HOSTãDB_NAMEãDB_USERãDB_PASSWORDãªã©ã®ãã©ã¡ãŒã¿ãŒã«é¢ãããã®ã§ããå Žåã ãããã¯ARG
ïŒåŒæ°ïŒãšããŠæž¡ãããé¢é£ãããã¹ãŠã®ã³ã³ãããŒã§å
±æãããŸãã docker-compose.yml
ãã¡ã€ã«ã䜿çšããŠããå Žåãå€æŽã¯1ã€ã®ãã¡ã€ã«ã§è¡ãããŸãã
ãããŠãã³ã³ããã®æºåãã§ããŠãããã©ããããã§ãã¯ããAPIãããã解決ããæ¬åœã®æ¹æ³ã§ããããšã«å®å šã«åæããŸãããå ¬éãããŠãããµãŒãã¹ãããã宣èšããããã®ããè¯ãåè£ã«ãªããšç§ã¯ä¿¡ããŠããŸãã
åé¿çuntil nc -z localhost 27017; do echo Waiting for MongoDB; sleep 1; done
@ piotr-s-brainhubäžèšã®ã³ã¡ã³ããããããŒããéããŠãããããšãã£ãŠããµãŒãã¹ã®æºåãã§ããŠãããšã¯éããªãããšãããããŸãã
ãã°ãããŒãã®ãªãŒãã³ããŸãã¯æéé 延ã®ããããã«ãã£ãŠããªã¬ãŒã§ããæºåã®ãªãã·ã§ã³æ¡ä»¶ãèšå®ã§ããŸããïŒ äœãã®ãããªãã®ïŒ
ready_when:
in_logs: `MySQL init process done`
ports_open:
- 3306
äŸåé¢ä¿ã³ã³ããã®æºåãæŽãã®ãåŸ ã€ããšã¯ãansibleã®ãããªããŒã«ã§ç°¡åã«å®è£ ã§ããããšã«æ°ã¥ããŸããã 誰ãããã®ã¢ãããŒãã䜿çšããŸãããïŒ docker-composeãansible / chef / puppetã«ç°¡åã«çœ®ãæããããšãã§ããŸããïŒ ãã®ã¢ãããŒãã瀺ãgithubã®ãããžã§ã¯ãã¯ãããŸããïŒ
泚ïŒçŸåšãäŸåé¢ä¿ãå©çšã§ããªãå Žåã§ãå®è¡ã§ããå ç¢ãªãµãŒãã¹ãäœæããããšã®éèŠæ§ãç解ããŠããŸãã ããã¯åé¡ã§ã¯ãããŸããã
ç§ã¯æè¿ãç§ãæžããããŒã«ã§ããã解決ããŸããïŒ https ïŒ
æå®ããããªãœãŒã¹ã®ãªã¹ãã䜿çšå¯èœã«ãªããŸã§åŸ æ©ãã次ã®ã³ãã³ãã«æé»çã«ç§»åããããæ瀺çã«åŒã³åºãããšã«ãã£ãŠãç¶è¡ããããã®ãç¶è¡ã§ããŸãã
@djui ãç¹å®ã®ãªãœãŒã¹ãåŸ æ©ããŠããéãawaitã¯äœãããŸããïŒ
@derekmaharããŒãªã³ã°ããŸãã ããã©ã«ãã®ã¿ã€ã ã¢ãŠãã¯60ç§ã§ãã ãªãœãŒã¹ã衚瀺ãããªãå Žåã¯åžžã«ã1ç§ééã§åè©Šè¡ããŸãã çŸåšãåæãªãœãŒã¹æ€åºãè¡ããªããããé 次ã§ãããããã§ååã§ãããä¿®æ£ããããšãã§ããŸãã
次ã®ã·ããªãªã§äœ¿çšããŸãã
Docker-composeã€ã³ãã©ã¹ãã©ã¯ãã£ãèµ·åããŠãããçµ±åãã¹ããã©ã€ããŒãå®è¡ããŸãã ãã©ã€ããŒãµãŒãã¹ã¯ãawaitã䜿çšããŠãã€ã³ãã©ã¹ãã©ã¯ãã£å ã®ãã¹ãŠã®ã³ã³ããŒãã³ãã䜿çšå¯èœã«ãªã£ãåŸã§ã®ã¿éå§ãããŸãã ãã®ãããawaitã¯æçµçã«ãã©ã€ããŒã®å®è¡ã³ãã³ããåŒã³åºããŸãã
makeã䜿çšããŠæ°ããDockerHEALTHCHECKãã£ã¬ã¯ãã£ãã§ãããè¡ãæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
https://gist.github.com/mixja/1ed1314525ba4a04807303dad229f2e1
[æŽæ°ïŒDocker 1.12ãåæ¢ããã³ã³ãããŒã®ãã«ã¹ãã§ãã¯ã¹ããŒã¿ã¹ããéå§äžããšæãã«å ±åãããããã³ã³ãããŒããšã©ãŒã³ãŒãã§çµäºããå Žåã«å¯ŸåŠããããã®èŠç¹ãæŽæ°ããŸãã]
@mixjaã«æè¬ã
@mixja ããã解決çïŒ ããã¯ãŸãã«ç§ãç®±ããåºããŠæ¥ããšæåŸ ããæ©èœã§ãã ããããããã§åé¡ãšãªãã®ã¯ãã³ã³ãããŒãæåã§éå§ããå Žåããªãdocker-composeãå¿ èŠãªã®ã§ããïŒ
ãã¹ãã«ã¯https://github.com/avast/docker-compose-gradle-pluginã䜿çšããDockerãã«ã¹ãã§ãã¯ã䜿çšããŸãã人çºçãªäžæåæ¢ããã«ãã®é«éåã¯äžèŠã§ãã
@ korya -
@mixjaãŸããããªããæ£ãããããããŸããã ããããå€ãã®äººããã®ã¹ã¬ããã§ææããŠããããã«ããã¹ãç°å¢ã§ã¯ãªãŒã±ã¹ãã¬ãŒã·ã§ã³æ©èœãéåžžã«å¿ èŠã§ãããããŒã«ããã¯ã¹ã«docker-composeãããå Žåãdocker-composeãããã®çš®ã®æ©èœãèŠæ±ããããšã¯éåžžã«é åçã§ãã
å®éãããã¥ã¡ã³ãã«ãããšããComposeã¯ãã«ãã³ã³ããDockerã¢ããªã±ãŒã·ã§ã³ãå®çŸ©ããŠå®è¡ããããã®ããŒã«ã§ããã äœæããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã§ãããšã¯èšããŸãããããŠãŒã¶ãŒã®èŠ³ç¹ããïŒç§èªèº«ãªã©ïŒã管ç察象ã³ã³ãããŒéã®åºæ¬çãªäŸåé¢ä¿ç®¡çããµããŒãããããã«ãã³ã³ãããŒDockerã¢ããªã±ãŒã·ã§ã³ãå®çŸ©ããã³å®è¡ããããã®ããŒã«ããæåŸ ããã®ã¯åœç¶ã ãšæããŸããç®±ããåºããŠã
ããŒã«ãããããµããŒãããªããã°ãªããªããšèšã£ãŠããã®ã§ã¯ãããŸããã ç§ãèšã£ãŠããã®ã¯ããããæåŸ ããã®ã¯éåžžã«èªç¶ãªããšã§ãã ããã§ãªããã°ã誰ãããããè¡ãããã®åœŒãã®è¶ ã¹ããŒããªæ¹æ³ãèãåºãå¿ èŠããããŸãã å®éãmakefileãšåæ§ã®ããšãè¡ãbashã¹ã¯ãªããã䜿çšããŠããŸãã
@mixja @koryaç§ã¯ç§ã®ããŒã«æ¹åãããã®awaitããããªãã®Makefileã®ããŒãžã§ã³ã§ã¯ãããäžã§æå¹/è¡æ¹äžæ/ãã䟿å©ã§æäŸäœã®ãã£ãŒãããã¯ããèãããããšæããŸãawait
ã
healthcheck + makeããŒãžã§ã³ã¯ãã°ããŒãã«ããã¥ãŒã®ããã§ãããåäžã®ã³ã³ããã¯ã°ããŒãã«ç¶æ
ãèªèããŠããŸããïŒãã ããmakefileã¯èªèããŠããŸãïŒã await
ã¯ãããŒã«ã«ããã¥ãŒã§ãããæå¹ãªåã³ã³ããã¯ïŒã®ã¿ïŒèªèããŠããŸãã depends_on
ãlinks
ãšåæ§ã«ãç¥ã£ãŠããã¹ãããšã ããã«ããã«ã¹ãã§ãã¯ã«å¿
èŠãªããŒã«ïŒããã©ã«ãã®å ŽåããããŸããäŸïŒ mysqlshow
ïŒãã³ã³ããã«å梱ããããDockerfileããã®ãŸãŸã«ããŠããããšããå§ãããŸãã ããã«ãdocker-composeãäž»ã«ã³ã³ããžã·ã§ã³ã«äœ¿çšããã®ã§ã¯ãªããäž»ã«æè»ãªæ§æã«äœ¿çšããŠããããã§ãïŒããšãã°ã docker-compose up -d mysql
ã¯docker run -d -e ... -v ... -p ... mysql
ãšåçã§ããå¿
èŠããããŸãïŒã
ããã«ã¡ã¯@ djui-ããã¯ããããå²åŠçãªèŠ³ç¹ã§ãããHEALTHCHECKã®å€§åæã¯æ£ããåäœãä¿é²ããŠãããšæããŸã-ã€ãŸããã³ã³ããã¯å€éšã®äŸåé¢ä¿ãªãã«ã³ã³ããã®ç¶æ ã確ç«ããæ段ãæäŸã§ããŸãã
ããã¯ãå€éšã®æ¥ç¶æ§ãæ€èšŒããããšã®äŸ¡å€ãæãªããã®ã§ã¯ãããŸããããæ¥ç¶æ§ãªã©ïŒã€ãŸããã¢ããªã±ãŒã·ã§ã³ã®æ©èœïŒãæ€èšŒãããã®ã§ãéåžžããããã«ããŒããäžé£ã®åãå
¥ããã¹ããå®è¡ããŸãã ãã¡ãããå®å
šãªç°å¢ã確ç«ããã await
ããŒã«ã®ç¯å²ãšéå»ã«äœ¿çšããä»ã®ã¢ãããŒãïŒ agent
ã©ãããããAnsibleãã¬ã€ããã¯ïŒã確ç«ããããŸã§ãéåžžããã®ã¬ãã«ã®ãã¹ããå®è¡ããããšã¯ã§ããŸããã
Docker 1.12ã§ã¯ãDockerç°å¢ãã€ã³ããã¹ãã¯ãããæ段ãšã確ç«ãããæ§é ïŒã€ãŸããbash /ã·ã§ã«ã¡ã«ããºã ïŒã䜿çšããŠç¹å®ã®ç¶æ ããåŸ æ©ãããæ©èœããããŸãããã¡ãããã³ã³ãããŒãç¬èªã®ãã«ã¹ãã§ãã¯ãå®çŸ©ããŠããå Žåã«éããŸãã ã ãã©ãããã©ãŒã ã®ãã€ãã£ãæ©èœã掻çšããã³ã³ããã®ææè ã«ç¬èªã®ãã«ã¹ãã§ãã¯ãå®çŸ©ããããã«ä¿ãããšã«ã¯ããããŸã§ã®å€éšïŒã¢ããªã±ãŒã·ã§ã³ããã»ã¹ãéå§ããŸãããããã¯ãåé¡ã§ã¯ãããŸããïŒã¢ãããŒãã«é Œãã®ã§ã¯ãªããããå€ãã®äŸ¡å€ããããŸããã«é Œãã
é¢é£ããã¢ãããžãŒãšããŠãAWS CloudFormationãšãã°ã«ãŒãã®èªåã¹ã±ãŒãªã³ã°ãšããŒãªã³ã°ã¢ããããŒãã®èª¿æŽã®æŠå¿µãæ€èšããŠãã ããã CloudFormationã¯ãæ°ããã€ã³ã¹ã¿ã³ã¹ã®æºåããæ£åžžãã§ãããå€ãã€ã³ã¹ã¿ã³ã¹ã匷å¶çµäºããŠå¥ã®æ°ããã€ã³ã¹ã¿ã³ã¹ãããŒã«ã€ã³ã§ãããã©ãããã©ã®ããã«èªèããŸããïŒ å€éšãã«ã¹ãã§ãã¯ãäœæããŸããããããšãã€ã³ã¹ã¿ã³ã¹èªäœã«äŸåããŠãã«ã¹ãéç¥ããŸããïŒ çãã¯åŸè ã§ããã€ãŸããã€ã³ã¹ã¿ã³ã¹ã®ææè ã¯ãã€ã³ã¹ã¿ã³ã¹ã«å¿ èŠãªæååºæºãèšå®ããã€ã³ã¹ã¿ã³ã¹ããæ£åžžãã§ããããšãå æ¬çãªãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã·ã¹ãã ïŒCloudFormationïŒã«éç¥ã§ããŸãã
Docker Composeã«ã€ããŠã®ã³ã¡ã³ãã«é¢ããŠã¯ãããã¯ãèšåããäž¡æ¹ã®åŽé¢ãæäŸã§ããããŒã«ã§ãã docker-compose.yml
éšåã¯ãæãŸããç¶æ
æ§æç°å¢ä»æ§ã§ãããããŸããŸãªdocker-compose
ã³ãã³ãã¯ãããŸããŸãªæ¹æ³ã§ç°å¢ãšå¯Ÿè©±ããæ©èœãæäŸããŸãã åºæ¬çã«docker-compose
ã¯ãµãŒãã¹éã®äŸåé¢ä¿ç®¡çãååã«å®è¡ããªããããä»ã®ãšããå€éšã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ãå¿
èŠã§ãã docker-compose
ã¯ãã€ãã£ããã«ã¹ãã§ãã¯ãµããŒããªã©ã®æ©èœãåããŠãããããããšãã°ãµãŒãã¹ãäºåã«æ£åžžãšããŒã¯ããå¿
èŠãããããšãæå®ã§ãããšä»®å®ãããšãåäžã®docker-compose up
ã³ãã³ãã®ç®æšã¯ããçŸå®çã«ãªããŸããããã¯ãã¢ããããšèŠãªãããŸããã€ãŸããäŸåãµãŒãã¹ã¯ãäŸåãæ£åžžã«ãªããŸã§å¹æçã«åŸ
æ©ããŸãã
@mixja詳现ãªèª¬æãããããšãã ããã
ãã©ãããã©ãŒã ã®ãã€ãã£ãæ©èœã掻çšããããšã®äŸ¡å€ãé«ãŸããšæããŸã
è¯ã/èŠç¹ã§ãã DockerComposeãdepends_onãŸãã¯æ°ããããŒã®ããããã§ãã€ãã£ãã«ãã«ã¹ãã§ãã¯ã掻çšããã®ãåŸ
ã€ã ãã§ãã ããšãã°--abort-on-container-exit
ãèšå®ãããŠããŠãå®è¡æã®ãã«ã¹ãã§ãã¯ã§ãã«ã¹ãã§ãã¯ã©ãã«ã_unhealthy_ã«èšå®ãããŠããå Žåããããããããã«äžæ©é²ãã§ãåºæ¬çã«ãªã³ã¯ãããã³ã³ãããåæ¢ããå¿
èŠããããã©ããçåã«æããŸãã
ãã¹ããå®è¡ããããã®delay
æ©èœãæ¢ããŠãã人ã®ããã®å¯èœãªäžæçãªåé¿çïŒ
2ã€ã®docker-compose
ymlãã¡ã€ã«ããããŸãã 1ã€ã¯ãã¹ãçšã§ããã1ã€ã¯éçºçšã§ãã éãã¯ã docker-compose.test.yml
sut
ã³ã³ãããããããšã ãã§ãã sut
ã³ã³ããã¯pytest
ãŸãã ç§ã®ç®æšã¯ããã¹ãdocker-compose
ãå®è¡ããããšsut
ã³ã³ãããŒã§pytest
ã³ãã³ãã倱æããå Žåã¯ãéçºdocker-compose
å®è¡ããªãã§ãã ããã ãããç§ãæãã€ãããã®ã§ãïŒ
# launch test docker-compose; note: I'm starting it with -p argument
docker-compose -f docker-compose.test.yml -p ci up --build -d
# simply get ID of sut container
tests_container_id=$(docker-compose -f docker-compose.test.yml -p ci ps -q sut)
# wait for sut container to finish (pytest will return 0 if all tests passed)
docker wait $tests_container_id
# get exit code of sut container
tests_status=$(docker-compose -f docker-compose.test.yml -p ci ps -q sut | xargs docker inspect -f '{{ .State.ExitCode }}' | grep -v 0 | wc -l | tr -d ' ')
# print logs if tests didn't pass and return exit code
if [ $tests_status = "1" ] ; then
docker-compose -f docker-compose.test.yml -p ci logs sut
return 1
else
return 0
fi
ããã§ãäžèšã®ã³ãŒããä»»æã®é¢æ°ïŒç§ã®ååã¯test
ïŒã§äœ¿çšããŠã次ã®ããã«å®è¡ã§ããŸãã
test
test_result=$?
if [[ $test_result -eq 0 ]] ; then
docker-compose -f docker-compose.yml up --build -d
fi
ç§ã«ãšã£ãŠã¯ããŸãæ©èœããŸããã docker-compose
ãã®ãããªãã®ããã€ãã£ãã«ãµããŒãããã®ããŸã 楜ãã¿ã«ããŠããŸã:)
+1
ãããããdocker-composeã®ã³ã¢ã®å€åŽãšèŠãªããããã®ã¯ããã©ã°ã€ã³ãèš±å¯ããããšã§ãµããŒãã§ããŸããïŒ ãªã¯ãšã¹ãïŒ1341ãšåæ§ã«ãäžéšã®æ©èœã圹ç«ã€ãšæãããè¿œå æ©èœãããããã§ãããå¿
ãããçŸåšã®ããžã§ã³ãšå®å
šã«äžèŽããŠãããšã¯éããŸããã ãããããïŒ3905ã«ãã£ãŠææ¡ããããããªãã©ã°ã€ã³ã·ã¹ãã ããµããŒãããããšã§ãæ©èœã®ã³ã¢ã»ããã«çŠç¹ãåãããŠäœæã§ããããã«ãªããŸãããããããã§ãªãå Žåã¯ãç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã§ãã©ã°ã€ã³ãäœæããŠã up
å®è¡ãåŠçã§ããŸãã
docker-compose
ããdocker envã»ããã¢ããã®åšãã«ããŒã«ã«ã«ãããã¹ãŠã®ãããžã§ã¯ããžã®ãšã³ããªãã€ã³ããšããŠæ©èœãããããšãã§ããã°ããã¹ãŠã®åã«ããã¹ã¯ãªãããè¿œå ããŠãããã©ã«ãã®ãšã³ããªãã€ã³ããšããŠæ©èœãããå¿
èŠã¯ãããŸãããå¥åŠãªå Žåã®ããã«ã¹ã¯ãªãããå®è¡ããããšãèŠããŠããå¿
èŠããã人ã
ã
healthcheck
ãšdocker-compose 2.1+
ã䜿çšããŠãããè¡ãæ¹æ³
version: "2.1"
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
healthcheck:
test: mysqladmin -uroot -ppassword ping
interval: 2s
timeout: 5s
retries: 30
web:
image: nginx:latest # your image
depends_on:
db:
condition: service_healthy
ããã§ã docker-compose up
ã¯ãdbã³ã³ãããŒãæ£åžžã§ãããšèŠãªãããåŸã«ã®ã¿Webã³ã³ãããŒãéå§ããŸãã
ãã§ã«èšåãããŠããå Žåã¯ç³ãèš³ãããŸããããå®å šãªè§£æ±ºçãæçš¿ããããšã¯æããŸããã
ãããPostgreSQLã®æ¹æ³ã§ãã
ããããšã@Silexð
version: '2.1'
services:
db:
image: postgres:9.6.1
healthcheck:
test: "pg_isready -h localhost -p 5432 -q -U postgres"
interval: 3s
timeout: 5s
retries: 5
@Silexã¯æ²ããããšã«ããŒãžã§ã³ã3ããšãã®ãã©ãŒãããã§ïŒ
image: nginx:latest # your image
depends_on:
db:
condition: service_healthy
ERROR: The Compose file './docker-compose.yml' is invalid because:
depends_on contains an invalid type, it should be an array
ãåãåããŸã
2.1ã¯åŒãç¶ããµããŒãããŠãããéæšå¥šã«ãªãããšã¯ãããŸããã 3.xã¯äž»ã«ã¹ãŠã©ãŒã ãµãŒãã¹ã¢ãŒãïŒéããŒã«ã«ïŒçšã§ãã
From: Vlad Filippov <[email protected]>
å®å
ïŒ docker / compose
CcïŒmbdas [email protected] ; èšå@ noreply.github.com
éä¿¡æ¥ïŒ2017幎3æ8æ¥æ°Žææ¥11:45 AM
件åïŒReïŒ[docker / compose]ã³ã³ããã®èµ·åãé
ãããŠãèµ·åæéãé·ãäŸåãµãŒãã¹ããµããŒãããæ¹æ³ã¯ãããŸããïŒïŒ374ïŒ
@Silexã¯æ²ããããšã«ããŒãžã§ã³ã3ããšãã®ãã©ãŒãããã§ïŒimageïŒ nginxïŒlatest ïŒããªãã®ç»å
depends_onïŒ
dbïŒ
ç¶æ
ïŒservice_healthy
ãšã©ãŒãçºçããŸãïŒäœæãã¡ã€ã« './docker-compose.yml'ã¯ç¡å¹ã§ãïŒservices.auth.depends_onã«ç¡å¹ãªã¿ã€ããå«ãŸããŠãããããé
åã§ããå¿
èŠããããŸãâ
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããããã¹ã¬ããããã¥ãŒãããŠãã ããã
2.1ã¯åŒãç¶ããµããŒãããŠãããéæšå¥šã«ãªãããšã¯ãããŸããã 3.xã¯äž»ã«ã¹ãŠã©ãŒã ãµãŒãã¹ã¢ãŒãïŒéããŒã«ã«ïŒçšã§ãã
ããããšãïŒ
@vladikoffïŒã§ãããŒãžã§ã³3ã«ã€ããŠã®è©³çŽ°æ å ±https://github.com/docker/compose/issues/4305
åºæ¬çã«ã¯ãµããŒããããŸãããdocker-composeã«äŸåããã®ã§ã¯ãªããã³ã³ãããŒããã©ãŒã«ããã¬ã©ã³ãã«ããå¿ èŠããããŸãã
ããã¯ããéããããšãã§ãããšæããŸãã
æ®å¿µãªãããv3ã§ã¯æ¡ä»¶ã¯ãµããŒããããªããªããŸããã ãããç§ãèŠã€ããåé¿çã§ãïŒ
website:
depends_on:
- 'postgres'
build: .
ports:
- '3000'
volumes:
- '.:/news_app'
- 'bundle_data:/bundle'
entrypoint: ./wait-for-postgres.sh postgres 5432
postgres:
image: 'postgres:9.6.2'
ports:
- '5432'
wait-for-postgres.shïŒ
#!/bin/sh
postgres_host=$1
postgres_port=$2
shift 2
cmd="$@"
# wait for the postgres docker to be running
while ! pg_isready -h $postgres_host -p $postgres_port -q -U postgres; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
>&2 echo "Postgres is up - executing command"
# run the command
exec $cmd
@ slava-nikulinã«ã¹ã¿ã ãšã³ããªãã€ã³ãã¯äžè¬çãªæ¹æ³ã§ãããã³ã³ããã§ã¢ããªãéå§ããåã«å¿ èŠãªãã¹ãŠã®æ¡ä»¶ãå®çŸ©ããã³ç¢ºèªããæ¹æ³ã¯ãã»ãŒå¯äžã®ïŒDockerãã€ãã£ãïŒæ¹æ³ã§ãã
çå®ã¯å€ãã®è°è«ãããããã«ã¹ãã§ãã¯ãšãã€ãã£ãã«çµ±åããŠã¹ã¿ãŒãã¢ããã泚æããããã®æ¡ä»¶ä»ããµããŒãã®2.xãµããŒãã¯éââåžžã«å¿ èŠãªãµããŒãã ã£ããšæããŸãã Dockerã¯ãã³ã³ãããŒã®ããŒã«ã«ãããããã€ãã£ãã«ãµããŒãããŠããŸããããµããŒãããŠããå Žåã¯ãããšãã°kubernetesãã»ãã³ãã£ã¯ã¹ãæäŸããã®ãšåãããã«ãåæ§ã®äœããå床ãµããŒãããå¿ èŠããããŸãã
Docker 3.xã¯ãswarmãµããŒããcomposeã«çµã¿èŸŒãããã®ã·ãªãŒãºã§ãããããåæ£ã®æ§è³ªã念é ã«çœ®ããŠãå€æ°ã®ãªãã·ã§ã³ãåé€ãããŸããã
2.xã·ãªãŒãºã¯ãå ã®æ§æ/ããŒã«ã«ããããžæ©èœãä¿æããŸãã
äœæ²ã®æ©èœã»ãããæžãããŠçŸ€ããäœæ²ã«åŒ·å¶ããããšã¯æè¿ãã¹ãæ¹åã§ã¯ãªããããDockerã¯ããã2ã€ã®ããŒãžã§ã³ãããŒãžããæ¹æ³ãç解ããå¿ èŠããããŸãã
2017幎5æ10æ¥ã«ã¯ã20:15ã§ãã¹ã©ãNikulinã®[email protected]ã¯æžããŸããïŒ
æ®å¿µãªãããv3ã§ã¯æ¡ä»¶ã¯ãµããŒããããªããªããŸããã ãããç§ãèŠã€ããåé¿çã§ãïŒ
ãŠã§ããµã€ãïŒ
depends_onïŒ
-'postgres '
ãã«ãïŒã
ããŒãïŒ
-ã3000ã
ããªã¥ãŒã ïŒ
-'ãïŒ/ news_app'
-'bundle_dataïŒ/ bundle '
ãšã³ããªãã€ã³ãïŒ./ wait-for-postgres.sh postgres 5432postgresïŒ
ç»åïŒ ' postgresïŒ9.6.2 '
ããŒãïŒ
-'5432 '
wait-for-postgres.shïŒïŒ/ bin / sh
postgres_host = $ 1
postgres_port = $ 2
cmd = "$ @"postgresdockerãå®è¡ãããã®ãåŸ ã¡ãŸã
ãªããïŒ pg_isready -h $ postgres_host -p $ postgres_port -q -U postgres; è¡ã
ïŒ2 echo "Postgresã¯å©çšã§ããŸãã-ã¹ãªãŒãããŠããŸã"
ç¡ç 1
å®äºïŒ2 echo "Postgresãèµ·åããŠããŸã-ã³ãã³ããå®è¡ããŠããŸã"
ã³ãã³ããå®è¡ããŸã
exec $ cmd
â
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããããã¹ã¬ããããã¥ãŒãããŠãã ããã
ç§ã¯ãã®ãããªããšãããããšãã§ããŸãã
// start.sh
#!/bin/sh
set -eu
docker volume create --name=gql-sync
echo "Building docker containers"
docker-compose build
echo "Running tests inside docker container"
docker-compose up -d pubsub
docker-compose up -d mongo
docker-compose up -d botms
docker-compose up -d events
docker-compose up -d identity
docker-compose up -d importer
docker-compose run status
docker-compose run testing
exit $?
// status.sh
#!/bin/sh
set -eu pipefail
echo "Attempting to connect to bots"
until $(nc -zv botms 3000); do
printf '.'
sleep 5
done
echo "Attempting to connect to events"
until $(nc -zv events 3000); do
printf '.'
sleep 5
done
echo "Attempting to connect to identity"
until $(nc -zv identity 3000); do
printf '.'
sleep 5
done
echo "Attempting to connect to importer"
until $(nc -zv importer 8080); do
printf '.'
sleep 5
done
echo "Was able to connect to all"
exit 0
// Dockeräœæãã¡ã€ã«å
status:
image: yikaus/alpine-bash
volumes:
- "./internals/scripts:/scripts"
command: "sh /scripts/status.sh"
depends_on:
- "mongo"
- "importer"
- "events"
- "identity"
- "botms"
ç§ãåæ§ã®åé¡ãæ±ããŠããŸãããå°ãç°ãªããŸãã MongoDBãã¬ããªã«ã»ãããèµ·åããŠåæåããã®ãåŸ
ã€å¿
èŠããããŸãã
Dockerã§ãã¹ãŠã®æé ãå®è¡ããŠããŸãã ã€ãŸããã¬ããªã«ã»ããã®äœæãšèªèšŒã ããããã¬ããªã«ã»ããã®ãã©ã€ããªããŒãã«æ¥ç¶ããå¿
èŠãããå¥ã®Pythonã¹ã¯ãªããããããŸãã ããã§ãšã©ãŒãçºçããŸãã
docker-compose.txt
Dockerfile.txt
ãããŠPythonã¹ã¯ãªããã§ç§ã¯ãã®ãããªããšãããããšããŠããŸãfor x in range(1, 4):
client = MongoClient(host='node' + str(x), port=27017, username='admin', password='password')
if client.is_primary:
print('the client.address is: ' + str(client.address))
print(dbName)
print(collectionName)
break
ããããã®ã«èŠåŽããŠããŸãã誰ããäœãèããæã£ãŠããŸããïŒ
@patrickml docker composeã䜿çšããªãå Žåã
build_all.cqlãå®è¡ããã«ã¯ããcqlshããå¿
èŠã§ãã ãã ãããcqlshãã¯æºåãã§ããŠããŸãã...æºåãã§ãããŸã§60ç§åŸ
ã€å¿
èŠããããŸãã
FROM store / datastax / dse- serverïŒ5.1.8
USERã«ãŒã
apt-getupdateãå®è¡ããŸã
apt-get install -yvimãå®è¡ããŸã
db-scripts-2.1.33.2-RFT-01.tar / docker / cms /ãè¿œå ããŸã
entrypoint.sh/entrypoint.shãã³ããŒããŸã
WORKDIR / docker / cms / db-scripts-2.1.33.2 /
cqlsh -fbuild_all.cqlãå®è¡ããŸã
ãŠãŒã¶ãŒdse
=============
ã¹ããã8/9ïŒcqlsh -fbuild_all.cqlãå®è¡ããŸã
---> 08c8a854ebf4ã§å®è¡
æ¥ç¶ãšã©ãŒïŒïŒ 'ãµãŒããŒã«æ¥ç¶ã§ããŸãã'ã{'127.0.0.1'ïŒerrorïŒ111ã "[ïŒ '127.0.0.1'ã9042ïŒ]ã«æ¥ç¶ããããšããŸãããæåŸã®ãšã©ãŒïŒæ¥ç¶ãæåŠãããŸãã"ïŒ}ïŒ
ã³ãã³ã '/ bin / sh -c cqlsh -f build_all.cql'ããŒã以å€ã®ã³ãŒããè¿ããŸããïŒ1
å¿ èŠãªãã®= var-lib-libvirt.mount var-lib-libvirt-images-ram.mount
æãåèã«ãªãã³ã¡ã³ã
ãããç§ã¯ãã®ãããªãã®ã«èå³ãããã§ããã-ããã«ã€ããŠãã£ãšæ©ãæçš¿ããããšãæå³ããŸãã
ç§ãã¡ããã®ãŠãŒã¹ã±ãŒã¹ãä¿®æ£ãããšç§ãèããããšãã§ããæå°ã®åœ±é¿ãã¿ãŒã³ã¯ã次ã®ããã«ãªããŸãã
ãªã³ã¯ãšåæ§ã®å€ã®ã»ãã³ãã£ã¯ã¹ã䜿çšããŠãfig.ymlã®æ°ããããŒãšããŠãwaitããè¿œå ããŸãã Dockerã¯ãããåææ¡ä»¶ãšããŠæ±ãããã®ã³ã³ãããŒãçµäºãããŸã§åŸ ã£ãŠããç¶è¡ããŸãã
ãããã£ãŠãç§ã®dockerãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
ã¢ããªãå®è¡ãããšããã¹ãŠã®ãªã³ã¯ã³ã³ãããŒãèµ·åããåŸ æ©ã³ã³ãããŒãå®è¡ãããåŸ æ©ã³ã³ãããŒïŒinitdbïŒãçµäºãããšãå®éã®ã¢ããªã³ã³ãããŒã«ã®ã¿é²ã¿ãŸãã initdbã¯ãããŒã¿ããŒã¹ã䜿çšå¯èœã«ãªãã®ãåŸ ã£ãŠãããåæå/移è¡/ãã®ä»ãå®è¡ããŠçµäºããã¹ã¯ãªãããå®è¡ããŸãã
ãšã«ãããããã¯ç§ã®èãã§ãã