Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Dockerで作るRails実行環境
Search
Tetsushi Hasesaku
November 09, 2018
Technology
350
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Dockerで作るRails実行環境
Tetsushi Hasesaku
November 09, 2018
Transcript
69 slides
%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νʔτγʔτ
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
業務でAWSをあまり使っていない私が、AWSへのモチベを保つ方法
smt7174
0
190
2026-11-11 Tamachi.sre#7 PaCにインフラリソースの命を救われました。 / PaC saves the infra resource life
masasuzu
0
130
【dbts2026】AIエージェントの 判断と探索を変える、 データベース エンジニアリング― 既存DBの処理と依存関係から作る、オペレーショナルオントロジー ―
shisyu_gaku
0
280
AI時代における医療情報システムのセキュリティ / Security of Healthcare IT Systems in the AI Era
henryofficial
0
150
Kiro Crew の Bot (続く役目を任せる窓口) | 目指せ Kiro マスター 12
inariku
PRO
2
370
Steering と Hook (チームの決まりを守らせる) | 目指せ Kiro マスター 06
inariku
PRO
2
110
【Oracle AI SPOTLIGHT ウェビナー】【特別開催:日本語で解説!】Oracle AI World 2026 最新情報フィードバック
oracle4engineer
PRO
1
200
2026 Apache Flink Community Checkpoint
rmetzger
0
240
AI時代の組織作り:チーム開発から「個人×AI」への移行と、持続可能な「開発資本」の築き方
ham0215
2
830
狙われているAPIの脆弱性!今こそ手をつけるべき根本的な対策とは?
nagix
0
120
仕様と現実の間で落とし所を探るリモートMCPの認証・認可 — Sansanの認証基盤における課題と実践
sansantech
PRO
2
270
The future of architectural work
ufried
0
200
Featured
See All Featured
Building Applications with DynamoDB
mza
96
7.3k
Leo the Paperboy
mayatellez
11
2.5k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
380
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.6k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
330
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.7k
Building AI with AI
inesmontani
PRO
1
1.4k
GitHub's CSS Performance
jonrohan
1033
470k
A Soul's Torment
seathinner
9
3.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
A better future with KSS
kneath
240
18k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k