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
変化の早いClaude Codeを 書籍に落とし込む
oikon48
7
1.4k
ガバメントクラウドでのランサムウェア対策
techniczna
2
1.2k
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.9k
OSPN.JPバージョンアップ作業進捗のご報告 / 20260801-osc26kyoto
akkiesoft
0
480
オートロックマンションなのに、各部屋は施錠なし!? 攻撃者が組織内ネットワークで大暴れする理由 / The Front Door Is Locked, but the Rooms Are Wide Open: Why Attackers Move Freely Inside Enterprise Networks
nttcom
1
1.6k
ガバメント AI 源内を地方自治体は活用できるのか可能性と課題、期待について
takeda_h
1
400
制約理論(ToC)入門 2026版
recruitengineers
PRO
8
2.2k
猫付きpingコマンドを自作
uyuki234
0
220
私がブラウザを自作したくなった理由
supurazako
1
210
サイバー捜査員研修(前半)
nomizone
1
2k
関東Kaggler会発表資料
takoi
1
220
【Google Cloud Next Tokyo'26】Gemini Enterprise と Oracle AI Database で実現する、業務データ活用を実現する AI エージェント実装
shisyu_gaku
0
240
Featured
See All Featured
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
200
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
460
Abbi's Birthday
coloredviolet
3
9.3k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Paper Plane
katiecoart
PRO
2
53k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
430
Discover your Explorer Soul
emna__ayadi
2
1.3k
HDC tutorial
michielstock
2
790
Utilizing Notion as your number one productivity tool
mfonobong
4
530
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Deep Space Network (abreviated)
tonyrice
0
250
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νʔτγʔτ