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
700
Vagrantで作るRails開発環境構築
hare8563
0
320
VagrantとDockerで作る、ポータブル開発環境
hare8563
2
830
Other Decks in Technology
See All in Technology
プロダクトエンジニアに必要な「いい感じ」に作る能力 〜たくさん作れる時代に、どこまで作るかの決め方〜
jnishime_dresscode
1
560
KPIだけでは評価できないプロダクトが考えるべき Evalsという第二の評価系 / Beyond KPIs: Evals as a Second Evaluation Framework for Products #PdEConf
aki_iinuma
0
820
AI駆動開発を組織で促すために
lycorptech_jp
PRO
7
9.2k
サーバー常駐型の 簡易障害調査AI エージェントを作ってみた話
masayoshi
1
510
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
55k
AIエージェントの開発・提供におけるセキュリティリスクの論点と対策
flatt_security
0
240
DMMブックスのNext.js化を加速させるAI活用 / Migrating DMM Books to Next.js with AI
kentarom
1
310
Amazon S3 Tablesに全部任せてみた結果——コンパクション/スナップショット管理は本当に手放せるか
shigeruoda
0
110
Point Cloud as a Foreign Language for Multi-modal Large Language Model
takmin
0
360
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
25k
Data Hubグループ 紹介資料
sansan33
PRO
0
3.2k
最新技術に積極チャレンジ!EKS共通基盤のこれまでとこれから
daitak
0
290
Featured
See All Featured
sira's awesome portfolio website redesign presentation
elsirapls
0
380
How to train your dragon (web standard)
notwaldorf
97
6.8k
Six Lessons from altMBA
skipperchong
29
4.5k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
640
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Evolving SEO for Evolving Search Engines
ryanjones
0
280
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
320
Designing Powerful Visuals for Engaging Learning
tmiket
1
520
A Soul's Torment
seathinner
7
3.5k
Documentation Writing (for coders)
carmenintech
77
5.5k
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νʔτγʔτ