Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Dockerで作るRails実行環境
Search
Tetsushi Hasesaku
November 09, 2018
Technology
340
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Dockerで作るRails実行環境
Tetsushi Hasesaku
November 09, 2018
More Decks by Tetsushi Hasesaku
See All by Tetsushi Hasesaku
コードリファクタリングの手引き
hare8563
2
690
Vagrantで作るRails開発環境構築
hare8563
0
320
VagrantとDockerで作る、ポータブル開発環境
hare8563
2
820
Other Decks in Technology
See All in Technology
壊して学ぶAWS CDK: そのcdk deployで消えるもの、残るもの
k_adachi_01
1
380
Making sense of Google’s agentic dev tools
glaforge
1
270
ボーイスカウトルールでメモリやスキルを改善しよう
azukiazusa1
4
1.4k
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
13
6.4k
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
14
2.1k
AIと共生する開発者プラットフォーム:バクラクのモノレポ×マイクロサービス基盤
sakajunquality
2
3.7k
SREとQA 二人三脚で進めるSLO運用/sre-qa-slo
sugitak
0
820
発表と総括 / Presentations and Summary
ks91
PRO
0
140
なぜ私たちのSREプラクティスはなかなか機能しないのか 〜システムより先に組織を見る〜 / Why our SRE practices aren't really working
vtryo
4
4k
穢れた技術選定について
watany
17
5.4k
DatabricksにおけるMCPソリューション
taka_aki
1
270
企業でAWS Organizationsを動かすための組織設計の考え方
nrinetcom
PRO
1
110
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
240
The Curse of the Amulet
leimatthew05
2
13k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
The SEO identity crisis: Don't let AI make you average
varn
0
510
The Cost Of JavaScript in 2023
addyosmani
55
10k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Unsuck your backbone
ammeep
672
58k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
180
Transcript
%PDLFSͰ࡞Δ3BJMT࣮ߦڥ ࠤٱ࢜
w ࠤٱ࢜ w ϐΫγϒגࣜձࣾ w ͳΜͰ͢ΔΤϯδχΞ w αʔόαΠυ 3VCZ 1)1
$ w ϑϩϯτΤϯυ 3FBDU 5ZQFTDSJQU w ڥߏங "84 7BHSBOU %PDLFS w ςετ 4FMFOJVN "QQJVN w 6OJUZ w झຯϓϩάϥϛϯάͱ$(࡞ ࣗݾհ
%PDLFSͱ
%PDLFS w ίϯςφܕԾڥΛ࡞ɺɺ ࣮ߦ͢ΔͨΊͷϓϥοτϑΥʔϜ w ϛυϧΣΞͷΠϯετʔϧ֤छ ڥઃఆΛίʔυԽ͠ɺͦͷ্ͰΞ ϓϦέʔγϣϯΛ࣮ߦͰ͖Δ
ίϯςφܕԾڥ
ίϯςφܕԾڥɹ w ϗετ04 -JOVY ͱΧʔωϧ෦Λڞ༗ͨ͠Ծڥ w Χʔωϧ෦͕ڞ༗͞ΕΔͨΊಉҰͷ04 -JOVY ্Ͱ͔͠ಈ͔͢ ͜ͱ͕Ͱ͖ͳ͍
w ैདྷͷԾڥ ϗετܕ ͱҧ͍ɺԾϚγϯ෦ΛͨͯΔඞཁ͕ ͳ͍ͨΊɺΦʔόϔου͕গͳ͍
None
3BJMT
3BJMT w 3VCZPO3BJMT w 3VCZͰ͏αʔόαΠυϑϨʔϜ ϫʔΫ w .7$ΞʔΩςΫνϟ w lઃఆΑΓنz
lಉ͜͡ͱΛ܁Γ ฦ͞ͳ͍Λҙࣝͨ͠ϓϩάϥϛϯ άελΠϧ
%PDLFSͷϝϦοτ
w ࣮ߦڥͷίʔυԽʹΑΔόʔδϣϯཧͱ༰қͳ w εΫϥοϓϏϧυ w ΞϓϦέʔγϣϯ࣮ߦͷ࠶ݱੑ
Ͱɺ࡞͍͖ͬͯ·͠ΐ͏
%PDLFSͷ։ൃڥΛߏங w 7JSUVBM#PYͷΠϯετʔϧ w IUUQTXXXPSBDMFDPNUFDIOFUXPSLTFSWFSTUPSBHFWJSUVBMCPY EPXOMPBETJOEFYIUNM TT4PVSDF4JUF*EPUOKQa w 7BHSBOUͷΠϯετʔϧ w
IUUQTXXXWBHSBOUVQDPN w 7BHSBOUڥͷΫϩʔϯ w IUUQTHJUIVCDPN)BSF4Q[%PDLFS
%PDLFSͷ։ൃڥΛߏங • vagrant upͰ7JSUVBM#PY্ʹ$PSF04ڥΛ࡞Δ w ్தɺύεϫʔυ͕ฉ͔ΕͨΒɺϗετϚγϯͷϩάΠϯʹͬͯ ͍ΔύεϫʔυΛೖྗ • vagrant sshͰԾϚγϯʹϦϞʔτଓ
%PDLFSΛ৮ͬͯΈΑ͏
%PDLFSΛ৮ͬͯΈΑ͏ • docker run -it ruby:2.5.3 /bin/bash
%PDLFSΛ৮ͬͯΈΑ͏ • docker run -it ruby:2.5.3 /bin/bash • docker run
%PDLFSίϯςφͷىಈ • -itΦϓγϣϯlJzzJOUFSBDUJWFz lUzzUUZz • ruby:2.5.3 ࣮ߦ͢Δ%PDLFSΠϝʔδ • /bin/bashίϯςφ্Ͱ࣮ߦ͢ΔίϚϯυ
docker run -it ruby:2.5.3 /bin/bash
Ͱɺ3BJMTͷڥΛߏங͢Δͷʹඞཁͳ ύοέʔδΛΠϯετʔϧ͍͖ͯ͠·͢
curl -sL https://deb.nodesource.com/setup_10.x | bash - apt-get update -qq
apt-get install -y build-essential libpq-dev nodejs npm install -g yarn mkdir -p /usr/src/rails-server
ऴΘͬͨΒɺFYJUͰऴྃͯ͘͠ ͍ͩ͞
exit
%PDLFSΛ৮ͬͯΈΑ͏ w εφοϓγϣοτ͕͋Δ͔֬ೝͯ͠Έ·͠ΐ͏ • docker ps -a
ఀࢭதͷίϯςφ͔Β৽͍͠Π ϝʔδΛ࡞Γ·͢
%PDLFSΛ৮ͬͯΈΑ͏ • docker commit 7e7d0dcf9978 prepare-rails • docker commit: ίϯςφ͔Β৽͍͠ΠϝʔδΛ࡞
• 7e7d0dcf9978: ϕʔεͱͳΔίϯςφID • prepare-rails: ࡞͢ΔΠϝʔδ໊
docker commit
εφοϓγϣοτ͏͍Βͳ ͍ͷͰফ͠·͠ΐ͏
%PDLFSΛ৮ͬͯΈΑ͏ • docker rm 7e7d0dcf9978 • docker rm: ίϯςφΛআ͢Δ •
7e7d0dcf9978: আ͢ΔίϯςφID
͜ΕͰɺ%PDLFSΠϝʔδ͕Ͱ͖ ͕͋Γ·ͨ͠
͜ͷΠϝʔδΛڞ༗͢Εɺͩ ΕͰಉ͡ίϯςφΛ࡞Ε·͢
Ͱʜ
ϑΝΠϧαΠζ͕Ͱ͔͍͔Βɺ͜ ΕΛ1VTI1VMM͢Δӡ༻͖͍ͭ
ͳʹΑΓɺόʔδϣϯཧ͠ʹ ͍͘
%PDLFSpMFͷग़൪Ͱ͢
%PDLFSpMFͷ࡞
%PDLFSpMFͷ࡞ ҎԼɺ%PDLFSpMFΛ)0.&TIBSFSBJMTBQQ্ʹ࡞ ͜ΕΛͱʹɺΠϝʔδΛϏϧυ͠·͢ FROM prepare-rails WORKDIR /usr/src/rails-server COPY Gemfile
/usr/src/rails-server/Gemfile COPY Gemfile.lock /usr/src/rails-server/Gemfile.lock RUN bundle install
%PDLFSpMFͷ࡞ • docker build —-tag author/rails-server:latest . • docker build:
Dockerfile͔ΒΠϝʔδΛ࡞ • —-tag: ΠϝʔδʹλάΛ͚ͭΔ • author/rails-server:latest: λά໊ • . : Dockerfile͕͋ΔσΟϨΫτϦ
Ͱɺ͜ͷ%PDLFSΠϝʔδΛͬͯ 3BJMTΞϓϦέʔγϣϯΛ࡞Γ·͠ΐ͏
3BJMTΞϓϦέʔγϣϯߏங
3BJMTΞϓϦέʔγϣϯߏங EPDLFSSVOSNW18%VTSTSDSBJMTTFSWFSXVTSTSDSBJMT TFSWFSBVUIPSSBJMTTFSWFSMBUFTUCJOCBTIDCVOEMFFYFDSBJMT OFXNZBQQ5GXFCQBDLSFBDUEBUBCBTFNZTRMTLJQDP⒎FF TLJQTQSPDLFUTDENZBQQCVOEMFFYFDSBLF XFCQBDLFSJOTUBMMCVOEMFFYFDSBLFXFCQBDLFSJOTUBMMSFBDU CVOEMFFYFDSBLFXFCQBDLFSJOTUBMMUZQFTDSJQU ҎԼɺ)0.&TIBSFSBJMTBQQ্Ͱ࣮ߦ
3BJMTΞϓϦέʔγϣϯߏங EPDLFSSVOSNW18%VTSTSDSBJMTTFSWFSXVTSTSDSBJMT TFSWFSBVUIPSSBJMTTFSWFSMBUFTU w SNίϚϯυ࣮ߦޙʹίϯςφΛফ͢ w WϘϦϡʔϜΛϚϯτ͢Δ$PSF04ଆͷΧϨϯτσΟϨΫτϦΛ VTSTSDSBJMTTFSWFSʹϚϯτ͍ͯ͠Δ w
Xίϯςφ࣮ߦ࣌ͷϫʔΩϯάσΟϨΫτϦΛઃఆ w BVUIPSSBJMTTFSWFSMBUFTU࣮ߦ͢Δ%PDLFSΠϝʔδ
3BJMTΞϓϦέʔγϣϯߏங CJOCBTIDCVOEMFFYFDSBJMTOFXNZBQQ5GXFCQBDLSFBDU EBUBCBTFNZTRMTLJQDP⒎FFTLJQTQSPDLFUT w 3BJMTΞϓϦͷ࡞ίϚϯυ w 5σϑΥϧτͷNJOJUFTUΛ࡞Βͳ͍ w G(FNpMF্͕͋ͬͯॻ͖͢Δ
w XFCQBDLSFBDUXFCQBDLͰ3FBDUΛ͏ w EBUBCBTFNZTRM.Z42-Λσʔλϕʔεʹ͢Δ w TLJQDP⒎FF$P⒎FF4DSJQUΛ࡞Βͳ͍ w TLJQTQSPDLFUT4QSPDLFUTΛΠϯετʔϧ͠ͳ͍
3BJMTΞϓϦέʔγϣϯߏங DENZBQQCVOEMFFYFDSBLFXFCQBDLFSJOTUBMMCVOEMF FYFDSBLFXFCQBDLFSJOTUBMMSFBDUCVOEMFFYFDSBLF XFCQBDLFSJOTUBMMUZQFTDSJQU w 8FCQBDLFSͷઃఆ w DENZBQQSBJMTOFXͰ࡞ͨ͠3BJMTΞϓϦ·ͰҠಈ w
CVOEMFFYFDSBLFXFCQBDLFSJOTUBMM8FCQBDLFSͷΠϯετʔϧ w CVOEMFFYFDSBLFXFCQBDLFSJOTUBMMSFBDU8FCQBDLFSʹSFBDUΛೖΕΔ w CVOEMFFYFDSBLFXFCQBDLFSJOTUBMMUZQFTDSJQU8FCQBDLFSʹ UZQFTDSJQUΛೖΕΔ
͜ΕΛ͢Δͱɺ3BJMTΞϓϦ͕ϗ ετϚγϯʹ࡞͞Ε͍ͯΔ
3BJMTαʔόىಈ
Ͱɺ3BJMTαʔόΛىಈͯ͠Έ ·͠ΐ͏
3BJMTαʔόͷىಈ ҎԼɺ%PDLFSpMFΛ)0.&TIBSFSBJMTBQQNZBQQ্ʹ࡞͠ɺ Ϗϧυ FROM ruby:2.5.3 ENV APP_DIR /usr/src/myapp RUN
mkdir -p ${APP_DIR} WORKDIR $APP_DIR RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && \ apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs mysql-client &&\ npm install -g yarn COPY . $APP_DIR RUN bundle install --path vendor/bundle CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]
3BJMTαʔόͷىಈ EPDLFSSVOQBVUIPSSVOOFSMBUFTU w QϙʔτϑΥϫʔυͷઃఆɻ$PSF04ଆͷͱίϯ ςφଆͷΛϑΥϫʔυ͍ͯ͠Δ
None
.Z42-ʹଓͰ͖ͳ͍ͷͰɺ.Z42- ༻ͷίϯςφىಈ͠·͠ΐ͏
ͦ͏͢Δͱɺෳͷίϯςφؒ Ͱ௨৴ͤ͞Δඞཁ͕ग़ͯ͘Δ
ͦ͜Ͱ
None
EPDLFSDPNQPTF
EPDLFSDPNQPTF w 3BJMTଆͷ%#ઃఆΛमਖ਼ w )0.&TIBSFSBJMTTFSWFSNZBQQDPOpHEBUBCBTFZNMͷEFGBVMU෦ ΛҎԼͷΑ͏ʹमਖ਼ default: &default adapter:
mysql2 encoding: utf8 pool: 5 username: root password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %> host: <%= ENV['MYAPP_DATABASE_HOST'] %>
EPDLFSDPNQPTF version: '2' services: db: image: mysql:5.7 environment: -
MYSQL_ROOT_PASSWORD=mysql ports: - 3306:3306 networks: - default web: environment: - MYAPP_DATABASE_PASSWORD=mysql - MYAPP_DATABASE_HOST=db build: rails-app/myapp ports: - 3000:3000 networks: - default depends_on: - db networks: default: driver: bridge w EPDLFSDPNQPTFZNMΛ)0.&TIBSFʹ ࡞ w ͦͷޙɺdocker-compose upͰىಈ͢Δ
None
EPDLFSDPNQPTF w %#͕࡞͞Εͯͳ͍ͷͰɺམͪͯ͠·͍·͢ w ͳͷͰɺىಈ࣌ʹ࡞ͱϚΠάϨʔγϣϯΛ࣮ߦ͢ΔΑ͏ʹ͠· ͠ΐ͏
EPDLFSDPNQPTF w .Z42-ͷ্ཱ͕ͪΓΛࢹͯ͠ ࣮ߦ͢ΔγΣϧεΫϦϓτΛ࡞ w ͜ΕΛɺ)0.&TIBSFSBJMT TFSWFSNZBQQʹஔ͓ͯ͘͠ #!/bin/sh
set -e host="$1" shift user="$1" shift password="$1" shift cmd="$@" echo "Waiting for mysql" until mysql -h"$host" -u"$user" -p"$password" &> /dev/null do >$2 echo -n "." sleep 1 done bundle exec rake db:create bundle exec rake db:migrate exec $cmd
EPDLFSDPNQPTF w EPDLFSDPNQPTFZNMͷXFC෦Λमਖ਼ w ҎԼͷҰߦΛɺEFQFOET@POͷԼʹهࡌ w ZNMͳͷͰΠϯσϯτʹҙ command: sh
./wait-for-it.sh db root mysql bundle exec rails server -b 0.0.0.0
docker-compose up —buildͰىಈ͠ͳ͓͢ͱ
None
࠷ޙʹ w $USM$ͰEPDLFSDPNQPTFऴྃͰ͖ΔͷͰɺ࣮ߦͯ͠ΈͨΒఀࢭ ͠·͠ΐ͏ w ࠓճ্ཱͪ͛ͨ7BHSBOUڥWBHSBOUIBMUͰऴྃͰ͖·͢ͷͰɺ ͍ऴΘͬͨΒऴྃ͠·͠ΐ͏ w ࠓճͷϋϯζΦϯΛͱʹɺ%PDLFSΛ͍Ζ͍Ζͳͱ͜ΖͰͬͯΈ ͍ͯͩ͘͞
FROM <image> ϕʔεʹͳΔΠϝʔδΛઃఆ USER <user> ࣮ߦϢʔβͷΓସ͑ ENV <key> <value>
ΠϝʔδϏϧυ࣌ʹ༻͢ΔڥมΛઃఆ RUN <command> ΠϝʔδϏϧυ࣌ʹ࣮ߦ͢ΔίϚϯυΛઃఆ CMD <command> ίϯςφ࡞࣌ʹ࣮ߦ͢ΔίϚϯυΛઃఆ COPY <src>... <dest> <src>͔Β<dest>ʹϑΝΠϧΛίϐʔ͢Δ ADD <src>... <dest> tarϑΝΠϧͷల։ɺϦϞʔτURL͔ΒͷऔಘΛߦ ͍͍ͨ߹ͷΈ༻͢Δ WORKDIR <directory> ΠϝʔδϏϧυ࣌ʹ࣮ߦ͢ΔϫʔΩϯάσΟϨΫτ ϦΛઃఆ͢Δ ͓·͚%PDLFSpMFνʔτγʔτ