ããã«ã¡ã¯ã
å®è¡åŸã«ã³ãã³ããå®è¡ã§ããããã«ããã«ã¯ãYAMLã«ãonrunãã®ãããªãã®ããããšéåžžã«åœ¹ç«ã¡ãŸãã https://github.com/docker/docker/issues/8860ã«äŒŒãŠã
mongodb:
image: mongo:3.0.2
hostname: myhostname
domainname: domain.lan
volumes:
- /data/mongodb:/data
ports:
- "27017:27017"
onrun:
- mongodump --host db2dump.domain.lan --port 27017 --out /data/mongodb/dumps/latest
- mongorestore -d database /data/mongodb/dumps/latest/database
mongodbã®èµ·ååŸãdb2dump.domain.lanããã³ãããŠåŸ©å ããŸãã
ã³ã³ãããåæ¢ããŠããéå§ãããšãã¹ãçæ§ãç¶æããããã«onrunéšåã¯å®è¡ãããŸããã
2020幎6æ15æ¥ç·šé
5幎åŸãComposeã¯ä»æ§ããæšæºåãããŸããã
https://github.com/compose-spec/compose-spec/issues/84ã確èªããŠ
ãããã¯Dockerfileã®ã¹ãããã§ããå¿ èŠããããšæããŸã
FROM mongo:3.0.2
ADD data/mongodb/dumps/latest /data/mongodb/dumps/latest
RUN mongorestore -d database /data/mongodb/dumps/latest/database
ããããã°ãåæ§ç¯æã«ãã£ãã·ã¥ããããšãã§ããŸãã
@dnephinã«æè¬ããŸãã
ãã¡ãããDockerfileãäœæããŠãã€ã¡ãŒãžã®ä»£ããã«ãã«ãã§äœ¿çšããããšããdockerexecã䜿çšããããšãã§ããŸãã
MongoDBã¯åãªãäŸã§ãããmysqlãšã¢ã«ãŠã³ãã®äœæããŸãã¯rabbitmqãšãã¥ãŒã®äœæãªã©ã§ãã®äŸã䜿çšã§ããŸãã
onrun
ã¯ãã³ã³ããžã·ã§ã³ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®æè»æ§ãå¯èœã«ããã³ã³ããŒãºã¯ãªã³ã©ã³ãªã¹ããèªã¿åããåã¢ã€ãã ã«docker exec
ããŸãã
éèŠãªã®ã¯ãDockerfileãŸãã¯ã³ã³ãããŒã®èµ·åã¹ã¯ãªããã®ããããã§ã³ãã³ããå®è¡ã§ããå Žåã¯docker-compose.yml
docker exec
ã«ã³ãã³ããé
眮ããå¿
èŠããªããšããããšã§ããã©ã¡ããã_not_ã®å Žåã«ã³ã³ãããŒããã䟿å©ã«ããŸãã Composeã§å®è¡ãããŠããŸãã
ãŸãã¯ãé©åãªdocker
ããã³docker-compose
ã³ãã³ããå®è¡ããã·ã§ã«ã¹ã¯ãªãããŸãã¯Makefileã䜿çšããŠã¢ããªãèµ·åããŸãã
ãã®æ©èœã¯ããããã®ãããããå®è¡ããããã倧ããªäŸ¡å€ãè¿œå ãããªãéããComposeã«è¿œå ãã䟡å€ã¯ãããŸããããŸããããªããåŒçšãããŠãŒã¹ã±ãŒã¹ã«ã¯è¿œå ã§ããªããšæããŸãã
ãããã£ãŠãDockerã管çããã«ã¯ãã¹ã¯ãªãããŸãã¯Makefileã䜿çšããããšããå§ãããŸãã ã§ã¯ããªãcomposeãäœæãããã®ã
ïŒ ã¹ã¯ãªããã䜿çšããŠã³ã³ããã®ç®¡çãã¹ã±ãŒãªã³ã°ãªã©ãè¡ãããšãã§ããŸã|| dockerfileïŒ
ããããŸããããã®äŸãåãäžããŸããããã¯ãCIããã»ã¹ã§ã¢ããªã±ãŒã·ã§ã³ãã¹ãç°å¢ããããã€ããããã«äœ¿çšãããã®ã§ãã
rabbitmq:
image: rabbitmq:3.5.1-management
environment:
RABBITMQ_NODENAME: rabbit
hostname: rabbitmq
domainname: domain.lan
volumes:
- /data/rabbitmq/db:/var/lib/rabbitmq
ports:
- "5672:5672"
- "15672:15672"
- "25672:25672"
- "4369:4369"
mongodb:
image: mongo:3.0.2
hostname: mongo
domainname: domain.lan
volumes:
- /data/mongodb:/data
ports:
- "27017:27017"
appmaster:
image: appmaster
hostname: master
domainname: domain.lan
environment:
...
ports:
- "80:80"
- "8080:8080"
links:
- mongodb
- rabbitmq
celery:
image: celery
hostname: celery
domainname: domain.lan
environment:
...
links:
- rabbitmq
ã³ã³ãããèµ·åããããmongodbãããããžã§ãã³ã°ããrabbitmqã§ãã¥ãŒãšã¢ã«ãŠã³ãã管çããå¿ èŠããããŸã
ä»æ¥ç§ãããŠããã®ã¯ã次ã®ã¹ã¯ãªããã§ãã
#!/bin/bash
PROJECT=appmaster
docker-compose -f appmaster.yml -p appmaster up -d
docker exec appmaster_rabbitmq_1 rabbitmqctl add_user user password
docker exec appmaster_rabbitmq_1 rabbitmqctl add_vhost rabbitmq.domain.lan
docker exec appmaster_rabbitmq_1 rabbitmqctl set_permissions -p rabbitmq.domain.lan password ".*" ".*" ".*"
docker exec appmaster_mongodb_1 mongodump --host mongo-prd.domain.lan --port 27017 --out /data/mongodb/dumps/latest
docker exec appmaster_mongodb_1 mongorestore -d database /data/mongodb/dumps/latest/database
onrun
åœä»€ã䜿çšãããšã docker-compose -f appmaster.yml -p appmaster up -d
çŽæ¥äœæã§ããŸãã
ãããŠymlãã¡ã€ã«ãããèªã¿ããããªããŸã
rabbitmq:
...
onrun:
- rabbitmqctl add_user user password
- rabbitmqctl add_vhost rabbitmq.domain.lan
- rabbitmqctl set_permissions -p rabbitmq.domain.lan password ".*" ".*" ".*"
mongodb:
...
onrun:
- mongodump --host mongo-prd.domain.lan --port 27017 --out /data/mongodb/dumps/latest
- mongorestore -d database /data/mongodb/dumps/latest/database
ããã¯ããªã䟿å©ã§ããŠãŒã¹ã±ãŒã¹ã解決ããŸãã
ïŒ+1ïŒ
ããã«ãããCDãã€ãã©ã€ã³ã®äžéšãšããŠã®ã²ãŒããã¹ãã§docker-compose
ã䜿çšã§ããããã«ãªããŸãã
ïŒ+1ïŒ
ããã¯ïŒ877ãïŒ1341ãïŒ468ïŒããã³ä»ã®ããã€ãïŒã®è€è£œã§ãã
ããããµããŒãããæ£ããæ¹æ³ã¯ïŒ1510ã§ãããå¿ èŠãªã€ãã³ããçºçãããšãã«å€éšããŒã«ãæäœãå®è¡ã§ããããã«ããããšã ãšæããŸãã
éè€ãšããŠéãã
ããã¯éåžžã«äŸ¿å©ã§ãã ããããbashã¹ã¯ãªããã§ãããè¡ãããšãã§ããããšããè°è«ãããããŸããã ãã¡ãããbashã¹ã¯ãªããã§ãããè¡ãããšãã§ããŸãã Docker-composeãbashã¹ã¯ãªããã§è¡ããã¹ãŠã®ããšãå®è¡ããããšãã§ããŸãã ãã ããéèŠãªã®ã¯ããã¹ãç°å¢ãå¶åŸ¡ããåäžã®YAMLãã¡ã€ã«ããããåçŽãªdocker-compose up
ã³ãã³ãã§ã¹ãã³ã¢ããã§ãããšããããšã§ãã
ã·ã§ã«ã¹ã¯ãªãããMakefileã§å®è¡ã§ãã_ãã¹ãŠ_ãå®è¡ããã®ã¯Composeã®ä»»åã§ã¯ãããŸãããæçšæ§ãšèšåŒµã®åé¿ã®ãã©ã³ã¹ããšãããã«ãã©ããã«ç·ãåŒãå¿ èŠããããŸãã
ããã«ãComposeãã¡ã€ã«ã®éèŠãªç¹æ§ã®1ã€ã¯ãMacãLinuxãããã³Windowsãã·ã³ã§ãã£ãŠãããã·ã³éã§ããªã移æ€æ§ãããããšã§ãã Composeãã¡ã€ã«ã«ä»»æã®ã·ã§ã«ã³ãã³ããé 眮ã§ããããã«ãããšã移æ€æ§ãå€§å¹ ã«äœäžããŸãã
@aanandå
¬å¹³ãdocker exec
ãå®è¡ã§ããããšã¯ãx-platã®éäºææ§ãèªåçã«æå³ããããã§ã¯ãããŸããã
è¬çœª-ãã®åé¡ãããã¹ããã·ã³ã§ã³ãã³ããå®è¡ããããšã«é¢ãããã®ãšèª€è§£ããŸããã ããã§ããç§ã®æåã®ãã€ã³ãã¯ç«ã£ãŠããŸãã
ç§ã¯ããªãã®ãã€ã³ã@aanandãç解ããŠããŸãã ãã§ã«docker-compose
ã¯ã command
ã expose
ããã«ãéåžžã®docker
ãšã³ãžã³ããã§ã«è¡ã£ãŠããã®ãšåãããšãããããè¡ã£ãŠããã®ã§ãç§ã«ã¯ç¯å²å€ã§ã¯ãªãããã§ãã expose
ã ports
ã build
ãªã©ã exec
æ©èœãè¿œå ãããšã docker-compose
ã«ããã«ãã¯ãŒãè¿œå ãããèšå®ã®ããã®çã®ã¯ã³ã¹ãããã·ã§ããã«ãªããŸããéçºç°å¢ãã¢ããããŸãã
@aanandå€ãã®æ¬çªç°å¢ã«éåžžã«è¿ãããŒã¿ãæã€ããšã§ãã DBããã®ãã³ãã®ããã«ã ç§ã¯1幎åã«ãã®ãã±ãããäœæããŸããããdockercomposeã§ã¯äœãåããŸããã
ãããã£ãŠãããã€ãã®execãå®è¡ããããã ãã«MakefileãŸãã¯Bashcriptãææ¡ããŸãhttps://github.com/docker/compose/issues/1809#issuecomment -128073224
ç§ãæåã«ææ¡ããã®ã¯ãã¹ãçæ§ãç¶æããonrun
ïŒãŸãã¯oncreateïŒã§ãã æåã®ã¹ã¿ãŒãã§å®è¡ããã ãã§ãã ã³ã³ãããŒãåæ¢ãŸãã¯äžæåæ¢ãããŠããå Žåãæ°ããéå§ã¯onrunïŒãŸãã¯oncreateïŒã§å®è¡ãããŸãã
æåŸã«ãç§ã®gitãªããžããªã«ã¯ãã¹ãç管çãåããäœæãã¡ã€ã«ãdockerfileãããã³makefileããããŸãïŒmakefileãç¶æ ãã¡ã€ã«ãäœæããå¯èœæ§ããããŸãïŒã 倩æïŒ
command
ã expose
ãªã©ãšexec
éã«ã¯å€§ããªéãããããŸãã æåã®ã°ã«ãŒãã¯ã³ã³ãããªãã·ã§ã³ã§ã exec
ã¯ã³ãã³ã/ APIãšã³ããã€ã³ãã§ãã ããã¯å¥åã®é¢æ°ã§ãããã³ã³ããã®äœæé¢æ°ã®ãªãã·ã§ã³ã§ã¯ãããŸããã
ComposeïŒhttps://github.com/docker/compose/issues/1809#issuecomment-128059030ïŒã䜿çšããŠãããå®çŸããã«ã¯ããã§ã«ããã€ãã®æ¹æ³ããããŸãã onrun
ãã§ã«ååšããŸãã command
ã§ãã
ããŒã¿ããŒã¹ããã®ããŒã¿ã®ãã³ããŸãã¯ããŒãã®ç¹å®ã®åé¡ã«é¢ããŠã¯ããããã¯ãããã¯ãŒã¯ãããŒããŸãã¯ããã«ãèªååãã¿ã€ãã®ã¿ã¹ã¯ã§ãããéåžžã¯Makefileã§å®è¡ãããŸãã ç§ã¯ãã³ã³ããå ã®ãã¹ãŠã®ã¿ã¹ã¯ãå®è¡ããdobiãšåŒã°ãããŸãã«ãããã®ãŠãŒã¹ã±ãŒã¹ã®ããã®ããŒã«ã®ãããã¿ã€ããäœæããŠããŸããã ãŸããComposeãšéåžžã«ããçµ±åãããŠããŸãã Makefileã«æºè¶³ã§ããªãå Žåã¯ãè©ŠããŠã¿ãããšã«èå³ããããããããŸããã ç§ã¯ããŒã¿ããŒã¹ã®åæå/ããŒãã®ãŠãŒã¹ã±ãŒã¹ã®äŸã«åãçµãã§ããŸãã
@dnephin onrun
ã¯ãã¹ãçæ§ãèŠéããŠãããããåçŽãªcommand
ã¯ãããŸããã
æ³åããŠã¿ãŸãããã ã³ã³ããã®äœææã«create
ã§ãããå床å®è¡ãããããšã¯ãããŸããïŒãã³ããšåŸ©å
ïŒã
exec:
create:
- echo baby
destroy:
- echo keny
start:
- echo start
stop:
- echo bye
ããã«äŸãå¿ èŠãªå ŽåïŒ
dobiã«æè¬ããŸãããcomposeã匷åããããŒã«ãäœæããå¿ èŠãããå Žåãcomposeã¯è¯ããªãã®ã§ããã匷åãªããŒã«ã䜿çšããããšããå§ãããŸãã
ãã ããäœæã匷åããããŒã«ãäœæããå¿ èŠãããå Žåãäœæã¯äžé©åã§ããããã匷åãªããŒã«ã䜿çšããããšããå§ãããŸãã
ããã¯ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã匷åããããã®ã¢ããªã±ãŒã·ã§ã³ãå¿ èŠãªå ŽåãOSãæªãããšèšã£ãŠãããããªãã®ã§ãã 1ã€ã®ããŒã«ã§ãã¹ãŠãå®è¡ããå¿ èŠã¯ãããŸããã UNIXå²åŠã¯ã1ã€ã®ããšãå®è¡ãããããããŸãå®è¡ããããšã§ãã ãããç§ãã¡ãããã§è¡ã£ãŠããããšã§ãã Composeã¯ããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã®ã³ã³ãããŒã調æŽããããšãã1ã€ã®ããšãè¡ããŸãã ãã«ãèªååããŒã«ã§ã¯ãããŸããã
ããã¯ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã匷åããããã®ã¢ããªã±ãŒã·ã§ã³ãå¿ èŠãªå ŽåãOSãæªãããšèšã£ãŠãããããªãã®ã§ãã 1ã€ã®ããŒã«ã§ãã¹ãŠãå®è¡ããå¿ èŠã¯ãããŸããã UNIXå²åŠã¯ã1ã€ã®ããšãå®è¡ãããããããŸãå®è¡ããããšã§ãã ãããç§ãã¡ãããã§è¡ã£ãŠããããšã§ãã
ãããŒãç§ãã¡ã¯æé«ã®æªæã«éãããšæããŸãã
æ®å¿µãªãããåçŽãªåå©çšå¯èœãªã³ã³ããŒãã³ãã¯ãç©äºãã©ã®ããã«æ©èœããŠãããã§ã¯ãããŸããã Dockerã¯çŸåšãã¯ã©ãŠããµãŒããŒãèµ·åããããã®ããŒã«ãã¯ã©ã¹ã¿ãªã³ã°çšã®ã·ã¹ãã ãããã³ããŸããŸãªæ©èœïŒã€ã¡ãŒãžã®æ§ç¯ãã€ã¡ãŒãžã®å®è¡ãã¢ããããŒããããŠã³ããŒããããã«ã¯ãªãŒããŒã¬ã€ãããã¯ãŒã¯ïŒãæ§ç¯ããŠããŸãããããã¯ãã¹ãŠãäž»ã«ãµãŒããŒäžã§ã«ãŒããšããŠå®è¡ããã1ã€ã®ã¢ããªã·ãã¯ãã€ããªã«ã³ã³ãã€ã«ãããŸãã ã æšæºã®ã³ã³ãããããã§ã¹ããåé€ãããŸããã Dockerã³ã³ãããŒã«ã€ããŠè©±ãã®ããããŠãDockerãã©ãããã©ãŒã ã«ã€ããŠè©±ãå§ããå¿ èŠããããŸãã ããã¯ãç§ãã¡ãæ³åããŠããåçŽãªæ§æå¯èœãªæ§æèŠçŽ ã«ã¯ãªããŸããã
ããã§ãUNIXå²åŠãç¶æããããã«ãdockercomposeããdockerã¢ããªã·ãã¯ãã€ããªã®Goinsideã«æžã蟌ãŸããããšã¯æ±ºããŠãªãããšãä¿èšŒã§ããŸããïŒ https://www.orchardup.com/blog/orchard-is-joining-docker
ãã®åœåã®ç®æšã«åãã£ãŠç¶ç¶ããããã«ãDockerã«åå ããŸãã ãšããããDockerããããŸã§ã«èŠãäžã§æé«ã®éçºãšã¯ã¹ããªãšã³ã¹ã«ããããã«ãFigã䜿çšããããšãšãFigã®æè¯ã®éšåãDockerèªäœã«çµã¿èŸŒãããšã®äž¡æ¹ã«åãçµãã§ãããŸãã
ã€ãŸããcomposeã§ãã£ã¯ã¹ãã£ãããŒããããããªããšãããæ¹æ³ã¯ãããŸããã ç§ã¯é©ãããšèšããªããã°ãªããŸããã
å
¬åŒã®æ¹æ³ã¯ããã£ã¯ã¹ãã£ã®ããŒããæ¬çªã³ã³ããã«è¿œå ããããšã§ããïŒ ãŸãã¯ãäœæãã¡ã€ã«ã®åšãã«ã·ã§ã«ã¹ã¯ãªãããèšè¿°ããŸããïŒ åŸè
ã®å Žåã以åãšåãããã«ãdockerrunããå®è¡ããããšãã§ããŸãã
@discordianfish ãã©ãããããããCI / CDãšã³ãžãã¢ãå°ãªããšãéåžžã«åºæ¬çãªã¬ãã«ã§ã©ã€ããµã€ã¯ã«ã€ãã³ããšãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãåŠçã§ããå¿ èŠããããšããäºå®ã«èª°ããç®ãèŠãŸããšãããã
çµå±ã®ãšããããã«ãæã«å®è¡ããå¿ èŠãããããšã¯ãå®è¡æã«å¿ èŠãªããšãšã¯ç°ãªãå¯èœæ§ããããå®è¡æã«å¿ èŠãªããšã¯ãå€ãã®å Žåããããã€ã¡ã³ãç°å¢ã«ãã£ãŠç°ãªããŸã...
upãã³ã³ãããäœæããã®ãéå§ããã®ããå€éšã¹ã¯ãªããã«èªèãããã®ã¯ãäžçš®ã®é¢åãªäœæ¥ã§ã...
ãããŠããããã¯ããã€ãã®ã©ã€ããµã€ã¯ã«ããã¯+ã³ãã³ã+ç°å¢å€æ°ã圹ç«ã€ãããããªããã®ã§ãã
ããªãã¯ããããµãŒãã¹ç®¡çãã¬ãŒã ã¯ãŒã¯ãä»ã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã§èŠãŸã...ãªãdocker-composeã§ã¯ãªãã®ã§ããïŒ
https://github.com/dnephin/dobiã«èå³ããããããããŸãããããã¯ããããã®ã¯ãŒã¯ãããŒçšã«èšèšããããç§ãåãçµãã§ããããŒã«ã§ãã
@dnephinã¯ãããŒã«ã§ãã®åé¡ãã¹ãã ããã®ããããŸãã 以åã«ããªãã®ã³ã¡ã³ããèŠãŠãçãã¯åãã§ãã Makefile / bashã¯ãããããnçªç®ã®ãmytoolenhancedockerããããåªããŠããŸãã
建èšçãªã³ã¡ã³ãããããšãããããŸãã ç§ã¯8ã¶æåã«ãã®ã¹ã¬ããã§ãã§ã«ããã«ã€ããŠèšåããŠããããšã«æ°ã¥ããŠããŸããã§ããã
Makefile / bashã«æºè¶³ããŠãããªããããã¯çŽ æŽãããããšã§ãïŒ ããªãã®åé¡ã解決ãããŠããããã§ãã
ãã®ãããã¯ã«é¢é£ããã³ã¡ã³ããããã«è¿œå ããŸããïŒ https ïŒ
ããã«ã¯@dnephin ãç§ã®ã³ã¡ã³ããé©çšã§ããŸãïŒ
ãšãŠãæ²ããã®ã§ããã®åé¡ã¯é²åãžã®äžå¿æ§ã®ããã«éããããŸããïŒå€±æïŒ
Dockerãäœæããããšã®æ倧ã®äŸ¡å€ã¯ãæšæºåã§ã
ããããã€ã³ãã§ãã Docker Composeã䜿çšããã«.shãã¡ã€ã«ãªã©ãããã ãæžã蟌ãããšãã§ããã°ãDockerComposeãååšããã®ã¯ãªãã§ããã ïŒæ··ä¹±ïŒ
@ shin-ãèšã£ãããã«ãããã¯å€§ããªä»äºã ãšç解ã§ããŸãã
æ®å¿µãªããããããžã§ã¯ãã®ãã®æ®µéã§ãµããŒãããã«ã¯è² æ ã倧ããããŸã
ïŒããŒãïŒ
ãããããã¹ã¯ãªãããäœæããããšã¯ãããããããã¯é£ããããã®ã§ãäœæããã€ããã¯ãªãããšããæå³ã§ã¯èšããŸããã
ãããé£ããå Žåã¯ããããªãã®ã¢ã€ãã¢ã¯é¢çœããããã€ãã®ããŒãºãæºãããŠããŸããããããè¡ãã®ã¯éåžžã«é£ãããçŸæç¹ã§ã¯ãããè¡ãããã®ãªãœãŒã¹ããããŸãã...å€åããªãã¯ãããéçºããŠå°ããããšãã§ããŸããïŒãã«ãªã¯ãšã¹ãããŸãã¯ãã®ãããªãã®ïŒbulbïŒ
ïŒ1341ã§ãç§ã¯ãã®ã¿ãã§ã®æžã蟌ã¿ãžã®éãåç
§ããŠãã ããdocker-compose.yml
ã®ãããªã³ãã³ãnmp install
ããªããããã ãããšåãããã«ãïŒã³ã³ããäœæã®ãããªïŒããã€ãã®ã€ãã³ãã®åãŸãã¯åŸã«å®è¡ãããã ããdocker exec <container id> npm install
ããšãã°
ã«ã¹ã¿ã NodeJSã€ã¡ãŒãžããããããããäœæãããã³ã³ãããŒã§docker-compose up --build
ã䜿çšããŠnpm install
ãå®è¡ããããšæããŸãã
ç§ã®åé¡ã¯æ¬¡ã®ãšããã§ããã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¯ã³ã³ããã«è¿œå ãããã docker-compose.yml
ã§å®çŸ©ãããããªã¥ãŒã ã§ã³ã³ããã«ããŠã³ããããŸãã
custom-node:
build: ../my_app-node/
tty: true
#command: bash -c "npm install && node"
volumes:
- /var/www/my_app:/usr/share/nginx/html/my_app
ãã®ãããäŸåé¢ä¿ããã§ãã¯ããããã®ã¢ããªã±ãŒã·ã§ã³ã³ãŒããå¿
èŠãªãããDockerfileã§npm install
ãå®è¡ã§ããŸããã ç§ã¯ããã§åäœã説æããŸããïŒ http ïŒ
npm install
ãå®è¡ããã«ã¯ãåé¿çã§ããcommand
ã¹ããŒãã¡ã³ãã䜿çšããå¿
èŠããããŸãã
command: bash -c "npm install && node"
ããã¯æ¬åœã«ãããã§ã¯ãããŸããïŒå€±æããŸããïŒãããŠç§ã¯ã¢ã«ãã€ã³ããŒãžã§ã³ã§å®è¡ããããšãã§ããŸããïŒåœŒãã¯ããã«Bashãã€ã³ã¹ããŒã«ãããŠããŸããïŒã
Docker Composeã¯ãã³ã³ãããŒã§execã³ãã³ããå®è¡ããæ¹æ³ãæäŸãããšæããŸãããeGïŒ
custom-node:
build: ../my_app-node/
tty: true
command: node
volumes:
- /var/www/my_app:/usr/share/nginx/html/my_app
exec:
- npm install
ããããããã§ã¯ãªããæ¬åœã«æ¬ ããŠãããšæããŸãïŒ
äœæã¯ãã¹ãçšã«èšèšãããŠãããšæã£ãŠããŸããããããããééã£ãŠãããããŒã«ã«éçºãªã©ãç®çãšããŠããŸããå€ç«ããã³ã³ãããããããžã§ã¯ãåããã¹ãæææš©ã®èå¥ã«äœ¿çšãããæ¹æ³ã®äžæ確ãªé¢ä¿ãªã©ãä»ã®ããã€ãã®èåããªéšåã«ééããŸãããåããã£ã¬ã¯ããªãªã©ã«è€æ°ã®äœæãã¡ã€ã«ãããå Žåã¯ã©ããªããŸããããããã£ãŠãå
šäœãšããŠãCIã«ã¯é©ããŠããªãããã§ãã
代ããã«ãkubeletãã¹ã¿ã³ãã¢ãã³ã§å®è¡ããŠãæ¬çªç°å¢ã®k8sãããã§ã¹ããCIã§åå©çšããããšãèšç»ããŠããŸãã ããã«ãããããã®æ¥çå€ãå¿
èŠã«ãªããŸãããå°ãªããšããã®æ¹æ³ã§ã¯ãdevãtestãprodã«åã宣èšã䜿çšã§ããŸãã
@ lucile-stickyé«å±±ã§sh -c
ã䜿çšã§ããŸãã
ããªããæãã§ããã®ã¯ãdocker-composeã®åœ¹å²ã§ã¯ãªãããã«ãèªååãã®ããã§ãã ãããèŠãããšã
2ã€ã®è³ªåïŒ
ãã®æ©èœã¯éåžžã«å¿ èŠã§ãïŒ
@ lucile-sticky
ãããDockerComposeã®åœ¹å²ã§ã¯ãªãã®ã¯ãªãã§ããïŒ
Composeã®åœ¹å²ã¯æ確ã«å®çŸ©ãããŠããããããã®æ©èœã¯å«ãŸããŠããªãããã§ãã
Composeã¯ããã«ãã³ã³ããã®Dockerã¢ããªã±ãŒã·ã§ã³ãå®çŸ©ããŠå®è¡ããããã®ããŒã«ã§ãã Composeã§ã¯ãComposeãã¡ã€ã«ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®ãµãŒãã¹ãæ§æããŸãã 次ã«ã1ã€ã®ã³ãã³ãã䜿çšããŠãæ§æãããã¹ãŠã®ãµãŒãã¹ãäœæããŠéå§ããŸã
ããããã¹ãŠã統治ããããŒã«ã1ã€ã ãã«ããããšãéèŠãªå ŽåãDocker Composeãå®è¡ã§ããªãã¿ã¹ã¯ãå®äºããããã«ä»ã®ããŒã«ã䜿çšããã®ã¯ãªãã§ããïŒ
ç§ãã¡ã¯ããããã¹ãŠãæ¯é
ãã1ã€ã®ããŒã«ã«ãªããããããŸããã ç§ãã¡ã¯UNIXå²åŠã«åŸãããåããã°ã©ã ã1ã€ã®ããšãããŸãè¡ãããã«ããããšä¿¡ããŠããŸããæ°ããä»äºãããã«ã¯ãæ°ããæ©èœãè¿œå ããŠå€ãããã°ã©ã ãè€éã«ããã®ã§ã¯ãªããæ°ããæ§ç¯ããŸãã
ãã®å²åŠã«å察ããããšã¯åé¡ãããŸããããDockerã§ãœãããŠã§ã¢ãéçºããæ¹æ³ã¯ããã§ãã
ç§ã¯ãã®åé¡ãäœæããŸãã2015幎8æã«ãæ¯å¹Žèª°ããã³ã¡ã³ããè¿œå ããåã質åãšåãåçãç¹°ãè¿ããŸãïŒ
@ shin-
ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã§ããã«ãããšãããããžã§ãã³ã°ããåé¢ããããšã¯ã§ããŸããã
ããšãã°ãããªãã¯ãããã®1ã€ãç¥ã£ãŠãããããããŸããïŒ
ãµãŒãã¹ãæ§æãããšãã¯ããããããããžã§ãã³ã°ããå¿ èŠããããŸãã Tomcatããããã€ããå Žåã¯ãæŠäºã§ããããžã§ãã³ã°ããå¿ èŠããããŸããDBãäœæããå Žåã¯ãã³ã³ãããŒãã©ã®ããã«èµ·åããå¿ èŠããããã«é¢ä¿ãªããããŒã¿ãªã©ãæ¿å ¥ããå¿ èŠããããŸãïŒã€ã¡ãŒãžã¡ã³ãããŒã«ç®¡çãããŸãïŒã Composeã®å Žåã®ãããããžã§ããŒãã®äž»ãªç®çã¯ããã³ã³ãããŒãéå§ãããã®ããšãã³ã³ãããŒãããããžã§ãã³ã°ãããã®ãã®éã®èª€è§£ãé¿ããããšã§ãã
äœæããã¥ã¡ã³ãã§ã®åŒçšã®ããã«ããäœæã§ã¯ãäœæãã¡ã€ã«ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®ãµãŒãã¹ã次ã«ã1ã€ã®ã³ãã³ãã䜿çšããŠãæ§æãããã¹ãŠã®ãµãŒãã¹ãäœæããŠéå§ããŸãã
Unixå²åŠïŒ ç¬ãããŠã ãã®å·ã§è¡ã£ãã®ãšåãåçã瀺ããŸãhttps://github.com/docker/compose/issues/1809#issuecomment-237195021 ã
Unixå²åŠã§ãmobyããã©ã®ããã«é²åãããèŠãŠã¿ãŸãããã
@ shin- docker-composeã¯ãæ³ååã®ç¯å²ã«ãã£ãŠUnixå²åŠã«æºæ ããŠããŸããã docker-composeãUnixå²åŠã«æºæ ããŠããå Žåãbuildãupãrmãstartãstopãªã©ã®ããããã«åå¥ã®ã³ãã³ãããããããããã«äžè²«ããŠåäœãã䜿çšå¯èœãªstdinãstdoutãããã³stderrããããŸãã System VãHP-UXãAIXãSolarisãLinuxãªã©20幎以äžã®çµéšãæã€unixsysadminã¯èšããŸã
äœæ²ã®æŠèŠã«æ»ããŸããã
Composeã¯ããã«ãã³ã³ããã®Dockerã¢ããªã±ãŒã·ã§ã³ãå®çŸ©ããŠå®è¡ããããã®ããŒã«ã§ãã Composeã§ã¯ãComposeãã¡ã€ã«ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®ãµãŒãã¹ãæ§æããŸãã 次ã«ã1ã€ã®ã³ãã³ãã䜿çšããŠãæ§æãããã¹ãŠã®ãµãŒãã¹ãäœæããŠéå§ããŸãã
æçµçã«ãdocker-composeã¯ãdockerã€ã¡ãŒãžããäœæãããã³ã³ãããŒã«åºã¥ããŠãµãŒãã¹ã®ã°ã«ãŒãã管çããããã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã§ãã äž»ãªæ©èœã¯ãdocker-compose.ymlãã¡ã€ã«ã§å®çŸ©ããããcreateãããstartãããstopãããscaleããããã³ãremoveããµãŒãã¹ã§ãã
å€ãã®ãµãŒãã¹ã§ã¯ããããã®ã©ã€ããµã€ã¯ã«ã®å移è¡äžã«è¿œå ã®ã³ãã³ããå®è¡ããå¿ èŠããããŸãã ããŒã¿ããŒã¹ã¯ã©ã¹ã¿ãŒã®ã¹ã±ãŒãªã³ã°ã§ã¯ãå€ãã®å Žåãã¯ã©ã¹ã¿ãŒãžã®ã¡ã³ããŒã®åå ãŸãã¯ã¯ã©ã¹ã¿ãŒããã®ã¡ã³ããŒã®åé€ãå¿ èŠã«ãªããŸãã å€ãã®å ŽåãWebã¢ããªã±ãŒã·ã§ã³ã®ã¹ã±ãŒãªã³ã°ã§ã¯ãã¡ã³ããŒãè¿œå ãŸãã¯åé€ããããšãããŒããã©ã³ãµãŒã«éç¥ããå¿ èŠããããŸãã äžéšã®åå·çãªã·ã¹ãã 管çè ã¯ãããŒã¿ããŒã¹ãã°ã匷å¶çã«ãã©ãã·ã¥ããããŒã¿ããŒã¹ãã·ã£ããããŠã³ãããšãã«ãã§ãã¯ãã€ã³ããäœæããŸãã
ã»ãšãã©ã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã§ã¯ãç¶æ é·ç§»ã«å¯ŸããŠã¢ã¯ã·ã§ã³ãå®è¡ããå¿ èŠããããŸãã AWSã®ããŒã«ãGoogleã®ããŒã«ããã©ã¢ãã³ãã·ã§ããªã©ã«ãããŸãããã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã¹ããŒã¹ã«äœããã®ã®ã»ãšãã©ã«ã¯ãããçš®ã®ã©ã€ããµã€ã¯ã«ããã¯ããããŸãã
ããã¯ããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã§ãããç¶æ ã®å€åãèªèããŠããããšãèãããšãdocker-composeã®ç¯å²å ã«ãããšæããŸãã ã€ãã³ããå€éšã¹ã¯ãªããããŠãŒã¹ã±ãŒã¹ã«é©ããŠãããšã¯æããŸããã ãããã¯ã¹ãçã§ã¯ãªããã€ãã³ãã远跡ããããã«äœæãã次ã®ã2çªç®ã®ããµãŒãã¹ãèµ·åããã®ã¯ã¯ããã«å°é£ã§ãã ããã¯ãã³ã³ããã®å éšã§å®è¡ãããããã³ã³ããã®å€éšã§å®è¡ããããã¯ãå®è£ ã®è©³çŽ°ã§ãã
çµå±ã®ãšããã docker -composeã®ãŠãŒã¶ãŒã«ãã£ãŠè¡šæãããŠããæ¬åœã®ããŒãºãããã@ aanandã@ dnephinã@ shin-ã¯ãããåŽäžããŠããããã§ãã ãããããŒããããã«å«ãŸããŠããã®ãèŠããšããã§ãããã
ãã®ã¿ã€ãã®æ©èœã¯ãçŸåšããã¹ãããã³æ¬çªç°å¢ã§ã®ãããã€ã§ã®Dockerã®æ¡çšã劚ããŠããŸãã ç§ã¯ããããåŽäžãããã®ã§ã¯ãªããäœããã®æ¹æ³ã§å¯ŸåŠãããããšãæ¬åœã«æãã§ããŸãã
ããã¯ãšãŠã䟿å©ã ãšæããŸãïŒ
ç§ã«ãšã£ãŠã®åé¡ã¯ããµãŒãã¹bãå®è¡ããŠããdbã³ã³ãããŒBã«äŸåãããµãŒãã¹ 'a'ãå®è¡ããŠããã¢ããªã³ã³ãããŒAãããå Žåã§ãã 次ã«ãbãèšå®ãããŠããªãéããã³ã³ããã¯å€±æããŸãã
ç¬èªã®DockerfileãæžãçŽãã®ã§ã¯ãªããDockerããã€ã¡ãŒãžã䜿çšããããšæããŸãã ãã ããããã¯Aã倱æããã³ã³ãããäœæãããªãããšãæå³ããŸãã ãã以å€ã®å Žåã®å¯äžã®ãªãã·ã§ã³ã¯
@ lucile-stickyãšãŸã£ããåããŠãŒã¹ã±ãŒã¹ã䜿çšããŸããã
ç§ã®å Žåã¯@lekhnathã§ã docker-compose.yml
ã®command
ãªãã·ã§ã³ãç·šéããŠè§£æ±ºããŸããã
command: bash -c "npm install && node"
ããããããã¯ãã£ããéãTTã§ã
@ lucile-stickyãã ããããã¯ã³ã³ããã®Dockerfile
ã«èšå®ãããŠããã³ãã³ããç¡å¹ã«ããããšã«æ³šæããŠãã ããã ç§ã䜿çšããŠã«ã¹ã¿ã ã·ã§ã«ã¹ã¯ãªããã®å®è£
ã«ãã£ãŠãããåé¿åãvolumes
äœãã command
ã¹ã¯ãªããã¯ããã®å
ã«å«ããŠããããšãç§ããã«ãŒäœæ²ãã¡ã€ã«ã®å®è¡ã§CMD
ããDockerfile
ã
ãã®åé¡ã解決ãããã®ã¯ãªãã§ããïŒ _bashã¹ã¯ãªãããæžã_ãŸãã¯_ç§ãæžãããã®ããŒã«ã䜿çšãã_ã¯ããã®åé¡ã解決ããæ£åœãªçç±ã§ã¯ãããŸããã
ããã¯ãcomposeã䜿çšãããå€ãã®ãŠãŒã¹ã±ãŒã¹ã§å¿ èŠãšãããéåžžã«äŸ¿å©ã§éèŠãªæ©èœã§ãã
@dnephin initã¹ã¯ãªããã®å®è¡ã¯ãã³ã³ãããŒããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ãããã€ã¡ã³ãã®ç¯å²å€ã ãšæããŸããïŒ çµå±ã®ãšãããcomposeã¯ãDockerã§ãã«ãã³ã³ããã¢ããªã±ãŒã·ã§ã³ãå®çŸ©ããŠå®è¡ãããããšã§ãã
ããããªããããããŠããªãã®ãªãã誰ãã«ãããèŠãŠããããŸããã:)
ããã§äœãèµ·ãããªãã£ããšæããŸãã @ ahmet2mirã®äŸã®ããã«ãã³ãã³ããå®è¡ããã¿ã€ãã³ã°ãæžãåºãããšãã§ããã docker-compose
ãã¡ã€ã«å
ã®äœããã®æ©èœã確èªããããšæããŸãã
ãã®æ©èœãå®è£ ãããŠããªãã®ã¯éåžžã«æ²ããããšã§ãã
ãã®æ©èœãå®è£
ããŠãã ããããã¡ã€ã«ãã³ããŒããå¿
èŠã®ãããã©ã«ããŒã¯ã³ã³ãããŒã®åæååŸã«äœæããããããdocker-composeã®äœæåŸã«ãã¡ã€ã«ãèªåçã«ã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
ããããšã
ãã®æ©èœããŸã å®è£ ãããŠããªãã®ã¯çŽ æŽãããããšã§ãã
ããã¯@dnephinã®éåžžã«è²§åŒ±ãªåœ¢åŒã§ãã ããªãã¯ãã»ãšãã©ãèªå·±å®£äŒã®ããã«æããããã®ãããªéåžžã«æ±ããããŠããæ©èœã®å®è£ ãçŠæ¢ããŠãããäŒè©±ãç¶ããæ°ãããããŸããã
ç³ãèš³ãããŸãããããã以äžç©ãããªèšèªãèããããšã¯ã§ããŸããã§ããããã®æ©èœããªããããä»ã®å€ãã®éçºè ãããŒã ãšåæ§ã«ã¯ãŒã¯ãããŒãå°ãªããªãããã®åé¡ã®è§£æ±ºã«æ¯éãããããŠããŸãã
ãããããã§ã¯unix-way
ã«ããŸãããã
_Just_ïŒãã®åŸãå€éåïŒãã€ãdocker-compose up
ã®åã³ã³ããã«æšæºå
¥åCMD
ïŒ
ãã®ãããªyamlãã¡ã€ã«
services:
node:
command: sh -
ãããæ©èœãããã ããïŒ cat provision.sh | docker-compose up
ã³ã³ããã¯ãexec utingã®ãã®ã®ããã«ãç§ã¯äžç·ã«ã³ãã³ããæž¡ããããæšæºå
¥åãããæå¹ã«å©çšã衚瀺ãããŠããªãã§ãã
å¥ã®æ¹æ³ã¯æ¬¡ã®ãšããã§ãã
services:
node:
localscript: provision.sh
ããããžã§ãã³ã°ã®ãŠãŒã¹ã±ãŒã¹ã®99ïŒ ã解決ãããå°ãã·ã§ã«äžå¿ã§ããã
æå¹ãªãŠãŒã¹ã±ãŒã¹ããããããã«å¯Ÿããè³æ祚ãããããããã«ãããããã...ããã¯ãŸã æããã«åŠå®ãããŠããŸãã ç§ãããã«ããä»ã®å€ãã®äººãšåãããã«ããããéåžžã«åœ¹ç«ã€ãšæãã®ã¯æ®å¿µã§ãã
ç§ã®+1ãæ¢åã®+ã®å€§ããªã¹ã¿ãã¯ã«è¿œå ãã
...ããã«ãã1ã€+1ïŒ
ãã®æ©èœã«å¯Ÿãããã®ãããªèŠæ±ãããã°ããããå®è£
ããå¿
èŠããããšæããŸããããŒã«ã¯ç§ãã¡ã®ç®çãéæããã®ã«åœ¹ç«ã¡ãç§ãã¡ã®ç掻ãå°é£ã«ããªãããã«ããããæ圢ããå¿
èŠããããŸãã
ç§ã¯èª°ããåºå·ããå²åŠãç解ããŠããŸãããããçš®ã®ãããã¯ã³ãã³ãããè¿œå ããããšã¯åé¡ã§ã¯ãªãã¯ãã§ãã
+1 +1
ãã®æ©èœãåŸ ã€éã次ã®ã¹ã¯ãªããã䜿çšããŠåæ§ã®ã¿ã¹ã¯ãå®è¡ããŸãã
docker-start.sh
#!/usr/bin/env bash
set -e
set -x
docker-compose up -d
sleep 5
# #Fix1: Fix "iptable service restart" error
echo 'Fix "iptable service restart" error'
echo 'https://github.com/moby/moby/issues/16137#issuecomment-160505686'
for container_id in $(docker ps --filter='ancestor=reduardo7/my-image' -q)
do
docker exec $container_id sh -c 'iptables-save > /etc/sysconfig/iptables'
done
# End #Fix1
echo Done
@ reduardo7次ã«ã
@omeid ãããªãã¯æ£ããã§ãïŒ ç³ãèš³ãããŸããããåæ§ã®ã¿ã¹ã¯ãå®è¡ããããšã¯åé¿çã§ãã
@ reduardo7è¬çœªããå¿
èŠã¯ãããŸãããããªããæçš¿ãããã®ã¯ããããäœäººãã®äººã
ã«åœ¹ç«ã€ã§ãããã
å
ã®åé¡ã¯ãŸã æ®ã£ãŠãããã¯ããŒãºãã¹ãã§ã¯ãªãã£ããšææããŠããŸããã :)
@dnephinã®ã¹ã¿ã³ããç解ããŠããŸããããã§èª¬æããæ©èœã¯ãååã«ç°ãªãæ©èœã«çœ®ãæããããšãã§ããŸãã
ãããããã®ãããªãã¿ãŒã³ãé »ç¹ã«äœ¿çšãããå Žåã¯ãä»ã®äººãç°¡åã«äœ¿çšã§ããããã«ã¬ã€ãïŒãŸãã¯ããã€ãã®ãã¹ãïŒãæ瀺ããã®ã¯ã©ãã§ããïŒ
ãã®ãã¿ãŒã³ãé »ç¹ã«äœ¿çšã§ããããšã«ç°è«ã¯ãªãããã§ãã
@MaybeSå¯äžã®äžäžèŽã¯ã @ dnephinãã
@omeidã¯ã確ãã«ã
äœæ²ãäœããã®åœ¢ã®onrun
ãå®è¡ããæ¹æ³ãå¿
èŠãªä»æ¥ã®äŸ
version: "3.3"
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab'
environment:
GITLAB_OMNIBUS_CONFIG: |
# NOTE: this URL needs to be right both for users, and for the runner to be able to resolve :() - as its the repo URL that is used for the ci-job, and the pull url for users.
external_url 'http://gitlab:9090'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
ports:
- '9090:9090'
- '2224:22'
gitlab-runner:
image: gitlab/gitlab-runner:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ãããŠãã¡ãããã©ã³ããŒã¯ç»é²ãããŠããŸãã-ãããŠãããè¡ãã«ã¯ã
ãã®ãããdocker-composeã ãã§ãã«ãã³ã³ããã¢ããªã±ãŒã·ã§ã³ã®ãããã€ãå®çŸ©ãã代ããã«ãããã€ãã®äºæ¬¡çãªæ段ã䜿çšããå¿ èŠããããŸã-ãã®å Žåã¯...ããã¥ã¡ã³ãïŒ
export GL_TOKEN=$(docker-compose exec -u gitlab-psql gitlab sh -c 'psql -h /var/opt/gitlab/postgresql/ -d gitlabhq_production -t -A -c "SELECT runners_registration_token FROM application_settings ORDER BY id DESC LIMIT 1"')
docker-compose exec gitlab-runner gitlab-runner register -n \
--url http://gitlab:9090/ \
--registration-token ${GL_TOKEN} \
--executor docker \
--description "Docker Runner" \
--docker-image "docker:latest" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock \
--docker-network-mode "network-based-on-dirname-ew_default"
ããŒããç§ã¯äœããããã¯ããããšãã§ãããããããŸãããããã«ãã£ãŠç§ã¯ããã«ãŒãœã±ãããæã£ãŠããå¥ã®ã³ã³ãããæã£ãŠããŸãããããŠdocker exec's
äœãè³ãããã«ã¯æ¹æ³ããããŸã...ã
ããšãã°ã次ã®ããã«è¿œå ã§ããŸãã
gitlab-initializer:
image: docker/compose:1.18.0
restart: "no"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./gitlab-compose.yml:/docker-compose.yml
entrypoint: bash
command: -c "sleep 200 && export GL_TOKEN=$(docker-compose -p sima-austral-deployment exec -T -u gitlab-psql gitlab sh -c 'psql -h /var/opt/gitlab/postgresql/ -d gitlabhq_production -t -A -c \"SELECT runners_registration_token FROM application_settings ORDER BY id DESC LIMIT 1\"') && docker-compose exec gitlab-runner gitlab-runner register -n --url http://gitlab:9090/ --registration-token ${GL_TOKEN} --executor docker --description \"Docker Runner\" --docker-image \"docker:latest\" --docker-volumes /var/run/docker.sock:/var/run/docker.sock --docker-network-mode \"simaaustraldeployment_default\""
äœæãã¡ã€ã«ã«-gitlabã®æºåãããã«ã§ããŠããªããããäœããã®ã«ãŒã/åŸ
æ©ãå¿
èŠã§ãã- sleep 200
ã§ã¯äžååãªå ŽåããããŸãã
ã ãã-ããªãã¯docker-compose.yml
ãã®ãããªããçš®ã®ãã¿ãŒã³ãçŽæ¥ããã¯ããããšãã§ããŸã-ãããå人çã«ã¯ãããããããã£ãšã¯ãªãŒã³ãªãµããŒãã欲ããã§ã:)
@SvenDowideit onrun
ãã§ã«ååšãã entrypoint
ãŸãã¯cmd
ã§ãã
ãã®ç»åã®ãšã³ããªãã€ã³ãã¹ã¯ãªããã¯ãããã¯ãæäŸããŸãã $GITLAB_POST_RECONFIGURE_SCRIPT
ã¯ããã¹ãŠã®ã»ããã¢ãããå®äºããåŸã«å®è¡ãããã¹ã¯ãªããã®ãã¹ã«èšå®ã§ããŸãïŒç»åã®/assets/wrapper
ã
ç»åã«ãã®ããã¯ããªãå Žåã§ããç»åãæ¡åŒµããããšã§ããªãç°¡åã«è¿œå ã§ããŸãã
gitlabã®æºåãããã«ã§ããŠããªããããäœããã®ã«ãŒã/åŸ æ©ãå¿ èŠã§ãããã¹ãªãŒã200ã§ã¯äžååãªå ŽåããããŸãã
ããã¯ããexec-after-startããªãã·ã§ã³ã䜿çšããå Žåã§ãå¿ èŠã«ãªããŸãã ãšã³ããªãã€ã³ãã¹ã¯ãªããã¯å®éã«ããã¯ãæäŸããã®ã§ããã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ããããå¿ èŠãªããšæããŸãã
ããããç§ã¯ããªããç§ã瀺ããŠããåé¡ã®äžéšãèŠéããŠãããšæããŸãïŒ
ç§ã®å Žåã1ã€ã ãã§ãªããäž¡æ¹ã®ã³ã³ããã«ã¢ã¯ã»ã¹ããå¿ èŠããããŸãããããã£ãŠãentrypoint / commandã¯ãããæäŸããŸããã
GL_TOKEN
ã¯gitlabã³ã³ãããŒããååŸãããgitlab-runnerã³ã³ãããŒã§ç»é²ã«äœ¿çšãããŸãã
ã€ãŸããç§ãè¡ã£ãŠããããã¯ã¯ã docker/compose
ã€ã¡ãŒãžã䜿çšããŠ3çªç®ã®ã³ã³ãããŒãè¿œå ããããšã§ã-ããã¯ã1ã€ã®ã³ã³ãããŒã®æ§æ/ãšã³ããªãã€ã³ã/èšå®ãå€æŽã§ãããã®ã§ã¯ãªããå®å
šã«ïŒç°¡åãªïŒäŸã§ããããå€ããå¿
èŠãšãããã«ãã³ã³ããã®èª¿æŽã
ç§ã¯ããããããå°ãéæ³ã®ããã«ããããã«åãçµãã§ããŸãã-ããã¯åºæ¬çã«ãgitlabãããèªäœãåæåããã®ã«æéãããããããåæåã³ã³ããã«ããã€ãã®ã¹ãªãŒãã«ãŒããããããšãæå³ããŸãã
TBHãcomposeãã¡ã€ã«èªäœãšdocker / compose imageã䜿çšããinit-containerã§å®è¡ãããã¹ã¯ãªããã䜿çšããããšã¯ããã®çš®ã®è€éããé ãæ£ããæ¹æ³ã§ãããšæãå§ããŠããŸããç§ãåºããŠãããã¯ããŸãããã§ãããããã®ãããªç¶æ³ã
_IF_å©ãã«ãªãããã«ãå¥åŠãªã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒãæ€èšããããšã«ãªã£ãŠããŸãããããããã次ã®ãããªãã®ãéžã³ãŸãã
gitlab-initializer:
image: docker/compose:1.18.0
restart: "no"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./gitlab-compose.yml:/docker-compose.yml
entrypoint: ['/bin/sh']
command: ['/init-gitlab.sh']
file:
path: /init-gitlab.sh
content: |
for i in $(seq 1 10); do
export GL_TOKEN=$(docker-compose -f gitlab-compose.yml -p sima-austral-deployment exec -T -u gitlab-psql gitlab sh -c 'psql -h /var/opt/gitlab/postgresql/ -d gitlabhq_production -t -A -c "SELECT runners_registration_token FROM application_settings ORDER BY id DESC LIMIT 1"')
echo "$i: token($?) == $GL_TOKEN"
ERR=$?
if [[ "${#GL_TOKEN}" == "20" ]]; then
break
fi
sleep 10
done
echo "GOT IT: token($ERR) == $GL_TOKEN"
for i in $(seq 1 10); do
if docker-compose -f gitlab-compose.yml -p sima-austral-deployment exec -T gitlab-runner \
gitlab-runner register -n \
--url http://gitlab:9090/ \
--registration-token ${GL_TOKEN} \
--executor docker \
--description "Docker Runner" \
--docker-image "docker:latest" \
--docker-volumes '/var/run/docker.sock:/var/run/docker.sock' \
--docker-network-mode "simaaustraldeployment_default" ; then
echo "YAY"
break
fi
sleep 10
done
ã€ãŸããcloud-initã®ããã«ïŒ httpïŒ //cloudinit.readthedocs.io/en/latest/topics/examples.html#writing -out-arbitrary-files
ããããçµå±ã®ãšãããdocker-compose-ymlå ããè€éãªãã«ãã³ã³ãããŒã調æŽããããã®ãœãªã¥ãŒã·ã§ã³ããããŸãã
äºåå®çŸ©ãããããŒã¯ã³ãèšå®ã§ããå Žåã¯ã gitlab-runner
ãšã³ããªãã€ã³ãã¹ã¯ãªããããèšå®ã§ããŸãã ãã®æéã®é ãèšå®ããæ¹æ³ã¯ãããŸãããïŒ
@dnephinã¹ã¯ãªããã«ã€ããŠèšåããç¬éãããªãã¯å 幎ããããŠããã€ãã®å¹Žã§ããŒã¯ããå€ããŠããŸãã
onrun
ã¯entrypoint
ãŸãã¯cmd
ãšåãã§ã¯ãããŸããã
entrypoint
/ cmd
ã¯ãã³ã³ãããŒinit
/ PID1ãšããŠå®è¡ãããå®è¡å¯èœãã¡ã€ã«ãæ§æããããã®ãã®ã§ãã
ãã®åé¡ããã³é¢é£ããå€ãã®åé¡ã§èšåãããŠããã¢ã€ãã¢ã¯ãçŽinit scripts
ãããã¯ãèµ·åã®ã³ã³ããã¹ãã§ã®init
ãšã¯ç°ãªããã¢ããªã±ãŒã·ã§ã³ã®initã¹ã¯ãªããã«é¢ãããã®ã§ããããŒã¿ããŒã¹ã®ã»ããã¢ããã«ã€ããŠèããŠã¿ãŠãã ããã
@dnephinã¯ãç¹å®ã®ã³ã³ããã»ããã®åé¡ãåé¿ããããšããããããäžè¬çãªåé¡ã»ããã«çŠç¹ãåœãŠãæ¹ããããã䟿å©ã§ãã
ç§ãèŠããšãããããããããã¯çæãããç§å¯ã§ã-ãããå®éã«ã¯ãããã¯ãã®å°ããªãã¬ã€ã·ã¹ãã ã§ãããæã€å¯èœæ§ãé«ããã«ãã³ã³ãã調æŽèŠä»¶ã ãã§ã¯ãããŸãã-ããã¯ç§ã«ãšã£ãŠæéã®ãã®ã§ãå ¬å ±ã®å Žã§ãããã¿ã€ãã
v1ïŒhttps://docs.docker.com/compose/compose-file/compose-fileïŒä»¥éãäœæãã¡ã€ã«ã®entrypoint
ãšcommand
ããªãŒããŒã©ã€ãã§ããããã«ãªã£ãã®ã¯ãªãã§ããã -v1 /ïŒentrypointïŒã§ããã³ã³ãããŒãèµ·åããŠãããšãã«ã³ãã³ããå®è¡ããããã®onrun
ãªã©ã®ãã£ã¬ã¯ãã£ãããããŸãããïŒ
TBHã onrun
ããã£ãšãããããšã¯æããŸãã-DockerããŸãã¯ãªãŒã±ã¹ãã¬ãŒã¿ãŒã¯ãã³ã³ãããŒããã¹ãŠçšŒåããŠããããšããæå³ãç¥ããŸãã-ç§ã®å Žåã®1ã€ã§ã¯ãHEALTHCHECKã¯å€±æããŸããããã³ã³ããããæ
å ±ãååŸããããã䜿çšããŠä»ã®ã³ã³ããå
ã®ä»ã®ãã®ãããã¯ãããããã€ãã®è¿œå ã®ããã®ãã
ãããŠ_if_ç§ã¯æ£ããç解ããŸãããããã¯åºæ¬çã«Operatorã³ã³ãããå¿ èŠã§ããããšãæå³ããŸããããã«ã¯ããã«ãã³ã³ããã·ã¹ãã ã®äžéšããžã§ãã®äžéšïŒããããšç¹°ãè¿ãïŒãå®è¡ããæºåãã§ããããšãæ€åºããã³ãŒããå«ãŸããŠããŸãããã®ä»äºãå®äºããŠçµäºãããããããã¯ç©äºãç£èŠããŠä¿®æ£ããããšãããããŸãã
ãããŠãããã¯ãã³ãŒããå«ãdocker-composeã³ã³ãããŒã«ãã£ãŠïŒdocker-composeã§ïŒæããã解決ããããžã§ãã®ããã«ç§ã«ã¯æããŸãã
ç§ã¯ããããããã®æŒç®åãïŒä»ã®ãããžã§ã¯ãã®ããŒãºã®ããã«ïŒdocker swarmstacksãåŠçã§ãããã®ã«å€æããæ¹æ³ãè©ŠããŠã¿ãã€ããã§ãã
ã³ã³ããããããã¯æŒç®åã§ããéæ³ã®èœåãäžããŠãã ããããšããŒã¯ãããããªãã®ã§ãªãéããdocker-composeã«è¿œå ã§ããæ§æç³è¡£æ§æããããããããã©ããã¯å®å šã«ã¯ããããŸããã
éçºè ããŠãŒã¶ãŒã®è©±ãèããããªãããšãã¯ã£ãããšããããŸããä»ã®ããŒã«ãèŠãŠã¿ãŸããã... docker-composeã¯å€§ããªèŠçã§ã..ãªãããªããå¯äžã®æçšãªãã®ãæ¥ãã®ãç解ã§ããªãã®ãåãããŸããdocker-composerã¯ãã«ãããŒã«ã§ã... SIMPLEã³ãã³ããå®è¡ããŠã³ã³ããå ã®ã¢ã¯ã»ã¹èš±å¯ãã¢ã¯ãã£ããŠãŒã¶ãŒã«è¿œå ããã«ã¯ã©ãããã°ããããæ€çŽ¢ããã®ã«å€ãã®æéãè²»ãããŸããã
docker-composerã®ç¶æ ãåçŽã«å®äºããŠããªãããã§ã...
ç§ãäœæãã¡ã€ã«ã«onrun
ã«ãªããã®ã欲ãã
__BUT__ãã³ã³ãããäœæãã onrun
ãäœãæå³ããããç¥ãæ¹æ³ããããŸããã ããããæŒç®åãã¿ãŒã³ãååšããçç±ã§ããã httpsïŒ //github.com/docker/compose/issues/1809#issuecomment-362126930ã§äŸãäœæããçç±ã§ãã
ä»æ¥ãããè¡ãããšã¯__is__å¯èœã§ã-æ¬è³ªçã«ãä»ã®ãµãŒãã¹ãå®éã«å¯Ÿè©±ããæºåãã§ãããŸã§åŸ
æ©ããonrun
ãµãŒãã¹ãè¿œå ãïŒgitlabã®å Žåãããªãã®æéãããããŸãïŒã次ã«å®è¡ããŸãç©äºã調æŽããããã«ããªããããå¿
èŠãããããšã¯äœã§ãã
ããã§ããŸããããªããã®ãããå Žåã¯ãæããŠãã ãããäœããç解ã§ãããã©ããã確èªããŸãã
ç§ãèªåã®äœæãã¡ã€ã«ã§å®è¡ããããã®ã欲ãã
ããããã³ã³ãããæ§æãããªã³ã©ã³ã®æå³ãç¥ãæ¹æ³ããããŸããã
ç§ãèŠãŠããããã«ããµãŒãã¹ããšã®onrun
ã¯ãæåã®ã³ã³ããããã»ã¹ããã€éå§ããããæå³ããŸãã å€ãã®å Žåãããã¯ã³ã³ãããå®è¡ããããã®æšå¥šãããæ¹æ³ã§ãããããã³ã³ããã¯ãšã«ãã1ã€ã®ããã»ã¹ã®ã¿ãå®è¡ããŠããŸãã
RUNãDockerfileã®Linuxã³ãã³ããæå³ããå¿
èŠããªãã®ãšåãããã«ãã³ãã³ãã¯docker exec
ãä»ããŠå®å
šã«OSã«äŸåããªãå¯èœæ§ããããããã¯ãã¹ãã©ãããã©ãŒã ãµããŒãã®åé¡ã¯ä»¥åã«è§£æ±ºãããŸããã
https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-docker/manage-windows-dockerfile
ãŸã onrun
æ©èœãåŸ
ã£ãŠããŸã
ãã®onrun
æ©èœãå¿
èŠã§ãããã®ããŒã«ã«ãããšæããŸããã ãã®æ©èœãäžè¶³ããŠããããã2ã€ã®ã¹ã¯ãªãããç¶æããå¿
èŠããããŸãã
ã¿ããªããã®docker-compose
ã©ãããŒãäœæããŠããã®onrun
æ©èœãèš±å¯ãããã©ããªãã§ããããã 䜿ã£ãŠãããŸãããïŒ
@wongjiahauã¯ãã®ãããªãã®ãããããŸãããïŒ https://github.com/docker/compose/issues/1809#issuecomment -348497289
@ reduardo7ã¯ãã docker-composei
ãšããã¹ã¯ãªããå
ã§ã onrun
å±æ§ãå«ãdocker-composei.yml
ã§ã©ããããããšãèããŸããã
ãšããã§ã docker-composei
ã¯docker-compose improved
æå³ããŸãã
æ¬åœã®è§£æ±ºçã¯ããããããã¢ããªã€ã¡ãŒãžãïŒããããdockerã䜿çšïŒãå éšã§å®è¡ããã³ç®¡çããïŒbashã¹ã¯ãªãããä»ããŠïŒããªãŒã±ã¹ãã¬ãŒã¿ãŒãã€ã¡ãŒãžãæ§ç¯ããããšã§ãã ããã§ãªããã°ãç§ãã¡ã¯åžžã«ãç§ãã¡ãããããããšãããããšãæå³ããŠããªããããŒã«ã®ããã®ããå€ãã®æ©èœãæ±ããŸãã
ãããã£ãŠãDockerå ã§Dockerãæ€èšããå¿ èŠããããŸã...
ãã®ææ¡ãããæ©èœã«å¯Ÿããç§ã®ãµããŒããè¿œå ããã ãã§ãã onrunã¯çã«ããªã£ãŠããŸãããæœåšçãªãŠãŒãã£ãªãã£ãåºããå°æ¥çã«ãããå°ã蚌æããã«ã¯ããããã誰ããããåºç¯ãªãoneventãã¢ãŒããã¯ãã£ãæ€èšããå¿ èŠããããŸãããã®ãã¡ã®1ã€ã¯onrunã§ãã
ã³ã³ãããèªå·±å®çµåã§ãããã³ã³ããããšã«1ã€ã®ãµãŒãã¹ã§ãããšããäžè¬çãªæ¹åæ§ãèãããšãã³ã³ããã¯ããã®åäœã³ã³ããã¹ãèªèã®èŠ³ç¹ããèªçµŠèªè¶³ã§ããå¿ èŠããããŸãã ãã®äœæãã¡ã€ã«ããæµãããã®ã¯ããã«ããªã³ã¹ã¯ãªããã§ã¯ãªãããããå®çŸ©ããããã®åªäœã§ããå¿ èŠããããŸãã ããªããèªå·±åžåã®ç±çè ã§ãªãéããããã«å¯ŸããŠè°è«ããã®ã¯é£ããã§ãã
ç§ã®å ŽåãredisãµãŒããŒãèµ·åããåŸã«redisã³ã³ãããŒãluaã¹ã¯ãªãããããŒãããŸãã éåžžã®éã³ã³ããç°å¢ã§ã¯ãsystemdã«èµ·ååŸã®ã¹ã¯ãªãããå®è¡ãããŸãã ã·ã³ãã«ã§systemdã¢ãŒããã¯ãã£ãšäžè²«æ§ããããŸãã ã³ã³ãããå®è¡ããããã®ã³ã³ããã¹ããèšå®ãã圹å²ãèãããšãcomposeã«ãåæ§ã®ååãååšããã¯ãã§ãã
ã¡ã³ãããžã®äžè¬çãªã¢ããã€ã¹ãšããŠãå人çãªå¥œã¿ã§ã¯ãªããå®èšŒæžã¿ã®åäœåçã«çŠç¹ãåãããŠãã ããã
ãããã£ãŠã解決çïŒãã®ã¹ã¬ããããã¹ãŠèªãã åŸïŒã¯ãbashã¹ã¯ãªããã䜿çšããŠãžã§ããå®è¡ããããšã§ã...ãã®å Žåãdocker-composeãåé€ããŸãïŒdocker cmdã§ãã¹ãŠãå®è¡ã§ããŸã...ïŒ
ããªãã®ãã®ã䜿çšããŠãã人ã ã«è³ãåŸããããã®thxdev :)
åçŽãªææ¡ïŒãªã³ã©ã³ã€ãã³ãã®éå¬ãªã©ïŒãšæŠãåŒæ°ãšåè«ãå«ãã¡ãã»ãŒãžã®éãèŠããšãç§ã®æåã®æ£çŽãªå°è±¡ã¯ãGithubã®åé¡ã_owners_ïŒãããžã§ã¯ãéçºè ïŒã䜿çšããããšã«ãã£ãŠãšãŽãšã¹ããŒãããæ«é²ããå Žæã«ãªã£ãããšã§ããŠãŒã¶ãŒããã®ã€ã³ããªãžã§ã³ããªè²¢ç®ã«å察ãã圌ãã®ç¥èãšæè¡çãªã¢ã«ãŽã³ã
ã©ããããªãŒãã³ãœãŒã¹ãæ¬åœã«_ãªãŒãã³_ã«ããŸãããã
ãã®æ©èœã«é¢ããæŽæ°ã¯ãããŸããïŒ äœãåé¡ã§ããïŒ
@ v0lumeãã®èšäºå šäœãéããŠå®éã«åçãèªãããšãæ°ã«ããªãã£ããšæããŸã
ãŸã 解決çããªãããã§ã...ããããããããŒãªåé¿çãå
±æããããšæããŸãã
docker-compose.ymlã§ããŒãžã§ã³ã2.1ããæå®ããããšã§ããã«ã¹ãã§ãã¯ãã¹ããæªçšããŠãéå§æã«ã€ã¡ãŒãžå
ã§è¿œå ã®ã³ãŒããå®è¡ã§ããŸãã 次ã«äŸã瀺ããŸãã
version: '2.1'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:5.4.3
healthcheck:
test: |
curl -X PUT elasticsearch:9200/scheduled_actions -H "ContentType: application/json" -d '{"settings":{"index":{"number_of_shards":'1',"number_of_replicas":'0'}}}' &&
curl --silent --fail localhost:9200/_cat/health ||
exit 1
interval: 11s
timeout: 10s
retries: 3
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms1g -Xmx1g
- xpack.security.enabled=false
main:
image: alpine
depends_on:
elasticsearch:
condition: service_healthy
äœæããhealthcheck-testã¹ã¯ãªãããã³ãŒã> = 1ã§çµäºãããšãè€æ°åå®è¡ãããå¯èœæ§ããããŸãã
ãµãŒãã¹ã®ãã«ã¹ãã§ãã¯ã¯ãå¥ã®ãµãŒãã¹ãããã«äŸåããäŸã«ç€ºãããã«service_healthy
æ¡ä»¶ãæå®ããå Žåã«ã®ã¿å®è¡ãããŸãã
ç§ã¯@ T-vKã¢ãããŒãã奜ãã§ã以åã¯æåããŠäœ¿çšããŠããŸããã ããããç§ã¯å¥ã®...ããã¯ãå ±æããããšæããŸãïŒ
# Run Docker container here
until echo | nc --send-only 127.0.0.1 <PORT_EXPOSED_BY_DOCKER>; do
echo "Waiting for <YOUR_DOCKER> to start..."
sleep 1
done
# Do your docker exec stuff here
+1
ãã®æ©èœãå¿
èŠã§ãããkubernetesãªã©ã®ä»ã®DockerãªãŒã±ã¹ãã¬ãŒã¿ãŒã«ãã£ãŠãã§ã«å®è£
ãããŠãããããç§ã¯ããã«å®å
šã«åæããŸãã ãã§ã«ã³ã³ããã®ã©ã€ããµã€ã¯ã«ããã¯ããããããã«èšèŒã
ããããDockerfilesã§ã¯è§£æ±ºã§ããªããŠãŒã¹ã±ãŒã¹ãæäŸãããŠãã ããã
å®è¡æã«ããªã¥ãŒã ãããŠã³ããããã£ã¬ã¯ããªã®æ£ç¢ºãªååãäºåã«ç¥ããªããŠããã³ã³ããããããªã¥ãŒã ãžã®ã·ã³ããªãã¯ãªã³ã¯ãäœæããå¿ èŠããããšããŸãã ãããã€å ã®ç°å¢ã«å¿ããŠdiråãåçã§ãããå€æ°ãšããŠæž¡ãå ŽåããããŸããã
確ãã«ãããã解決ããããã®åé¿çãèŠã€ããŸããããè€æ°ãããŸãã äžæ¹ãããã¯ã¯ãç©äºããããã³ã°ããŠDockerfileã眮ãæãããšããè¡åãªãã«ãåçã«å€æŽãå ããããã®æè»æ§ãšããè¯ãã¢ãããŒããç§ã«äžããŠãããŸãã
ãã®åé¡ãèŠã€ããŠããããã§ãã ç§ã¯DockerãšDockercomposeãæ°å¹Žéããã£ãŠããŸãã ä»ã§ã¯ãã·ã¹ãã ã®ã¹ã±ãŒãªã³ã°ãéå§ããããã®ããŒã«ãšããŠããã䜿çšããããšãçå£ã«æãã§ããŸããã ç§ã¯æ¯å¹Ž1ã2åãã§ãã¯ããŸããããããžã§ã¯ãã¡ã³ããã®æ 床ã«åºã¥ããŠãã¹ã¯ãªãããŸãã¯ä»ã®ããŒã«ã䜿çšããã ãã§ååŸã§ããŸãã å€ãã®æéãæè³ããªãã£ãããšãããããæãããããæ©ã段éã§èŠã€ããŸããã
äžçŽè åãã®ãã³ãïŒã¯ãŒã¯ãããŒããã®ã¿ã€ãã®ããŒã«ã«ç§»è¡ãå§ããã°ããã®äººããããã§èª¬æããå 容ããã§ã«å¿ èŠãšããŠããå Žåã¯ããããæ§ç¯ãããçç±ãã«ã€ããŠåèãã䟡å€ããããããããŸããã ã¯ããããªãã¯æåããŠããŸãããããã¯äººã ããããããã®ç©ã䜿çšããããã§ãããããªãã¯ãããã圌ãã«å¿ èŠãªãã®ãäžããããšã«éåžžã«ãªãŒãã³ã§ããã
ã§ã¯ããããããã
ãã®æ©èœãå®è£ ãããŠããã°ãç§ã¯ããªããæããã®ïŒç§ã®ã¬ãŒã«ãã¬ã³ããé€ãïŒãããªãã«äžããããšãã§ããŸãããããŠç§ã¯ãã¹ãŠã®å®å®ã§æã幞ããªäººã«ãªããŸã:)
ãã®ææ¡ãããæ©èœã«å¯Ÿããç§ã®ãµããŒããè¿œå ããã ãã§ãã onrunã¯çã«ããªã£ãŠããŸãããæœåšçãªãŠãŒãã£ãªãã£ãåºããå°æ¥çã«ãããå°ã蚌æããã«ã¯ããããã誰ããããåºç¯ãªãoneventãã¢ãŒããã¯ãã£ãæ€èšããå¿ èŠããããŸãããã®ãã¡ã®1ã€ã¯onrunã§ãã
ããã¯ããã§ããã
ããã«è¿œå ããã«ã¯ã次ã®ããã«ããŸãã
services:
web:
image: node:8-alpine
depends_on:
- db
db:
image: postgres:alpine
onrun: "echo hi"
ã¯ãã¹ã€ãã³ãã¹ã¯ãªãããè¿œå ããã®ã¯å€ãããã§ããããïŒ
web:
events:
db_onrun: "connectAndMigrate.sh"
ç§ã®æèŠã§ã¯ããããdocker-composeã«è¿œå ããã®ã¯ãcomposeãã¡ã€ã«ãšcomposeã¹ã¿ãã¯ã䜿çšããŠããããªãã ãã§ãªããããŒã å ã®ä»ã®éçºè ã«ãšã£ãŠãç°¡åã§ãã
ããšãã°ãä¿¡é Œã§ãã蚌ææžã䜿çšããã«ã¯ããã¹ãŠã®ç°å¢ã«mkcert
ãã€ã³ã¹ããŒã«ããŠæ§æããå¿
èŠããããŸãã ã¹ããŒãž/ãããã¯ã·ã§ã³ã§ã¯å¿
èŠãªããããã³ã³ãããDockerfileã®äžéšã§ã¯ãããŸããã ããŒã«ãã€ã³ã¹ããŒã«ããããã®ããã§ã®é©åãªã¢ãããŒãã¯äœã§ããïŒäœæãã¡ã€ã«ã䜿çšããŠãããã¹ãŠã®äººã¯ãèå°è£ã§äœãèµ·ãã£ãŠããã®ãããããããŸãããïŒ
å¥ã®ãŠãŒã¹ã±ãŒã¹ã®è¿œå ïŒ
ã¯ãŒããã¬ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãå¿
èŠã§ããã docker-compose.yamlãäœæããŸããã docker-compose up
âãã£ãšïŒ ãã©ã°ã€ã³ãã£ã¬ã¯ããªã®ãã¡ã€ã«ããŒããã·ã§ã³ãèšå®ããå¿
èŠããããŸã...ãããæ©èœãããä»ã®æ¹æ³ãèŠã€ãããŸããããã¹ãããããã€ãã®ãã¡ã€ã«ããã€ã³ãããŠãããããã³ã³ããã®å®è¡åŸã«ããŒããã·ã§ã³ãèšå®ããå¿
èŠããããŸãããããå¯äžã®æ¹æ³ã®ããã§ãã fsããŒããã·ã§ã³ãä¿®æ£ããã«ã¯ãã³ã³ãããŒå
ããchown -Rf www-data.www-data /var/www/wp-content
ããŸãã ãã®ããã ãã«ãç¬èªã®DockerfileãäœæããŠãã«ãããŸããïŒ ããã¯ç§ã«ã¯æããªããã§ãã
ç§ã«ãšã£ãŠå¹žããªããšã«ãäžèšã®healthcheck
ããã¯ã«ããããããå®è£
ããããšãã§ããŸããã Dockerããªã¥ãŒã ã®èšå®æš©éã®åé¡ã«ã€ããŠè©±ããŠãããŠã§ãäžã®ä»ã®ããŒãžããããŸãããææ¡ããã解決çã¯æ©èœããŸããã§ããã
ãããã®ã²ãŒãããŒããŒã¯ã@dnephinã@aanandã@ shin-ããã®ããã«ç±ã®ãã³ãååŸããŠããããšãèŠãããšãããããã§ãã ã³ãã¥ããã£å
šäœãå¯èœãªéã倧声ã§å«ã¶ãšããããã¯æ¬åœã«ããªã¥ãŒã ã話ããŸãããããŠãã³ã¢éçºè
ã¯ãã 座ã£ãŠã圌ãã®ç«å Žãä¿æããŠãèãããšãæåŠããŸãã ãšãŠãå
žåçã§ãã 芪æãç«ãŠãæ°ã ãã§ãªãããããå¿
èŠã§ãããšçãã34人ã®ãŠãŒã¶ãŒãæ°ããŸãããã
01ïŒsshishov
02ïŒãã§ã¹ã³ãã«
03ïŒsandor11
04ïŒãŠã§ãããã
05ïŒv0lume
06ïŒãŠã§ãããªã¹
07ïŒSkull0ne
08ïŒusergoodvery
09ïŒãŠã©ã³ãžã¢ããŠ
10ïŒMFQ
11ïŒãšã»ãããŠ
12ïŒãã¬ãŒãã³
13ïŒdaqSam
14ïŒomeid
15ïŒãã³ããã«ã
16ïŒãŠã£ãªãŒã€ã³
17ïŒSharpEdgeMarshall
18ïŒå€±ããããã£ãªã¢
19ïŒãŽãŒã¹ã
20ïŒrodrigorodriguescosta
21ïŒdatatypevoid
22ïŒdextermb
23ïŒã¬ã¯ãã¹
24ïŒlucile-sticky
25ïŒrav84
26ïŒãããª
27ïŒahmet2mir
28ïŒmontera82
29ïŒãã£ã¹ã³ãŒãã£ã¢ã³ãã£ãã·ã¥
30ïŒjasonrhaas
31ïŒãã§ã©ãŒãªã¹
32ïŒãã€ããŒã®ã°
33ïŒæ¥å
济
34ïŒsthulb
ãããŠãããŒãšèšã£ãæ°ã¯ïŒ ãªããš3ïŒ
01ïŒãããã£ã³
02ïŒaanand
03ïŒãã-
ããŒã... 34ãã3..ã
@ rm-rf-etcåªããåæ... @ dnephinã@aanandã
å¥ã®ãŠãŒã¹ã±ãŒã¹ã®è¿œå ïŒ
ã¯ãŒããã¬ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãå¿ èŠã§ããã docker-compose.yamlãäœæããŸããã
docker-compose up
âãã£ãšïŒ ãã©ã°ã€ã³ãã£ã¬ã¯ããªã®ãã¡ã€ã«ããŒããã·ã§ã³ãèšå®ããå¿ èŠããããŸã...ãããæ©èœãããä»ã®æ¹æ³ãèŠã€ãããŸããããã¹ãããããã€ãã®ãã¡ã€ã«ããã€ã³ãããŠãããããã³ã³ããã®å®è¡åŸã«ããŒããã·ã§ã³ãèšå®ããå¿ èŠããããŸãããããå¯äžã®æ¹æ³ã®ããã§ãã fsããŒããã·ã§ã³ãä¿®æ£ããã«ã¯ãã³ã³ãããŒå ããchown -Rf www-data.www-data /var/www/wp-content
ããŸãã
ãã®å Žåãäœæãã¡ã€ã«ã§user
ããããã£ã
ãã®ããã ãã«ãç¬èªã®DockerfileãäœæããŠãã«ãããŸããïŒ ããã¯ç§ã«ã¯æããªããã§ãã
ããªãã¯åŒ·ãæèŠã圢æããããã§ã; ãããçŸå®çã«ã¯ãå¿ èŠã«å¿ããŠããŒã¹ã€ã¡ãŒãžãå€æŽããDockerfileãäœæããããšã«ã€ããŠãæããªãããšã¯äœããããŸããã ãããããã¹ãŠã®ããŒã¹ã€ã¡ãŒãžã®æ¬æ¥ã®ç®çã§ãã
ç§ã«ãšã£ãŠå¹žããªããšã«ãäžèšã®
healthcheck
ããã¯ã«ããããããå®è£ ããããšãã§ããŸããã Dockerããªã¥ãŒã ã®èšå®æš©éã®åé¡ã«ã€ããŠè©±ããŠãããŠã§ãäžã®ä»ã®ããŒãžããããŸãããææ¡ããã解決çã¯æ©èœããŸããã§ããããããã®ã²ãŒãããŒããŒã¯ã@dnephinã@aanandã@ shin-ããã®ããã«ç±ã®ãã³ãååŸããŠããããšãèŠãããšãããããã§ãã
ãããç«æŽŸãªæ 床ã®ä»²éã ïŒD
@ rm-rf-etcåªããåæ... @ dnephinã@aanandã
ãããããæ°å¹Žã«ãªããŸã-å€ãåé¡ã«ã€ããŠåœŒãã«pingãç¶ããå¿ èŠã¯ãããŸããã
éãè¯ããã°ãDockerã¯ã¹ã¿ãã¯ãåªå ããŠcomposeãéæšå¥šã«ããããšãèšç»ããŠãããããã«æå¥ãèšãããŒã ã¯æ®ã£ãŠããŸããã補åã®é²æ©ãåã³èŠãããããã«ãªããŸãã
ð
@ shin-ããããããªãã¯ãã®å¿çã§ãããpingããã ãã§ã
æè¿ããã®åé¡ãåã³çºçããŸãããåé¿çã«èŠãããããã«å®è¡ã§ããŸãããããã¯ãimoãæªèãæŸã€2.1ãæå®ããå Žåã«ã®ã¿æ©èœããŸãã
å
¬åŒã®ã¹ã¿ã³ã¹ã¯ããã¹ãŠã«å¯ŸããŠç¬èªã®Dockerã€ã¡ãŒãžãäœæããå¿
èŠãããããã«æãããããšã¯ç§ã«ã¯æ°ãé ããªããããªããšã§ãã
ç§ã«ãšã£ãŠãããã¯æåéããããã°ã©ã ã®èšå®ãå€æŽãããå Žåã¯ããœãŒã¹ã³ãŒããå€æŽããŠåã³ã³ãã€ã«ããå¿
èŠãããããšèšã£ãŠãããããªãã®ã§ãã
æ°ãããµãŒãã¹ãè¿œå ããããMongoDBãMySQL Dockerã€ã¡ãŒãžãªã©ã®æ°ããããŒãžã§ã³ã«ã¢ããã°ã¬ãŒãããããããã³ã«ãæ°ããDockerfileãäœæããŠãã«ãããã¬ãžã¹ããªã«ããã·ã¥ããå¿
èŠããããŸãã
ããã¯ãdocker-compose.ymlã§image: mongo:3.0.2
ãimage: mongo:3.0.3
ã«å€æŽããå Žåãšæ¯èŒããŠãæéãšãªãœãŒã¹ã®å€§å¹
ãªæµªè²»ã§ãã
ç§ã¯é·ããã«ãæéã«ã€ããŠã¯äžæºãèšã£ãŠããŸããå¿
èŠãªã®ã¯ãæœåšçã«ãããªããµãŒãã¹ã®ãã©ã¡ãŒã¿ãŒãæŽæ°ãŸãã¯å€æŽããããšã ãã§ãããšãã«ãDockerfilesãšdocker build
ãæ°ã«ããå¿
èŠããããšããäºå®ã«ã€ããŠã¯äžæºã§ããããŒã¹ã€ã¡ãŒãžãšããŠäœ¿çšããããšãç®çãšããŠããŸãã
ãããŠããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã1ã€ã®ããšãš1ã€ã®ããšã ããå®è¡ããå¿
èŠããããšããè°è«ããæ¬åœã«æªèãæŸã¡ãŸãã ããã¯ãå®å
šã«æ°ããæ©èœãå®è£
ããããšã§ããããŸãããããã¯ãå¥ã®ãã©ã¡ãŒã¿ãdocker
æž¡ãããšã§ãã ãŸãããªãdocker run
ã docker build
ã docker exec
ã docker pull
ãªã©ããã¹ãŠåãã¢ããªã±ãŒã·ã§ã³ã®äžéšã§ããã®ããšããçåãçããŸãã è°è«ã¯ä»ãåœåçã«èãããŸããã
@ shin-ãç§ã¯ããªãã®ãªã³ã¯ããã©ããŸãããããŠãŒã¶ãŒããããã£ããã€ã³ãããŠã³ãããããã£ã¬ã¯ããªã®ææè ã®èšå®ã«ã©ã®ããã«é¢é£ããŠãããããããŸããã ããŒãã«é¢é£ããŠããããã§ãã
ReïŒæ 床ïŒäººã ã¯ç§ã«åæããŠããããã«èŠããã®ã§ãããã匷ããã£ãŒãããã¯ãšããŠåãæ¢ããŠãã ããã ç§ã®è¡šçŸãæ°ã«å ¥ããªããã°ç³ãèš³ãããŸãããããŠãŒã¶ãŒã®èŠæ±ãç¡èŠãããŠããããã«èŠããã®ã§ãä»ã«äœãæåŸ ããŸããïŒ
ç§ã¯onrunãªã©ã®æ©èœãæåŸ ããŠããã«æ¥ãŸãããcomposeã䜿çšããŠããããã2æ¥ã§ããã®ãããªããŒã«ã«ãã®æ©èœãå¿ èŠã§ãããããææ¡ãããŸããã
Dockerãã¡ã€ã«ã«æ»ã£ãŠãæ©èœã®åå¥ã®ã¹ã¯ãªããã§ãããããæŽæ°ããã®ã¯åé·ãªããã§ãã 以åã¯dockerfileãæè»ã§ãã£ãç°å¢å€æ°ã«ãå¥ã®ã³ã³ãããŒããããŒã¯ã³ãæ¿å ¥ãããã ãã§ããããã¯ãåçŽãªç®çã§docker-composer.ymlãšãœãªã¥ãŒã·ã§ã³ã«ç·å¯ã«çµåãããŠããŸãã
ãããŒãç§ã¯ã¹ã¬ãããããã³ã°å
šäœãèªãã§ããããããŸãããããã¯ãã£ããããšæããŸãããå®è£
ããŸãããšããçããèŠã€ããŸããã ãããåã«é²ãŸãªãã£ãã®ãèŠãŠæ²ããã
ãªã³ã©ã³ã«+1ïŒ
@fabiomolinar ãç§ãã¡ãçç£çŸ€ã§åºã䜿çšããŠãã解決çã®1ã€ããããŸãããããã¯ã€ãã³ããéå¬ããã»ã©è¯ãã¯ãããŸããã
次ã®ã¢ã³ã«ãŒã䜿çšããŸã
#### configure a service to run only a single instance until success
x-task: &task
# for docker stack (not supported by compose)
deploy:
restart_policy:
condition: on-failure
replicas: 1
# for compose (not supported by stack)
restart: on-failure
æåãããŸã§ã¿ã¹ã¯ãç¹°ãè¿ããŸãã ã¹ãçã®çµæãåŸããã移è¡ããã³ã»ããã¢ããã¿ã¹ã¯çšã®ã³ã³ãããŒãäœæããããŒã«ã«ã®äœæããã³ã¹ã¿ãã¯ã§ãã®ããã«å®è¡ããŸãã
ã¿ã¹ã¯ã«äŸåãããµãŒãã¹ã¯ãæ§æäœæ¥ãå®äºããŠããªãå ŽåãããçšåºŠæ£åžžã«å€±æããå¿ èŠããããŸãã ã»ãšãã©ã®å Žåããšã³ããŠãŒã¶ãŒã«ããã€ãã®ãšã©ãŒãçºçããŠãåé¡ããªãéããçµææŽåæ§ãåŸãããã»ãšãã©ã®ç°å¢ã§é©åã«æ©èœããŸãã
ãŸãããµãŒãã¹ã³ã³ãããã¿ã¹ã¯å®äºåãšã¿ã¹ã¯åŸã®äž¡æ¹ã®ç¶æ ã§æ©èœã§ããããšãåæãšããŠããŸãã ããŒã¿ããŒã¹ç§»è¡ã®ãããªãŠãŒã¹ã±ãŒã¹ã§ã¯ãäŸåãµãŒãã¹ã¯ç§»è¡åãšç§»è¡åŸã®äž¡æ¹ã®ã¹ããŒãã§æ©èœããå¿ èŠããããŸããæããã«ãéçºãšå±éã®èª¿æŽã«ããã€ãã®èæ ®ãæãå¿ èŠããããŸãããããã¯èª°ã«ãšã£ãŠãäžè¬çãªäºå®ã§ãããµãŒãã¹ã®ããŒãªã³ã°æŽæ°ãè¡ããŸãã
@fabiomolinar ããããç§ãã¡ã®äœæ²ãµãŒãã¹ã§ãã®ã¢ãããŒããã©ã®ããã«äœ¿çšãããã®äŸã§ã...
#### configure a service to run only a single instance until success
x-task: &task
# for docker stack (not supported by compose)
deploy:
restart_policy:
condition: on-failure
replicas: 1
# for compose (not supported by stack)
restart: on-failure
#### configure a service to always restart
x-service: &service
# for docker stack (not supported by compose)
deploy:
restart_policy:
condition: any
# for compose (not supported by stack)
restart: always
services:
accounts: &accounts
<<: *service
image: internal/django
ports:
- "9000"
networks:
- service
environment:
DATABASE_URL: "postgres://postgres-master:5432/accounts"
REDIS_URL: "hiredis://redis:6379/"
accounts-migrate:
<<: *accounts
<<: *task
command: ./manage.py migrate --noinput
@dopryãææããŠãããŠããããšãã ããããç§ã®å Žåã¯ããåçŽã§ããã ãµãŒããŒãå®è¡ããå¿
èŠãããããµãŒããŒã皌åããåŸã§ã®ã¿ãããã€ãã®å±éã¿ã¹ã¯ãå®è¡ããå¿
èŠããããŸããã ä»æ¥ãç§ã¯1ã€ã®CMD
è¡å
ã§ããã€ãã®å°ããªããã»ã¹ç®¡çãè¡ãããšã«ãã£ãŠãããè¡ãæ¹æ³ãèŠã€ããŸããã ãµãŒããŒããã»ã¹ãšãããã€ããã»ã¹ãããããserver
ãšdeploy
ãšåŒã°ããŠãããšæ³åããŠãã ããã 次ã«äœ¿çšããŸããïŒ
CMD set -m; server $ deploy && fg server
äžèšã®è¡ã¯ãbashesã®ã¢ãã¿ãŒã¢ãŒãããªã³ã«èšå®ããããã¯ã°ã©ãŠã³ãã§server
ããã»ã¹ãéå§ãã次ã«deploy
ããã»ã¹ãå®è¡ããæåŸã«server
ããã»ã¹ãDocker
ãã³ã³ããã殺ããªãããã«ãåã³ãã©ã¢ã°ã©ãŠã³ãã«ããŸãã
ããã«ã€ããŠèª¬æããŠããéã docker-compose up
å®è¡æã«ã³ã³ãããŸãã¯ãã¹ãã§ã³ãã³ããå®è¡ããæ¹æ³ã«é¢ãããã³ãã¯ãããŸããïŒ
ãã¹ãã§ã³ãã³ããå®è¡ãããšã»ãã¥ãªãã£ã®å±€ãå±éºã«ãããããããšã¯ç解ããŠããŸãããã³ã³ããã®èµ·ååãŸãã¯èµ·åäžã«ãã£ã¬ã¯ããªãrm
ããã ãã§ãã ãã£ã¬ã¯ããªã¯ããã¹ããšã³ã³ããã®äž¡æ¹ã§ã¢ã¯ã»ã¹ã§ããŸãã ã«ã¹ã¿ã Dockerã€ã¡ãŒãžãäœæããããæåã«rm
ãå®è¡ããŠããã docker-compose
å®è¡ããã¹ã¯ãªãããäœæãããããããããŸããã
ããããšãïŒ
@fabiomolinar ãããªãã®ææ¡ããã¢ãããŒãã¯ãããã€ãã®12èŠçŽ ã®ã¢ããªããªã³ã·ãã«ã«éåããŠããŸãã ã€ã³ãã©ã¹ãã©ã¯ãã£ãã³ã³ããåããå Žåã¯ããããã«å³å¯ã«åŸãããšã匷ããå§ãããŸãã
ããªãã®ã¢ãããŒãããçããå¯èœæ§ã®ããããã€ãã®åé¡
ç§ãæšå¥šããŠããã¢ãããŒãã¯ãæåã¯çŽæã«åãããã®ã§ããã ããã¯ãdocker-composeãdocker swarmsãããã³mesos / marathonã¯ã©ã¹ã¿ãŒã®äžã®ããŒã«ã«éçºç°å¢ã§å®éã«ããŸãæ©èœããŠããŸãã ãŸãããonrunãã®æ¬ åŠãå¹æçã«åé¿ããŸããã
ç§ã䜿çšããã¢ãããŒãã¯ç¢ºãã«éåžžã«éãã§ãã éçºç°å¢ãå®è¡ããããã ãã«ãã°ãã䜿çšããŸããã ãã ãããµãŒããŒã®èµ·åãšå®è¡åŸã«ã¹ã¯ãªãããå®è¡ããããã«ãšã³ããªãã€ã³ãã¹ã¯ãªãããšat
ã³ãã³ãã䜿çšããããã«å€æŽããŸããã ããã§ãã³ã³ããã¯PID 1ãšããŠæ£ããããã»ã¹ã§å®è¡ããããã¹ãŠã®ã·ã°ãã«ã«æ£ããå¿çããŸãã
ãŸã ãããå¿ èŠã§ãã ã³ã³ãããæ£åžžã«èµ·åããåŸã倧éã®Makefileã«å ¥ããã«ããŒã¿ããŒã¹ã®ããŒã«ã¢ãããå®è¡ããæ¹æ³ãèŠã€ãããŸããã
@ victor-perovã¯ãããŒã«ã¢ããã¿ã¹ã¯çšã«å¥ã®ã³ã³ãããäœæãããããåå¥ã®ãµãŒãã¹ãšããŠå®è¡ããŸã
ããã¯ãããŒã¿ããŒã¹ç§»è¡ãå®è¡ããããã®ã¿ã¹ã¯ãµãŒãã¹ã瀺ããããžã§ã¯ãã®1ã€ããã®ã¹ããããã§ãã
x-task: &task
# run once deploy policy for tasks
deploy:
restart_policy:
condition: none
replicas: 1
service:
automata-auth-migrate:
<<: *automata-auth
<<: *task
# without the sleep it can't lookup the host postgres. maybe the command is ran before the network set is complete.
command: sleep 5 && python /code/manage.py migrate --noinput
ããŠãããã¯ãã®è°è«ãåŒã延ã°ããã4幎ç®ã§ãã ããã§ã¯ã onrun
ãå¿
èŠãªãã®ãŠãŒã¹ã±ãŒã¹ã«+1ãè¿œå ããŸãããã PSïŒã¹ã¬ããå
šäœã§ãããã³ãŒã³ãè²·ãã¹ãã ã£ãã
ç§ãã onrun
ãŸãã¯åçã®ãã®ïŒå®è¡åŸïŒïŒãå¿
é ã ãšæããŸãã ã©ãããŒã¹ã¯ãªãããè¿œå ããdockerexecãã³ã³ãããŒã«å®è¡ããã®ã¯...éãã§ãã
IMO docker composeã¯ãã³ã³ãããŒã®ç®¡çãç°¡åã§ãããšäººã ã«çŽåŸãããããã®åªããã³ã³ãããŒãªãŒã±ã¹ãã¬ãŒã·ã§ã³MVPã§ããã ãããããã³ãã¥ããã£ã¯ãæ¬çªç°å¢ã«å¯Ÿå¿ãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ãœãªã¥ãŒã·ã§ã³ïŒã€ãŸããkubernetesïŒãæ¥å¢ããŠããããããã¡ã³ããã³ã¹ã¢ãŒããã«ãããšèŠãªãå¿ èŠããããŸãã ã³ã³ããã®äŸåé¢ä¿ãªã©ã®é«åºŠãªæ©èœãšããã³ã³ãããèµ·åããåŸã«ãããå®è¡ããããªã©ã®æ©èœããªãå Žåãéçºã®ããŒã¹ãåçŽã«é æã¡ã«ãªã£ãŠãããšãã説æã«åãããã§ãã å°ãªããšãããã®æ©èœãç¯å²å€ãšèŠãªãããã¹ããã©ããã¯æããã§ã¯ãããŸããã
Dockerfileã§ãã¹ãŠãç°¡åã«è¡ãããšã¯ã§ããŸããã ç¬èªã®ã¹ã¯ãªãããã³ã³ããã«è¿œå ãããšããŸãã
ããšãã°ã mysql
ã³ã³ããã䜿çšããŠãã€ãã³ããçºçããå Žåã«APIãåŒã³åºãç°¡åãªã¹ã¯ãªãããè¿œå ããŠã¿ãŸãã
次ã®ããããã®æ¹æ³ã§å®è¡ã§ããŸãã
Dockerfile
ãå€æŽãããšã³ããªãã€ã³ãã®åã®ã³ã³ããã«ç¬èªã®ã¹ã¯ãªãããè¿œå ããŸãã ENTRYPOINT
åŒæ°ã«ãªãããã Dockerfile
ã«CMD
ãè¿œå ããããšã¯ã§ããŸãããdocker cp
ã docker exec
]ããã®ãããDockerfileãå€æŽããã ãã§ã¯å¿
ãããååã§ã¯ãªãããã onrun
ãããªæ©èœãæçã ãšæããŸãã
ãã³ãããªããããéããŠããã®ã§ããïŒ Cassandraã®ãããªå ¬åŒã®Dockerã€ã¡ãŒãžã䜿çšããŠããŠãéå§åŸã«ã¹ããŒããããŒãããå¿ èŠãããå Žåã¯ãç¶æ³ãèæ ®ããŠãã ãã...ããã«ã¯ç¬èªã®bashã¹ã¯ãªãããœãªã¥ãŒã·ã§ã³ãå®è£ ããå¿ èŠããããŸã...ããŒããããã¯éãã§ã
@somebiã¯composeãéããŠããããã§ã...
ã¡ããã©ç§ã®2ã»ã³ãïŒã³ã³ãããèµ·åãããã³ã«æåã§Apacheã¢ãžã¥ãŒã«ãæå¹ã«ããå¿
èŠããããããããã«çéžããŸããïŒSSLã¯Docker Hub wordpress
ã€ã¡ãŒãžã§ããã©ã«ãã§æå¹ã«ãªã£ãŠããŸããïŒã äžçã®çµããã§ã¯ãããŸããããäžæãããã³ã«ããã€ãã®ã³ãã³ããå®è¡ããããšãæãã§ããã®ã§ãã¶ã€ããããšãªãã³ã³ãããã·ãŒã ã¬ã¹ã«äžäžãããããšãã§ããŸãã
ã¡ããã©ç§ã®2ã»ã³ãïŒã³ã³ãããèµ·åãããã³ã«æåã§Apacheã¢ãžã¥ãŒã«ãæå¹ã«ããå¿ èŠããããããããã«çéžããŸããïŒSSLã¯Docker Hub
wordpress
ã€ã¡ãŒãžã§ããã©ã«ãã§æå¹ã«ãªã£ãŠããŸããïŒã äžçã®çµããã§ã¯ãããŸããããäžæãããã³ã«ããã€ãã®ã³ãã³ããå®è¡ããããšãæãã§ããã®ã§ãã¶ã€ããããšãªãã³ã³ãããã·ãŒã ã¬ã¹ã«äžäžãããããšãã§ããŸãã
å¿ èŠãªã¢ãžã¥ãŒã«ãæå¹ã«ãªã£ãŠããã¯ãŒããã¬ã¹ã€ã¡ãŒãžã«åºã¥ããŠæ°ããã€ã¡ãŒãžãäœæãããšãããã¯ç°¡åã«è§£æ±ºã§ããŸãã 次ã«ã代ããã«ãããããšãã°dockerfileã«äœ¿çšããŸãã
FROM wordpress:php7.1
RUN a2enmod ssl
å¥ã®è§£æ±ºçã¯ãã¯ãŒããã¬ã¹ã®DockerfileãããŠã³ããŒãããããã«ã¢ãžã¥ãŒã«ã¢ã¯ãã£ããŒã·ã§ã³ãè¿œå ããããšã§ãã 次ã«ãdockerbuildã䜿çšããŠèªåçšã®æ°ããã€ã¡ãŒãžãäœæããŸãã ããšãã°ãããã¯php7.1ã䜿çšããwordpress5.2ã®Dockerfileã§ãã
63è¡ç®ã§ããã«ã¢ãžã¥ãŒã«ãæå¹ã«ããããSSLçæãå®è¡ã§ããŸãã
ããã¯ãã¹ãŠãç§ãã¡ãããã§è°è«ããŠãããšæãããã§ã¯ãããŸããã åé¡ã¯ãã³ã³ããã®ã©ã€ããµã€ã¯ã«ã§ãéå§æãçµäºæãªã©ã®åçããã¯ãäœæããããšã§ãã
ããã¯docker-composeãžã®çŽ æŽãããè¿œå ã§ãïŒ
ãã®ã¹ã¬ããã®ãããªåçã¯ãKubernetesãDockerïŒãã¯ãããžãŒïŒãçã¿åºããŠãããéãããã¹ãŠãä¿æããŠããçç±ã§ãã誰ããDockerïŒäŒç€ŸïŒãããã«è³Œå ¥ããã³ãã¥ããã£ã®ææ¡/ãªã¯ãšã¹ãã®æè¿æ¹æ³ãå€æŽããããšãé¡ã£ãŠããŸãã /åææžã¿..ã
ãã®ã¹ã¬ããã®ãããªåçããKubernetesãDockerïŒãã¯ãããžãŒïŒãçã¿åºããŠãããéãããã¹ãŠãç¶æããŠããçç±ã§ãã誰ããDockerïŒäŒç€ŸïŒãããã«è³Œå ¥ããŠãã³ãã¥ããã£ã®ææ¡/ãªã¯ãšã¹ãã®æ¹æ³ãå€æŽããããšãé¡ã£ãŠããŸããæè¿/åæãããŠããŸã...
ç§ã¯åæ§ã®æ¹è©å®¶ãæžããŸããããäžå¿«ãªå£°æã¯ãããŸããã§ããïŒããã¯ãå®å šã«ãªãŒãã³ãœãŒã¹ã§ã¯ãªããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã®æ¹éã«æ²¿ã£ãŠãããã¡ã³ããã¯ãæè¡çãªã¢ã«ãŽã³ã®éã瀺ã以å€ã®çç±ãªãã«è°è«ãç¡èŠããŸãïŒãããã¯ååãªæ¯æãåŸãŸãããããã³ã¡ãã»ãŒãžãåé€ãããŸããã
ããã¯ããã®èåŸã«ã©ããªå²æ ¢ãªäººãããã®ãã瀺ããŠããŸãã
ããªãã®ã³ãã¥ããã£ã4幎éäœããèŠæ±ããããªãïŒDockerïŒãç®ãéãããšããããã¯ããªãã圌ããšåãæ¹åãèŠãŠããªãã£ãããšã瀺ããŠããŸãïŒ/
ãããŠä»ãdockerã¯ãããããŠå£²ãåããŸããã
圌ãã¯èãããšãã§ããªãã£ãã®ã§...圌ãã¯è² ããŸããã
æ¥ããããã§ãããã¡ãã£ãšã»ãã
ãã®ãããªãã®ãååšããªãã®ã¯æ¬åœã«æ®å¿µã§ãã onFailure
ããã¯ãäœæã§ããã°ããã£ãã®ã§ãããããã¯ãã«ã¹ãã§ãã¯ã倱æãããšãã«çºçããå¯èœæ§ããããŸãã
ããªãã¡
services:
app:
image: myapp:latest
hooks:
onFailure:
- # Call a monitoring service (from the host machine) to tell it that the service is offline.
ããã¯ãã¢ããªã±ãŒã·ã§ã³ããœã±ãã/ããŒãã«ãã€ã³ããããŠããªãå Žåã«åœ¹ç«ã¡ãŸãã ããã§ã¯ãKubernetesãããããé²ãã¹ãéã§ãããããã¯ããªã倧ããªã€ã³ãã©ã¹ãã©ã¯ãã£ã®å€æŽã§ãããéåžžã«å°ããªç°å¢ã§ã¯ããéãã§ãã
ç·šéïŒ
ãããåé¿ããããã«ãæçµçã«ã³ã³ããã®ãšã³ããªãã€ã³ããæŽæ°ããŠãç£èŠæ©èœããã©ãããããŸããã ããªãã¡
# /app/bin/run_with_monitor
#!/bin/bash
set -eE
updateMonitoringSystem() {
# do something here... This is run from the container, though, unfortunately.
if [[ $? -eq 1 ]]; then
# Failed!
else
# All is good!
fi
}
trap 'updateMonitoringSystem' EXIT
$@
# Dockerfile
....
CMD ["/app/bin/run_with_monitor", "./my-app"
ããã§ããç»åãå€æŽããã«ãããè¡ããšäŸ¿å©ã§ãã
ïŒman_shruggingïŒç«¶åä»ç€ŸïŒKubernetesïŒãæã£ãŠãããã®åºæ¬çãªæ©èœãæ¢ãã«æ¥ãŸãããã代ããã«ãã¿ç®±ã®ç«ãèŠã€ããŸããã
ããã¯æ¬åœã«æ®å¿µã§ããããŒã«ã«ã§ãã¹ãããããã«ãåå¥ã®Dockerã€ã¡ãŒãžãç¶æããå¿ èŠããããŸãã
æããŸããŠããã§ãšãããããŸãïŒroll_eyesïŒ
@LukeStonehmã¯ããã§ãåãã§ãã ã³ã³ãããç«ã¡äžãã£ãåŸã«1ã€ã®ã³ãã³ããå®è¡ããå¿ èŠããããŸãããã代ããã«é«æž©ã®ãŽãã§åŠçãããŸããã å ¬åŒã®ç»åã§90ïŒ ä»¥äžã®è·é¢ã«å°éãããšããèªåã®ç»åãDockerãã¡ã€ã«ã管çããæ°ã«ã¯ãªããŸããã
ããªãã®éã®ããã°ã©ã ããèµ·åæã«ååšããç¹å®ã®ãµãŒãã¹ã«äŸåããŠããŸãã ããšãã°ãMySQLãŸãã¯MongoDBããŒã¿ããŒã¹ã
ãããã£ãŠããããã®å Žåã«docker-compose
ã䜿çšããæ£ããæ¹æ³ã¯ãããŸããã
代ããã«ããŠãŒã¶ãŒã¯æ¬¡ã®ããšãæåŸ ãããŠããŸãã
Dockerfiles
ïŒããã³ããã°ã©ãã³ã°ïŒã®æžãæ¹ãåŠã¶Docker images
ãæ§ç¯ããæ¹æ³ãåŠã¶Dockerfiles
ãäœæããã³ã³ãããçžäºã«åŸ
æ©ããããšã確èªããã³ãŒããè¿œå ããŸãDockerfiles
ãå®æçã«å€æŽããŠãæŽæ°ãé©çšããŸãDockerfiles
ããå®æçã«Docker images
ãæ§ç¯ããŸããããŠãããã¯ã²ã©ãçç±ã§ãïŒ
Docker images
èªåã§æ§ç¯ããŠä¿åããããã¢ããããŒã/ããŠã³ããŒãïŒãã«/ããã·ã¥ïŒããããããšãã«ãããŒããŠã§ã¢ãªãœãŒã¹ãå®æçã«æµªè²»ããŸããDockerfiles
ãæžããããããæ§ç¯ãããããããã¹ãããããããä¿®æ£ãããªã©ã«æéã浪費ããŸã...Docker images
ã®ã¿ãå®è¡ããæ©èœã倱ãããŸãèµ·åãã§ãã¯ãããã°ãããã¯ãã¹ãŠå¿
èŠã§ã¯ãªããå¿
èŠãªãšãã«ãã€ã§ãimage: mysql:8.0.18
ãimage: mysql:8.0.19
å€æŽããã ãã§æžã¿ãŸãã
çŸå®çã«ã¯ãããã¯çŸå®ã®äžçã§çŸåšèµ·ãã£ãŠããããšã§ãã
Dockerfiles
äœæããŠã docker-compose
äœæ¥ã§ããããã«å€æŽãå ããŸããããŠã docker-compose
ã¯ãã§ã«ã»ãšãã©ãã¹ãŠãå®è¡ããŠãããããã1ã€ã®ããšãå®è¡ãããã ãã§ãããšã¯èšããŸããã ããã«éèŠãªããšã«ãã€ã¡ãŒãžã®ãã«ãšãã«ããå«ãã depends_on
ããããã£ã䜿çšããŠäŸåé¢ä¿ãæå®ããŸãã ããã¯ãå®å
šã«æ°ããæ©èœãå®è£
ããããšã§ããããŸãããããã¯ãå¥ã®ãã©ã¡ãŒã¿ãdocker
æž¡ãããšã§ãã
@ binman-ãããã³ã°ãŠã£ã³ããŠ@crosbymichael @dmcgowan @ebriney @ehazlett @eunomie @guillaumerose @jeanlaurent @justincormack @lorenrh @manishtomar @olegburov @routelastresort @spencerhcheng @StefanScherer @thaJeztah @tonistiigi @ulyssessouza @aiordache @ã¯ãªã¹-ãããã¡ãå©@ndeloof
ãã®æ©èœãåæ€èšããããå°ãªããšãããã«ã€ããŠé©åãªè°è«ãããŸãããã
task service
ãã¯ããã¯ã¯ããã®æç¹ã§ç§ã«ãšã£ãŠã¯ããªãããŸãæ©èœããŸãããããã¯ç¹ç°æ§ãæã£ãŠããŸãã 移è¡ãšã¢ããªã±ãŒã·ã§ã³ã®åæåã®ããã«ãäœæãã¡ã€ã«ã«ãã¿ãŒã³ãåºç¯å²ã«é©çšããŸããã ãããããã«ã¹ãã§ãã¯ãæåããããçµäº/ã¿ã¹ã¯ãæ£åžžã«å®äºããã®ãåŸ
ã€ããè¯ããdepends_onããå€ãã®ã¿ã¹ã¯ãããç°¡åã§ä¿¡é Œæ§ã®é«ããã®ã«ããããšã«åæããŸãã
ããã¯æ¬åœã«åœ¹ç«ã€è¿œå ã§ãã
Kubernetesã«ã¯ã©ã€ããµã€ã¯ã«postStartãéããŠãã®æ©èœãããããšã匷調ãã䟡å€ããããšæããŸãã
k8sïŒ= docker-composeã ééã£ããã£ã³ãã«
æ確ã§ã¯ãªãããšããè©«ã³ããŸãããç§ã®ãã€ã³ãã¯æ¬¡ã®ãšããã§ããKubernetesã¯ããããµããŒãããŠããŸããKubernetesãšDockerã®composeã«ã¯åããŠãŒã¹ã±ãŒã¹/ç®çãå€æ°ãããããcomposeã§äœ¿çšããããšã«ã€ããŠã®è°è«ã«ãªããŸãã äžæãªç¹ããããŸãããããããªããã
æå ±!!
dockerã¯ç§ãã¡ã®è©±ãèãããšæããŸãïŒãã®åé¡ãšä»ã®ããã€ãã®åé¡ã«ã€ããŠïŒã https://www.docker.com/blog/announcing-the-compose-specification/
ã³ãã¥ããã£ã®ããŒãºãæºããããã«ãããã§ä»æ§ã«åãçµãã§ã¿ãŸãããã ãã®åèµ·åã«ãããããããªãŒãã³ã§ãã¬ã³ããªãŒãªã³ãã¥ããã£ã«ããããšãã§ããŸãã
æå ±!!
dockerã¯ç§ãã¡ã®è©±ãèãããšæããŸãïŒãã®åé¡ãšä»ã®ããã€ãã®åé¡ã«ã€ããŠïŒã https://www.docker.com/blog/announcing-the-compose-specification/
ã³ãã¥ããã£ã®ããŒãºãæºããããã«ãããã§ä»æ§ã«åãçµãã§ã¿ãŸãããã ãã®åèµ·åã«ãããããããªãŒãã³ã§ãã¬ã³ããªãŒãªã³ãã¥ããã£ã«ããããšãã§ããŸãã
誰ãããã®å€æŽãææ¡ããŸãããïŒ ã¡ãŒãªã³ã°ãªã¹ãã¯ãŸã å©çšã§ããªãã®ã§ã次åã®å Žæã¯ããã«ãããšæããŸãïŒ https ïŒ
ãã®åé¡ã説æããåé¡ã¯èŠåœãããŸãããããããé©åãªå Žæãã©ããã¯ããããŸãã...
ç·šéïŒ httpsïŒ//github.com/compose-spec/compose-spec/issues/84ã§åé¡ãéããŸãã
HEALTHCHECKã䜿çšããŠã次ã®äŸã®ãããªä»ã®ããšãè¡ãããšãã§ããŸãã
Dockerfile
FROM ubuntu
COPY healthcheck.sh /healthcheck.sh
RUN chmod a+x /healthcheck.sh
HEALTHCHECK --interval=5s CMD /healthcheck.sh
CMD bash -c 'set -x; set +e; while true; do cat /test.txt; sleep 3; done'
healthcheck.sh
#/usr/bin/env bash
set -e
FIRST_READY_STATUS_FLAG='/tmp/.FIRST_READY_STATUS_FLAG'
# Health check
echo 'Run command to validate the container status HERE'
# On success
if [ ! -f "${FIRST_READY_STATUS_FLAG}" ]; then
# On first success...
touch "${FIRST_READY_STATUS_FLAG}"
# Run ON_RUN on first health check ok
if [ ! -z "${DOCKER_ON_RUN}" ]; then
eval "${DOCKER_ON_RUN}"
fi
fi
1
ã¹ã¯ãªãããçµäºããŸããDOCKER_ON_RUN
ç°å¢å€æ°ãååšããå Žåã¯ããããå®è¡ããŸããdocker-compose.yml
version: "3.7"
services:
test:
build:
context: .
image: test/on-run
environment:
DOCKER_ON_RUN: echo x >> /test.txt
DOCKER_ON_RUN
ç°å¢å€æ°ã䜿çšããŠãå®è¡åŸã«å®è¡ããã«ã¹ã¿ã ã³ãã³ããæž¡ãããšãã§ããŸãã
docker-compose build
docker-compose up
åºåïŒ
Creating network "tmp_default" with the default driver
Creating tmp_test_1 ... done
Attaching to tmp_test_1
test_1 | + set +e
test_1 | + true
test_1 | + cat /test.txt
test_1 | cat: /test.txt: No such file or directory
test_1 | + sleep 3
test_1 | + true
test_1 | + cat /test.txt
test_1 | cat: /test.txt: No such file or directory
test_1 | + sleep 3
test_1 | + true
test_1 | + cat /test.txt
test_1 | x
test_1 | + sleep 3
test_1 | + true
test_1 | + cat /test.txt
test_1 | x
test_1 | + sleep 3
test_1 | + true
test_1 | + cat /test.txt
test_1 | x
test_1 | + sleep 3
cat: /test.txt: No such file or directory
ã衚瀺ãããŸãã/test.txt
å
ã«è¡šç€ºãããx
ã¯1ã€ã ãã§ããããã誰ããå©ããããšãã§ããããšãé¡ã£ãŠããŸãã
_ãã«ã¹ãã§ãã¯_ãå¿ èŠãªãå Žåã¯ãã¹ã¯ãªããã®æ®ãã®éšåã䜿çšã§ããŸãã
@ reduardo7
åé¿çãããããšãããããŸãã
ãŠãŒã¶ãŒã®äœæãªã©ã§ã³ãã³ã1ãå®è¡ããå¿
èŠãããå Žåã«åããŠãè¿œå ãããã ãã§ãã touch "${FIRST_READY_STATUS_FLAG}"
ããªã¥ãŒã ãããŠã³ãã§ããŸãã
ãããã®ãœãªã¥ãŒã·ã§ã³ã®å€ãã¯ããã®åé¡ã«å¯Ÿããæå¹ãªåé¿çã§ãã ããšãã°ããšã³ããªãã€ã³ãã¹ã¯ãªãããäœæãããšãããã解決ã§ããŸãã
ENTRYPOINT ["./entrypoint.sh"]
ããã«ã¯ãå®éã®ãµãŒãã¹ãŸãã¯ããã»ã¹ãå®è¡ããåã«ãããè€éãªããžãã¯ãå«ãŸããŸãã
ããã¯ãŸã ããã¯ã§ã¯ãããŸããããã³ã³ããã®ã©ã€ããµã€ã¯ã«ã«ããžãã¯ãæ¿å
¥ããããšãã§ããŸãã
äžèšã®ãã¹ãŠãæå³ãããããã§ã¯ãªãããšã¯ç¥ã£ãŠããŸãããããããã€ã³ããªã®ã§ãããªããåçãæ®ã£ãŠãããããšãé¡ã£ãŠããŸãã
ããã¯ã次ã®ãããªãã£ã¬ã¯ãã£ãã䜿çšããŠdocker-compose
å«ããããšãã§ããŸãã
lifecycle:
before_start: "./beforeStartHook.sh"
after_destroy: "./afterDestroyHook.sh"
ãŸãã¯ãã®ããã«ããïŒ
hooks:
before_destroy: "./beforeDestroyHook.sh"
before_create: "./fixFsRights.sh"
ã³ã³ãããroot以å€ã®ãŠãŒã¶ãŒãšããŠèµ·åãããããããã¯ã¹ã¯ãªãããŸãã¯ããŒãã¹ãã©ããã¹ã¯ãªããã¢ãããŒãã䜿çšããŠrootæš©éãå¿ èŠãªãã¡ã€ã«ãäžæžãã§ããŸãã
ãããŒããã®ãããªåºæ¬çãªæ©èœã¯ãŸã å®è£ ãããŠããŸããã
æãåèã«ãªãã³ã¡ã³ã
ãããã£ãŠãDockerã管çããã«ã¯ãã¹ã¯ãªãããŸãã¯Makefileã䜿çšããããšããå§ãããŸãã ã§ã¯ããªãcomposeãäœæãããã®ã
ïŒ ã¹ã¯ãªããã䜿çšããŠã³ã³ããã®ç®¡çãã¹ã±ãŒãªã³ã°ãªã©ãè¡ãããšãã§ããŸã|| dockerfileïŒ
ããããŸããããã®äŸãåãäžããŸããããã¯ãCIããã»ã¹ã§ã¢ããªã±ãŒã·ã§ã³ãã¹ãç°å¢ããããã€ããããã«äœ¿çšãããã®ã§ãã
ã³ã³ãããèµ·åããããmongodbãããããžã§ãã³ã°ããrabbitmqã§ãã¥ãŒãšã¢ã«ãŠã³ãã管çããå¿ èŠããããŸã
ä»æ¥ç§ãããŠããã®ã¯ã次ã®ã¹ã¯ãªããã§ãã
onrun
åœä»€ã䜿çšãããšãdocker-compose -f appmaster.yml -p appmaster up -d
çŽæ¥äœæã§ããŸãããããŠymlãã¡ã€ã«ãããèªã¿ããããªããŸã