
ãã®èšäºã¯ãããŸããŸãªèšèªããã©ãããã©ãŒã ãããã³ãã¯ãããžãŒã¹ã¿ãã¯ã§ã®
dappã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ã«é¢ããã·ãªãŒãºã®å§ãŸãã§ãã dappã«é¢ãã以åã®èšäº
ïŒèšäº
ã®æåŸã«ãããªã³ã¯ãåç
§ïŒã¯ããäžè¬çã§ãããdappã®å¯èœæ§ã«ã€ããŠèª¬æããŸããã æ¬¡ã«ãããå®è³ªçã«è©±ãåãããããžã§ã¯ãã§ç¹å®ã®çµéšãå
±æããŸãã
dapp 0.26.2ã®æè¿ã®ãªãªãŒã¹ã«é¢é£ããŠãYAMLãã¡ã€ã«ã§ã¢ã»ã³ããªãèšè¿°ããæ¹æ³ã瀺ããŸãã
2019幎8æ13æ¥æŽæ°ïŒ dappãããžã§ã¯ãã®ååã
werfã«å€æŽããããã®ã³ãŒããGoã«æžãæããããããã¥ã¡ã³ãã倧å¹
ã«æ¹åãããŸããã
dockersamplesãªããžããª
-atsea-sample-shop-appã®äŸã䜿çšããŠãã¢ã»ã³ããªã説æããŸãã ããã¯ãReactïŒããã³ãïŒãšJava Spring BootïŒããã¯ãšã³ãïŒã§æ§ç¯ãããå°ããªã¹ãã¢ãããã¿ã€ãã§ãã PostgreSQLãããŒã¿ããŒã¹ãšããŠäœ¿çšãããŸãã äœæ¥äžã®ãããžã§ã¯ãã«ãã䌌ããã®ã«ããããã«ãnginxã®ãªããŒã¹ãããã·ãšåçŽãªã¹ã¯ãªãã圢åŒã®æ¯æãã²ãŒããŠã§ã€ã远å ãããŸãã
ãã®èšäºã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¿ã®ã¢ã»ã³ããªã«ã€ããŠèª¬æããŸã
ãnginx ãPostgresSQLãããã³ã²ãŒããŠã§ã€ãåããã€ã¡ãŒãžã¯ã
dappfileãã©ã³ãã®ãã©ãŒã¯ã«ãããŸãã
ãçŸç¶ã®ãŸãŸãã¢ããªã±ãŒã·ã§ã³ããã«ããã
ãªããžããªã®ã¯ããŒã³ãäœæãããšã宿ããJavaããã³Reactã¢ããªã±ãŒã·ã§ã³çšã®Dockerfileã¯path
/app/Dockerfile
ãŸãã ãã®ãã¡ã€ã«ã¯ã2ã€ã®ã¹ããŒãžã€ã¡ãŒãžïŒdappã§ã¯ã¢ãŒãã£ãã¡ã¯ãã§ãïŒãš1ã€ã®æçµã€ã¡ãŒãžãå®çŸ©ããŸãã æ®µéçã«ãjarå
ã®Javaã¢ããªã±ãŒã·ã§ã³ãš/éçãã£ã¬ã¯ããªå
ã®Reactã¢ããªã±ãŒã·ã§ã³ãã¢ã»ã³ãã«ãããŸãã
FROM node:latest AS storefront WORKDIR /usr/src/atsea/app/react-app COPY react-app . RUN npm install RUN npm run build FROM maven:latest AS appserver WORKDIR /usr/src/atsea COPY pom.xml . RUN mvn -B -f pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:resolve COPY . . RUN mvn -B -s /usr/share/maven/ref/settings-docker.xml package -DskipTests FROM java:8-jdk-alpine RUN adduser -Dh /home/gordon gordon WORKDIR /static COPY --from=storefront /usr/src/atsea/app/react-app/build/ . WORKDIR /app COPY --from=appserver /usr/src/atsea/target/AtSea-0.0.1-SNAPSHOT.jar . ENTRYPOINT ["java", "-jar", "/app/AtSea-0.0.1-SNAPSHOT.jar"] CMD ["--spring.profiles.active=postgres"]
éå§ããã«ã¯ããã®ãã¡ã€ã«ãããã®ãŸãŸããã¯ã©ã·ãã¯ãDappfileã«äœæããæ¬¡ã«
dappfile.yml
ãŸãã
Dappfileã¯ãRubyãããã¯ã®ããã«ããåé·ã§ãã
dimg_group do artifact do
ãã¯ã©ã·ãã¯ãDappfileã¯ã2æã®ãªãªãŒã¹ãŸã§dappã§äœ¿çšå¯èœã§ãã£ãã¢ãŒãã£ãã¡ã¯ããªãã·ã§ã³ä»ãã®ãšã¯ã¹ããŒãã§ãã
COPY --from
ã®
COPY --from
ãã£ã¬ã¯ãã£ããšã¯ç°ãªããŸããããã¯ãæçµã€ã¡ãŒãžã®èª¬æã§ã¯ãªããäœãã©ãã«ã³ããŒãããã瀺ãã¢ãŒãã£ãã¡ã¯ãã§ãã äœãã®ã¢ã»ã³ããªã®1ã€ã®çµæãã³ããŒããå¿
èŠãããã»ãŒåãç»åãèšè¿°ããæ¹ãç°¡åã§ãã çŸåšãããŒãžã§ã³0.26.2ãããdapp
ã¯ã€ã³ããŒãã¡ã«ããºã ããµããŒãããŠããŸã ãããã¯ã䜿çšããããšããå§ã
ããŸã
ïŒä»¥äžã®äœ¿çšäŸãåç
§ïŒ ã
ãããŠããã¡ã€ã«ã«é¢ãããã1ã€ã®ã³ã¡ã³ãã
docker build
å Žåãã³ã³ããã¹ãã¯Docker Engineã«éä¿¡ãããŸãã ããã¯éåžžãDockerfileãšã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ã³ãŒãããããã£ã¬ã¯ããªã§ãã dappã®å Žåãã³ã³ããã¹ãã¯Gitãªããžããªã§ããããã®å±¥æŽã«ãããšãdappã¯æåŸã®ãã«ã以éã«çºçãã倿Žãèšç®ããæçµã€ã¡ãŒãžã§å€æŽããããã®ã®ã¿ã倿ŽããŸãã ã€ãŸãã
--from
ã§
--from
ããªã
COPY
ãã£ã¬ã¯ãã£ãã«é¡äŒŒããã®ã¯ããªããžããªã®ã©ã®ãã£ã¬ã¯ããªãŸãã¯ãã¡ã€ã«ãæçµã€ã¡ãŒãžã«ã³ããŒããããã©ãã«çœ®ãããã©ã®ææè
ãå²ãåœãŠãããèšè¿°ãã
git
ãã£ã¬ã¯ãã£ãã§ãã ãŸããåæ§æãäŸåãã倿Žã«ã€ããŠã説æããŸãããããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãã ãã
ã§ã¯ãæ°ããYAMLæ§æã§åãã¢ã»ã³ããªãã©ã®ãã
ã«èŠããããèŠãŠã¿ãŸãããã
artifact: appserver from: maven:latest git: - add: '/app' to: '/usr/src/atsea' shell: install: - cd /usr/src/atsea - mvn -B -f pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:resolve - mvn -B -s /usr/share/maven/ref/settings-docker.xml package -DskipTests --- artifact: storefront from: node:latest git: - add: /app/react-app to: /usr/src/atsea/app/react-app shell: install: - cd /usr/src/atsea/app/react-app - npm install - npm run build --- dimg: app from: java:8-jdk-alpine shell: beforeInstall: - mkdir /app - adduser -Dh /home/gordon gordon import: - artifact: appserver add: '/usr/src/atsea/target/AtSea-0.0.1-SNAPSHOT.jar' to: '/app/AtSea-0.0.1-SNAPSHOT.jar' after: install - artifact: storefront add: /usr/src/atsea/app/react-app/build to: /static after: install docker: ENTRYPOINT: ["java", "-jar", "/app/AtSea-0.0.1-SNAPSHOT.jar"] CMD: ["--spring.profiles.active=postgres"]
ãã¹ãŠããã¯ã©ã·ãã¯ããªDappfileã«éåžžã«äŒŒãŠããŸãããããã€ãã®éãããããŸãã ãŸããYAMLæ§æãéçºãããšãã«ãç¶æ¿ãšãã¹ããæŸæ£ããããšã«ããŸããã å®è·µã瀺ããŠããããã«ãç¶æ¿ã¯æ©èœãè€éãããŠãæã
誀解ãæããŸããã Dockerfileãªã©ã®ç·åœ¢ãã¡ã€ã«ã¯ã¯ããã«æç¢ºã§ããã¹ã¯ãªããã®ããã«èŠããã¹ã¯ãªããã¯ãã¹ãŠãçè§£ããŸãã
第äºã«ãã¢ãŒãã£ãã¡ã¯ãã®çµæãã³ããŒããããã«ããã¡ã€ã«ãé
眮ãããã¹ãdimgã§ã€ã³ããŒãã䜿çšãããããã«ãªããŸããã ããããªæ¹åã远å ãããŸãããæå®ããªãå Žåãå®å
ãã¹ã¯addã§ç€ºããããã®ãšåãã«ãªããŸãã
Dappfileãäœæãããšãã«äœãæ¢ãã¹ãã§ããïŒ Dockerfileã䜿çšãããããžã§ã¯ãã®äžè¬çãªæ¹æ³ã¯ãç°ãªãDockerfileããã£ã¬ã¯ããªã«é
眮ããããšã§ãããããã£ãŠã
COPY
ãã£ã¬ã¯ãã£ãã®ãã¹ã¯ããããã®ãã£ã¬ã¯ããªãåºæºã«ããŠç€ºãããŸãã Dappfileã¯ãããžã§ã¯ãçšã®ãã®ã§ããã
git
ãã£ã¬ã¯ãã£ãã®ãã¹ã¯ãªããžããªã®ã«ãŒãã«çžå¯Ÿçã§ãã 2çªç®ã®ãã€ã³ãã¯ã
WORKDIR
ãã£ã¬ã¯ãã£ãã§ãã Dappfileã§ã¯ãdockerãã£ã¬ã¯ãã£ãã¯æåŸã®ã¹ãããã§å®è¡ãããããã
cd
åŒã³åºãã䜿çšããŠæ®µéçã«ç®çã®ãã£ã¬ã¯ããªã«ç§»åããŸãã
ãã«ãã®æ¹å
Javaã¢ããªã±ãŒã·ã§ã³ã®ãã«ãã¯ãå°ãªããšã2ã€ã®ã¹ãããã«åå²ã§ããŸããäŸåé¢ä¿ãããŠã³ããŒãããŠãã¢ããªã±ãŒã·ã§ã³ããã«ãããŸãã æåã®ã¹ãããã¯
pom.xml
倿Žã«äŸåãã2çªç®ã¯Javaãã¡ã€ã«ãèšè¿°åããªãœãŒã¹ã®å€æŽã«äŸåããŸããäžè¬ã«ãsrcãã£ã¬ã¯ããªã®å€æŽã¯jarã®åæ§ç¯ã«ã€ãªãããšèšããŸãã
before_install
ã¯
4ã€ã®æ®µéããããŸãïŒ
before_install
ïŒãœãŒã¹ããªãå ŽåïŒããã³
install
ã
before_setup
ã
setup
ïŒ
git
ãã£ã¬ã¯ãã£ãã§æå®ããããã¹ã§ãœãŒã¹ãæ¢ã«å©çšã§ããå ŽåïŒã
äŸåé¢ä¿ã®ããŠã³ããŒããããç©æ¥µçã«ããã«ã¯ã
dependency:resolve
ã§ã¯ãªããmavenã®
dependency:go-offline
ã¿ãŒã²ãããæå®ã
dependency:resolve
ã ããã¯åççãªæ±ºå®ãããããŸããã
pom.xml
ã¯ããŸãé »ç¹ã«å€æŽãããŸãããã
dependency:resolve
ã¯ãã¹ãŠãããŠã³ããŒããããã¢ããªã±ãŒã·ã§ã³ã®ãã«ã段éã§ãMavenãªããžããªãŒïŒäžå€®ãŸãã¯ãã¯ãµã¹/ã¢ãŒãã£ãã¡ã¯ã/ ...ïŒãåŒã³åºãããŸãã
åèšã§ãäŸåé¢ä¿ãããŠã³ããŒãããã¹ãããã
install
ã¹ããŒãžã«ç§»åã§ããŸãã
install
ã¹ããŒãžã¯ã
pom.xml
ãžã®å€æŽãŸã§ãã£ãã·ã¥ã«æ®ããã¢ããªã±ãŒã·ã§ã³ã¢ã»ã³ããªã
setup
ã¹ããŒãžã«ç§»åããŠã
src
ãã£ã¬ã¯ããªã«å€æŽã®äŸåé¢ä¿ãæžã蟌ã¿
setup
ã
artifact: appserver from: maven:latest git: - add: /app to: /usr/src/atsea stageDependencies: install: ['pom.xml'] setup: ['src'] shell: install: - cd /usr/src/atsea - mvn -B -f pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:go-offline setup: - cd /usr/src/atsea - mvn -B -s /usr/share/maven/ref/settings-docker.xml package -DskipTests
Reactã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ã¯ ã
install
段éã§äŸåé¢ä¿ãããŠã³ããŒã
install
段éãšã
setup
段éã§ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯
install
段éã®2段éã«åããããšãã§ã
setup
ã äŸåé¢ä¿ã¯
/app/react-app/package.json
説æãããŠã
/app/react-app/package.json
ã
artifact: storefront from: node:latest git: - add: /app/react-app to: /usr/src/atsea/app/react-app stageDependencies: install: ['package.json'] setup: ['src', 'public'] shell: install: - cd /usr/src/atsea/app/react-app - npm install setup: - cd /usr/src/atsea/app/react-app - npm run build
stageDependencies
ã®ãã¹ã¯ã
add
æå®ããããã¹ã«é¢é£ããŠããããšã«æ³šæããŠãã ããã
ã³ããããšãã£ãã·ã¥
次ã«ã
stageDependencies
ã©ã®ããã«
stageDependencies
ããããèŠãŠã¿ãŸãããã ãããè¡ãã«ã¯ãjavaãã¡ã€ã«ã倿ŽããŠã³ããããã
dapp dimg build
ã¢ã»ã³ããªãå®è¡ããŸãã ãã°ã§ã¯ã
setup
ã¹ããŒãžã®ã¿ãè¡ãããããšã
setup
ã
Setup group Git artifacts: apply patches (before setup) ... [OK] 1.7 sec signature: dimgstage-atsea-sample-shop-app:e543a0f90ba39f198b9ae70a6268acfe05c6b3a6e25ca69b1b4bd7414a6c1067 Setup [BUILDING] [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building atsea 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 39.283 s [INFO] Finished at: 2018-02-05T13:18:47Z [INFO] Final Memory: 42M/355M [INFO] ------------------------------------------------------------------------ Setup [OK] 46.71 sec signature: dimgstage-atsea-sample-shop-app:264aeb0287bbe501798a0bb19e7330917f3ec62b3a08e79a6c57804995e93137 commands: cd /usr/src/atsea mvn -B -s /usr/share/maven/ref/settings-docker.xml package -DskipTests building artifact `appserver` [OK] 49.12 sec
pom.xml
ã倿Žãããã«ããã³ãããããŠå®è¡ãããšãããŠã³ããŒããããäŸåé¢ä¿ã䜿çšããŠ
install
段éãåæ§ç¯ããã
setup
段éãå®è¡ãããŸãã
äŸåé¢ä¿
Javaã¢ããªã±ãŒã·ã§ã³çšã«2ã€ã®ã¹ãããã«ã¢ã»ã³ããªãåå²ãããšãäŸåé¢ä¿ããã£ãã·ã¥ããã
install
ã¹ããŒãžã€ã¡ãŒãžãäŸåé¢ä¿ã¹ãã¢ãšããŠæ©èœããããã«ãªããŸããã ãã ããdappã«ã¯ããã®çš®ã®ã¹ãã¬ãŒãžçšã®ãã£ã¬ã¯ããªãããŠã³ãããæ©èœããããŸãã
tmp_dir
äžæãã£ã¬ã¯ããªããããŠã³ãã§ããŸããäžæãã£ã¬ã¯ããªã®æå¹æéã¯1ã€ã®ã¢ã»ã³ããªã§ããã
build_dir
ãã
build_dir
ã§ããŸããããã¯åãããžã§ã¯ãã«åºæã®æ°žç¶çãªãã£ã¬ã¯ããªã§ãã
ããã¥ã¡ã³ãã«ã¯Dappfileã®ãã£ã¬ã¯ãã£ããå«ãŸããŠãããã¢ããªã±ãŒã·ã§ã³ã®å Žåã
build_dir
ãã
build_dir
ã«ããŠã³ããµããã£ã¬ã¯ããªã远å ããæ¹æ³ã瀺ããŸãã
artifact: appserver from: maven:latest > mount: > - from: build_dir > to: /usr/share/maven/ref/repository git: ... shell: install: ...
--build-dir
ãã©ã°ãæå®ããªãå Žåãdappã¯
~/.dapp/builds/< dapp>
ãŸãã
build_dir
ã¯ããã«ãåŸã«
mount
ãã£ã¬ã¯ããªã衚瀺ãããŸãããã®ãã£ã¬ã¯ããªã«ã¯ãããŠã³ãããããã£ã¬ã¯ããªã®ããªãŒããããŸãã ãããžã§ã¯ãåã¯ãGitãªããžããªãå«ããã£ã¬ã¯ããªã®ååãšããŠèšç®ãããŸãã åããã£ã¬ã¯ããªãããããžã§ã¯ããåéããå Žåããããžã§ã¯ãåã
--name
ãã©ã°ã§ç€ºããããŸãã¯
--build-dir
ãã©ã°ã䜿çšããŠç°ãªããã£ã¬ã¯ããªãæç€ºçã«æå®ã§ããŸãã ãã®å Žåãåådappã¯ãããžã§ã¯ãã®Gitãªããžããªãä¿åãããŠãããã£ã¬ã¯ããªããèšç®ãããããã
~/.dapp/builds/atsea-sample-shop-app/mount/usr/share/maven/ref/repository/
ãŸã
äœæãå®è¡ãã
ããã«ã€ããŠã¯åã«èšåããŸããã§ããããdappã䜿çšããŠãã«ãããdocker-composeã䜿çšããŠæ€èšŒã®ããã«ãããžã§ã¯ããå®è¡ã§ããŸãã éå§ããã«ã¯ãç»åã®ã¿ã°ãäœæããdappã«ãã£ãŠåéãããç»åã䜿çšãããããã«docker
docker-compose.yml
ãä¿®æ£ããå¿
èŠããããŸãã
ã€ã¡ãŒãžããã¹ãããæãç°¡åãªæ¹æ³ã¯ããã©ã°ãªãã§
dapp dimg tag
ãå®è¡ããããš
dapp dimg tag
ïŒ
2019幎8æ13æ¥æŽæ°ïŒ werfã§ã¯ãã¿ã°ä»ãã®å®è£
æ¹æ³ãå°ãç°ãªããŸãã
ããã¥ã¡ã³ããåç
§ããŠãã ãã ïŒã ãã®ã³ãã³ãã¯ã
latest
ã¿ã°ãšãšãã«ç»ååã衚瀺ããŸãã æ¬¡ã«
docker-compose.yml
ãä¿®æ£ããå¿
èŠããããŸãã
build
ãã£ã¬ã¯ãã£ããåé€ãã
dapp dimg tag
åºåãã
image
åãæã€
image
ãã£ã¬ã¯ãã£ãã远å ããŸãã
äŸïŒ
payment_gateway: image: atsea-sample-shop-app/payment-gateway
ããã§ã
docker-compose up
ãããžã§ã¯ããéå§ã§ããŸãïŒäœããã®çç±ã§ãã«ããæ®ã£ãŠããå Žåã¯ã
--no-build
ãã©ã°ã圹ç«ã¡ãŸãïŒã

ãµã€ãã¯ããŒã«ã«ãã¹ãã§å©çšå¯èœã§ãïŒ8080ïŒ

PS
èšäºã®æ¬¡ã®éšåã§ã¯ã以äžã®æç¥šã®çµæã«åºã¥ããŠãPHPãŸãã¯Node.jsã§ã®ã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ã«ã€ããŠèª¬æããŸãã
ããã°ãã芧ãã ããã