Slide 1

Slide 1 text

%PDLFSΛ࢖ͬͨ αʔϏεߏங ଎शձ!8"/5&%-: EPDLFS@XBOUFEMZ %BJTVLF'VKJUB!EUBO ʢެ։൛ʣ

Slide 2

Slide 2 text

Daisuke Fujita @dtan4 Πϯλʔϯ
 @ΠϯϑϥνʔϜ

Slide 3

Slide 3 text

࣭໰౳͸4ZODͷ෦԰ʹͯड͚෇͚·͢ ʢຊ೔ΑΓʣ.BD"QQ4UPSF͔Βμ΢ϯϩʔυ΋Ͱ͖·͢ʂ CHECK! http://s.wantedly.com/1SL5Um0

Slide 4

Slide 4 text

%PDLFSೖͬͯ·͔͢ʁಈ͖·͔͢ʁ CHECK! $ docker -v Docker version 1.10.0, build 590d510 $ docker ps CONTAINER ID … $ docker-compose -v docker-compose version 1.6.0, build unknown ʢόʔδϣϯ͸ಛʹؾʹ͠ͳ͍Ͱ͢ɻ΋ͪΖΜ࠷৽Ͱ͋Δ΄ͲΑ͍ʣ

Slide 5

Slide 5 text

ຊ೔ͷ಺༰ w 8BOUFEMZͰͷ։ൃʹ͓͚Δॾ໰୊ w %PDLFS$PNQPTFͰαʔϏεΛಈ͔ͦ͏ w %PDLFS$PNQPTFͰߏஙͨ͠ΞϓϦΛ
 σϓϩΠ͠Α͏ w %PDLFS1BB4*BB4

Slide 6

Slide 6 text

Wantedly Ͱͷ։ൃʹ
 ͓͚Δॾ໰୊

Slide 7

Slide 7 text

www.wantedly.com Λ
 ࢧ͑Δٕज़ w 3BJMTͷ΄͔ʹʜ w 1PTUHSF42- w &MBTUJDTFBSDI w .FNDBDIFE w 3FEJT w 1IBOUPN+4 w ։ൃɾςετʹ͸͜ΕΒͷαʔϏε͕ඞཁ

Slide 8

Slide 8 text

www.wantedly.com Λ
 ࢧ͑Δٕज़ w )PNFCSFXʹΑΔ։ൃ؀ڥߏங w brew updateͰ։ൃ؀ڥ͕յΕΔ w &MBTUJDTFBSDI͸ຊମͱϓϥάΠϯͷ
 όʔδϣϯΛγϏΞʹ߹Θͤͳ͍ͱμϝ w ຊ൪ͷ&MBTUJDBDIF͸3FEJTYͷΈ w ΠϯετʔϧεΫϦϓτͰແཧ΍Γ
 όʔδϣϯΛݻఆʜ w bundle install͕ࣦഊʢಛʹ$֦ுHFNʣ

Slide 9

Slide 9 text

Elasticsearch on Docker

Slide 10

Slide 10 text

Elasticsearch on Docker w ຊ൪ͷ&MBTUJDTFBSDI͸%PDLFSίϯςφͱ ͯ͠Քಇ͍ͯ͠Δ w RVBZJP্ͰΠϝʔδ؅ཧ w αʔϏεʹ߹Θͤͨνϡʔχϯά w ಠࣗࣙॻΛಉࠝ w ͜ΕΛ։ൃ΍ςετͰ࢖͍͍ͨʜ

Slide 11

Slide 11 text

ϑΟʔνϟϒϥϯνͷ
 σϓϩΠ w ຊ൪؀ڥ 1SPEVDUJPO 2"؀ڥ 2" w 2"ॱ൪଴ͪ໰୊ w 2"ͭͩͱ଍Γͳ͘ͳ͖ͬͯͨ w ࣗ෼ͷϒϥϯνΛؾܰʹσϓϩΠͰ͖Δ
 ؀ڥ͕΄͍͠

Slide 12

Slide 12 text

ϚΠΫϩαʔϏεج൫ w ੲ͔Β3BJMTͰ࣮૷͞Ε͍ͯͨػೳʹ͍ͭͯɺ ύϑΥʔϚϯε޲্ͷͨΊʹ(PͰ࠶࣮૷
 ͢Δྫ͕͋Δ w 4ZOD΍8BOUFEMZ5PPMTͷΑ͏ʹɺຊମͱ ͸ҟͳΔαʔϏεΛϦϦʔε͢Δػձ͕
 ૿͑ͨ w ͜Μͳͱ͖ɺ޻਺Λ͔͚ͯΠϯϑϥΛ༻ҙ͢ ΔͷͰ͸ͳ͘DockerfileΛॻ͚͹σϓϩΠͰ ͖ΔΑ͏ͳ؀ڥ͕΄͍͠

Slide 13

Slide 13 text

Docker

Slide 14

Slide 14 text

Docker Ͱ؀ڥߏங w ΞϓϦ୯ҐͰ؀ڥΛಠཱͤ͞ΒΕΔ w ͜ͷαʔϏεͰ͸&Tɺ͋ͷαʔϏεͰ ͸&TʜͰ΋ॊೈʹରԠՄೳ w ຊ൪؀ڥΛखݩͰ༰қʹ࠶ݱՄೳ w ΞʔΩςΫνϟґଘ͔Β୤٫Ͱ͖Δ w ඇΠϯϑϥͰ΋%PDLFSpMFΛॻ͖΍͍͢ w ͳͲͳͲ

Slide 15

Slide 15 text

Docker Ͱ؀ڥߏங w ෳ਺ίϯςφͷ؅ཧ͕໘౗ w 3BJMT͸൪ϙʔτͰཱͨͤͯɺ 1PTUHSF42-ͱMJOLͰͭͳ͛ͯʜ w ্ཱͪ͛ॱং΋ߟྀ͠ͳ͍ͱ͍͚ͳ͍ 1PTUHSF42- 3FEJT 3BJMT 3000/tcp link db:postgres link redis:redis

Slide 16

Slide 16 text

Docker Compose

Slide 17

Slide 17 text

EPDLFSDPNQPTF Docker Compose w ෳ਺ͷ%PDLFSίϯςφͰߏ੒͞ΕΔΞϓϦ Λ؆୯ʹ؅ཧ͢ΔͨΊͷπʔϧ w :".-Ͱ֤ίϯςφͷىಈߏ੒ͱ࿈ܞΛهड़ w docker runͷΦϓγϣϯΛߏ଄తʹ
 ॻ͚ΔͨΊɺ୯ҰίϯςφͰ΋ศར w ίϚϯυҰൃͰΞϓϦͷVQEPXO
 TDBMJOH͕Մೳ

Slide 18

Slide 18 text

docker-compose.yml ຊൃදͰ͸$PNQPTFpMFGPSNBUWʹ
 ४ڌͯ͠આ໌͍͖ͯ͠·͢ db: image: postgres web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp ports: - "3000:3000" links: - db

Slide 19

Slide 19 text

docker-compose.yml ຊൃදͰ͸$PNQPTFpMFGPSNBUWʹ
 ४ڌͯ͠આ໌͍͖ͯ͠·͢ db: image: postgres web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp ports: - "3000:3000" links: - db $ docker build . web $ docker run -p 3000:3000 -v .:/myapp --links db web

Slide 20

Slide 20 text

$ git clone \ https://github.com/dtan4/docker-service-rails.git $ git checkout step0 Docker Compose Ͱ
 Rails ΛݐͯͯΈΑ͏

Slide 21

Slide 21 text

w ·ͣ1PTUHSF42-ΛཱͯΔهड़ Docker Compose Ͱ
 Rails ΛݐͯͯΈΑ͏ db: image: postgres:9.4

Slide 22

Slide 22 text

w ͍ͭͮͯ3BJMTΛཱͯΔهड़ Docker Compose Ͱ
 Rails ΛݐͯͯΈΑ͏ web: build: . command: bin/rails s -p 3000 -b '0.0.0.0' environment: - DATABASE_HOST=db - DATABASE_PORT=5432 - DATABASE_USER=postgres ports: - "3000:3000" links: - db

Slide 23

Slide 23 text

w ىಈʂ w ৽͍͠λʔϛφϧ΢Οϯυ΢Λ։͍ͯʜ w σʔλϕʔεͷηοτΞοϓ Docker Compose Ͱ
 Rails ΛݐͯͯΈΑ͏ $ docker-compose build $ docker-compose up $ docker-compose run web bin/rake db:setup %PDLFS.BDIJOF্ͰCVJME͕ࣦഊ͢Δ৔߹͸ɺ $ docker-machine stop default $ docker-machine up default Ͱ7.Λ࠶ىಈ͍ͯͩ͘͠͞ VQ͕ࣦഊ͢Δ৔߹͸ɺ $ docker-compose stop $ docker-compose rm -f ͰίϯςφΛফͯ͠΍Γ௚͢

Slide 24

Slide 24 text

w ΞΫηεͯ͠Έ·͠ΐ͏ʂ Docker Compose Ͱ
 Rails ΛݐͯͯΈΑ͏ $ open http://$(docker-machine ip dev):3000 # Linux など直接 Docker が稼働しているなら $ open http://localhost:3000 EFGBVMU EPDLFSWNͳͲ खݩͷ؀ڥʹ߹Θ͍ͤͯͩ͘͞

Slide 25

Slide 25 text

αʔόىಈޙͷॳظԽॲཧ͸ɺFOUSZQPJOU
 εΫϦϓτΛ͔·ͤΔํ๏͕͋Δ ͋ΘͤͯΑΈ͍ͨ
 IUUQTNFEJVNDPN!LFMTFZIJHIUPXFSGSBDUVSFEBQQTDED Tips #!/bin/bash bin/rake db:create bin/rake db:migrate bin/rake db:seed exec $@ FROM ruby:2.3.0-slim MAINTAINER dtan4 # … ENTRYPOINT ["/app/entrypoint.sh"] CMD ["bin/rails", "s]

Slide 26

Slide 26 text

w KXJMEFSOHJOYQSPYZ w VIRTUAL_HOST؀ڥม਺ͷத਎Λ༻͍ͯ
 ϧʔςΟϯάΛ࡞੒ w ઌ΄Ͳͷdocker-compose.ymlʹҎԼΛ௥Ճ nginx ΋૊Έ߹ΘͤΑ͏ nginx: image: jwilder/nginx-proxy ports: - 80:80 volumes: - /var/run/docker.sock:/tmp/docker.sock:ro

Slide 27

Slide 27 text

w 3BJMTͷϙʔτׂ౰Λͳ͘͢ w VIRTUAL_HOST؀ڥม਺Λ௥Ճ nginx ΋૊Έ߹ΘͤΑ͏ web: build: . command: bin/rails s -p 3000 -b '0.0.0.0' environment: - DATABASE_HOST=db - DATABASE_PORT=5432 - DATABASE_USER=postgres - VIRTUAL_HOST=docker.sokushu.dev links: - db

Slide 28

Slide 28 text

w ىಈʂ w ઃఆͨ͠ϗετ໊ͰΞΫηε w /etc/hostsΛॻ͖׵͑ͯϒϥ΢βͰ΋ nginx ΋૊Έ߹ΘͤΑ͏ $ docker-compose up $ curl -H "Host: docker.sokushu.dev" \ http://$(docker-machine ip docker-vm)

Slide 29

Slide 29 text

σϓϩΠ

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

Heroku w git push͢Δ͚ͩͰΞϓϦ͕σϓϩΠ͞Εɺ
 ࣗಈͰ63-΋ׂΓৼΒΕΔ w 1PTUHSF42- 3FEJT .FNDBDIFE͸ඪ४Ͱϓ ϥάΠϯ͕༻ҙ͞Ε͍ͯΔ w ͠͹Β͘લʹ%PDLFSରԠ΋ͨ͠ w खݩͰಉ͡Α͏ͳߏ੒Λ࠶ݱͰ͖Δ w ࣗલOHJOY &MBTUJDTFBSDIͳͲ͸ݐͯΒΕͳ͍

Slide 33

Slide 33 text

Paus w ΠϯυωγΞޠͰʮ͘͡Βʯ w docker-compose.ymlॻ͍ͯgit push͢Δ
 ͚ͩͰɺΫϥ΢υ্ʹΞϓϦέʔγϣϯ͕
 ىಈ͢Δ؆қ1BB4 w $PSF04%PDLFS EUBOQBVT

Slide 34

Slide 34 text

Paus ʹσϓϩΠ͠Α͏ • git checkout master w docker-compose.ymlมߋ web: image: quay.io/dtan4/docker-service-rails:latest command: bin/rails s -p 8080 -b '0.0.0.0' environment: - DATABASE_HOST=db - DATABASE_PORT=5432 - DATABASE_USER=postgres ports: - 8080 links: - db

Slide 35

Slide 35 text

Paus ʹσϓϩΠ͠Α͏ w IUUQQBVTXBOUFEMZDPNͰެ։伴ొ࿥ ࣗ෼ͷϢʔβ໊ 44)ެ։伴

Slide 36

Slide 36 text

Paus ʹσϓϩΠ͠Α͏ • ~/.ssh/configʹҎԼΛ௥Ճ Host paus HostName paus.wantedly.com User git Port 2222 IdentityFile ~/.ssh/id_rsa ઌ΄Ͳొ࿥ͨ͠ެ։伴ͷ ϖΞͱͳΔൿີ伴

Slide 37

Slide 37 text

Paus ʹσϓϩΠ͠Α͏ w ϦϞʔτϦϙδτϦpausΛ௥Ճ $ git remote add paus \ paus:/

Slide 38

Slide 38 text

Paus ʹσϓϩΠ͠Α͏ w git pushͯ͠σϓϩΠʂ $ git push paus master

Slide 39

Slide 39 text

Paus ʹσϓϩΠ͠Α͏ σϓϩΠ͞Εͨ ΞϓϦͷ63-

Slide 40

Slide 40 text

Paus ΞʔΩςΫνϟ %PDLFS
 $PNQPTF FUDE HJUSFDFJWFE git push docker-compose
 up etcdctl set 7VMDBOE http://dtan4-rails-ffe7rf8.example.com XFC EC XFC EC

Slide 41

Slide 41 text

Docker PaaS / IaaS

Slide 42

Slide 42 text

Docker PaaS / IaaS w )FSPLVΫϩʔϯ w EPLLV BMU 'MZOO %FJT &NQJSF w ಠࣗܗࣜ w ,VCFSOFUFT "NB[PO&$4 w Πϯϑϥ͝ͱ؅ཧ w 5VUVN %$)2JP

Slide 43

Slide 43 text

·ͱΊ

Slide 44

Slide 44 text

·ͱΊ w 8BOUFEMZͷ։ൃݱ৔Ͱͷॾ໰୊ʹର͢Δ
 ղܾࡦͱͯ͠ɺ%PDLFSΛ༻͍ͨ؀ڥߏஙΛ ঺հ͠·ͨ͠ w %PDLFS$PNQPTFΛ༻͍ͯ3BJMTͱෳ਺ͷ αʔϏεΛ૊Έ߹ΘͤͨΞϓϦ͕ߏஙͰ͖Δ Α͏ʹͳΓ·ͨ͠ w 1BB4*BB4ͷ܈༤ׂڌ࣌୅