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で社内外の環境を整えた話
Search
Ryo Tomidokoro
May 21, 2016
Programming
1
4.8k
dockerで社内外の環境を整えた話
PHPカンファレンス福岡2016
小規模な受託開発の会社で、開発・ステージング環境用途として
dockerを利用した際の経験談&まとめです。
Ryo Tomidokoro
May 21, 2016
Tweet
Share
More Decks by Ryo Tomidokoro
See All by Ryo Tomidokoro
フロントエンドがTypeScriptなら、バックエンドはPHPでもいいじゃない/php-is-not-bad
hanhan1978
8
12k
どうすると生き残れないのか/how-not-to-survive
hanhan1978
17
13k
100分で本番デプロイ!Laravelで作るWebアプリケーション作成/100min_web_app_cicd
hanhan1978
1
160
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
2.8k
集中して作業する技術/how_to_work_deeply
hanhan1978
62
49k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
10k
ADRを一年運用してみた/adr_after_a_year
hanhan1978
8
4k
B+木入門:PHPで理解する データベースインデックスの仕組み/b-plus-tree-101
hanhan1978
5
5.2k
ADRを一年運用してみた/our_story_about_adr
hanhan1978
5
2.3k
Other Decks in Programming
See All in Programming
カクヨムAndroidアプリのリブート
numeroanddev
0
400
Using AI Tools Around Software Development
inouehi
0
1.2k
事業戦略を理解してソフトウェアを設計する
masuda220
PRO
21
5.9k
実はすごいスピードで進化しているCSS
hayato_yokoyama
0
110
社内での開発コミュニティ活動とモジュラーモノリス標準化事例のご紹介/xPalette and Introduction of Modular monolith standardization
m4maruyama
0
110
RubyKaigiで得られる10の価値 〜Ruby話を聞くことだけが RubyKaigiじゃない〜
tomohiko9090
0
140
Prism.parseで 300本以上あるエンドポイントに 接続できる権限の一覧表を作ってみた
hatsu38
1
110
ktr0731/go-mcpでMCPサーバー作ってみた
takak2166
0
150
Create a website using Spatial Web
akkeylab
0
190
TypeScript LSP の今までとこれから
quramy
1
490
MLOps Japan 勉強会 #52 - 特徴量を言語を越えて一貫して管理する, 『特徴量ドリブン』な MLOps の実現への試み
taniiicom
2
650
人には人それぞれのサービス層がある
shimabox
3
660
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
4
130
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.5k
Practical Orchestrator
shlominoach
188
11k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Navigating Team Friction
lara
186
15k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.3k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
42
2.4k
Transcript
dockerͰࣾ֎͚ͷڥΛ͑ͨ 3ZP5PNJEPLPSP !IBOIBO PHPΧϯϑΝϨϯεԬ
@hanhan1978 Twitter Ryo Tomidokoro Name Web App Engineer Job
"CPVU.F
"HFOEB ͰdockerΛ෮श ׆༻ྫɾߏྫ ॴɾॴ docker࠾༻͢Δ ಋೖཧ༝
ͰEPDLFSΛ෮श Docker Inc ͷιϑτΣΞ ܰྔͳίϯςφԾԽ ϋΠύʔόΠβʔܕͰͳ͍ɻ ίϯςφϗετOSͷִ͞ΕͨڥͰಈ࡞ ֤ίϯςφϗετOSͷࢿݯΛར༻͢Δ
ͰEPDLFSΛ෮श dockerԿ͕خ͍͠ͷʁ ίϯςφΛߏஙɾཧ͢ΔͨΊͷΠϯλϑΣʔεΛఏڙ ߏங༰Dockerfileͱ͍͏ܗͰίʔυԽ dockerͷίϯςφͷϨΠϠʔߏ %PDLFSpMFͷίʔυͷߦߦ͕ϕʔεΠϝʔ δͷ্ʹͱͯ͠ੵΈॏͳ͍ͬͯ͘ɻ ϕʔεΠϝʔδ͔ΒͷϨΠϠʔશମΛؚΊͯɺ ίϯςφͷʮΠϝʔδʯͱݺͿɻ
EPDLFSެࣜΑΓҾ༻
ͰEPDLFSΛ෮श Dockerfileͷத ίϯςφΠϝʔδͷߏஙखॱ େ·͔ʹ͚ΔͱҎԼͷ̏ͭ 1 ϕʔεΠϝʔδࢦఆ Πϝʔδߏங༻ͷίϚϯυ ࿐ग़͢Δportͱ࣮ߦίϚϯυ 2
3
ͰEPDLFSΛ෮श Dockerfileͷ࣮ྫ FROM php:7.0-apache Maintainer hanhan1978 RUN docker-php-ext-install -j$(nproc)
mysql RUN a2enmod rewrite EXPOSE 8080 CMD [“/usr/sbin/httpd”, “-D”, “FOREGROUND”] 1 2 3
ͰEPDLFSΛ෮श ϕʔεΠϝʔδͷऔಘ FROM php:7.0-apache Maintainer hanhan1978 1 phpͷόʔδϣϯ7(Apache)Πϝʔδ ίϯςφͷཧऀࣗͷDocker
ID
ͰEPDLFSΛ෮श ϕʔεΠϝʔδͲ͔͜Βʁ σϑΥϧτެࣜϨϙδτϦ privateϦϙδτϦ༗ྉ EPDLFSIVC EPDLFSSFHJTUSZ OSSͷdocker image ετΞ
ࣗલͰ༻ҙ ઐͷΠϯϑϥ୲͕͍ͳ͍ձࣾͷ߹ ϝϯςೝূ͕໘ͳͷͰΊͨํ͕ແ
ͰEPDLFSΛ෮श Πϝʔδߏங༻ͷίϚϯυ RUN docker-php-ext-install -j$(nproc) mysql RUN a2enmod rewrite
2 • ίϚϯυΛ࣮ߦ͢ΔΑ͏ͳΠϝʔδͰཏྻ • ϩʔΧϧʹ༻ҙͨ͠ϑΝΠϧΛΠϝʔδʹCOPYͱ͔Մ • ৄ͘͠ެࣜυΩϡϝϯτࢀর
FYQPTFͨ͠ϙʔτɺίϯςφؒͰެ։ ͰEPDLFSΛ෮श ࿐ग़͢Δportͱ࣮ߦίϚϯυ EXPOSE 8080 CMD [“/usr/sbin/httpd”, “-D”, “FOREGROUND”]
3 • dockerͷωοτϫʔΫͰ8080൪Λެ։ • CMDͰࢦఆͨ͠ϑΥΞάϥϯυͷίϚϯυΛ࣮ߦ
ͰEPDLFSΛ෮श ίϯςφΛϏϧυ $ docker build -t [Πϝʔδ໊] [Dockerfileͷ͋ΔPATH] docker-hubͷΠϝʔδ໋໊نଇʹै͍·͠ΐ͏
[Ϣʔβ໊]/[Πϝʔδ໊] ྫ) hanhan1978/php7
ͰEPDLFSΛ෮श ίϯςφΛ࣮ߦ $ docker run -d -p 8080:80 [Πϝʔδ໊]
ίϯςφͰexpose͞Εͨ80൪portΛ ϗετOSͷ8080ʹඥ͚ جຊίϨ͚ͩʂ
ͰEPDLFSΛ෮श γϯϓϧͳdockerߏਤ EPDLFSIVC ֤ίϯςφEPDLFSIVC͔ΒϕʔεΠϝʔδΛQVMM %PDLFSpMFͷهड़ʹԊͬͯɺίϯςφΛCVJME
"HFOEB ಋೖཧ༝ ׆༻ྫɾߏྫ ॴɾॴ docker࠾༻͢Δ ͰdockerΛ෮श
ಋೖཧ༝ ձࣾͰ͍ͬͯΔۀ w খʙதنͷडୗ։ൃ w 6*σβΠϯϑϩϯτΤϯυ։ൃ͕ϝΠϯ w αʔϏε։ൃ༗Γ w
4BB4Ͱେମ͏·ͬͯ͘Δ
ಋೖཧ༝ ๊͍͑ͯͨ w ϚʔΫΞοϓ ੩త)5.- ͷ֬ೝڥ͕ແ͔ͬͨɻ w ࢼͯ͠Έ͍ͨ044Λࢼ͢ڥ͕ແ͍ɻ w
#PUͱ͔Λৗறͤ͞Δ-BCతͳڥ͕ແ͍ɻ
ಋೖཧ༝ ݕ౼ͨ͠αʔϏε ࣾʹैྔ՝ۚͷߴֹٻτϥϚ͕͋ΔΒ͘͠ ࠜڧ͍ෆ৴ײ͕ɾɾɾ AWS or GCP Heroku OSSͰHeroku͓ࢼ͠Λఏڙ͍ͯ͠ͳ͍ͷଟ͔ͬͨ
ࣗ༝͕͍ͷͰͱײͨ͡(ޙʑޙչ͕ͨ͠ɾɾɾ) SakuraͷVPS ఆֹͰ͑Δ͠ɺ͖ͳΑ͏ʹ͑ͦ͏ͩɾɾɾ
ಋೖཧ༝ ఆֹ714 ϝϯςָ͕ ߴՄ༻ੑ Ϟμϯ ͱ͍͏Θ͚Ͱ
"HFOEB ׆༻ྫɾߏྫ ಋೖཧ༝ ॴɾॴ docker࠾༻͢Δ ͰdockerΛ෮श
׆༻ྫɾߏྫ Overview DPOUBJOFS DPOUBJOFS DPOUBJOFS DPOUBJOFS ୯ҰͷϗετͷΈར༻ ίϯςφؒϦϯΫportͷࢦఆdocker-compose kubernatisTXBSNඞཁͳ͠ʂ
׆༻ྫɾߏྫ docker-compose ίϯςφ࣮ߦ࣌ͷઃఆZNMͰҰݩཧ mysql: image: mysql volumes: - /host/mysql:/var/lib/mysql
restart: always gyazo: build: docker-files/gyazo environment: - SRC_PATH=/hoge/fuga restart: always
׆༻ྫɾߏྫ 1. ੩తαΠτͷ֬ೝڥ DPOUBJOFS git pushͰCI௨ docker-compose build [container]
ϑϩϯτΤϯυΤϯδχΞɺΫϥΠΞϯτͷαΠτߋ৽ͷڞ༗Λ ҙࣝ͠ͳͯ͘Α͘ͳͬͨɻ ͱʹ͔͘ૣ͘ίʔυΛॻ͍ͯɺ164)
׆༻ྫɾߏྫ 2. OSS͓ࢼ͠ڥ docker-compose up -d opengrok opengrok: image:
itszero/opengrok volumes: - /hoge/fuga:/src ports: - “3001:8080" DPNQPTFZNMʹઃఆΛՃͯ͠UP͢Δ͚ͩ
׆༻ྫɾߏྫ 3. ։ൃ -> εςʔδө ։ൃ DPOUBJOFS DPOUBJOFS DPOUBJOFS
DPOUBJOFS ʹEPDLFSGPSNBD CFUB ग़ͨͷͰɺͦΕͰ0, εςʔδ ։ൃ࣌ͷߏͰͦͷ··UPͰ͖Δʂॴཁ࣌ؒ
"HFOEB ॴɾॴ ಋೖཧ༝ ׆༻ྫɾߏྫ docker࠾༻͢Δ ͰdockerΛ෮श
ॴɾॴ ྑ͔ͬͨ͜ͱ ϗετগͳͷͰϝϯςָ͕ ΞϓϦͷ͓ࢼ͠ར༻ϚδͰָ ґଘؔίϯςφଆͰղܾ͞Ε͍ͯΔ gitlab, redmine => Έͳ͞·Πϯετʔϧ࣌ͷਏ͞ʹ͕֮͑͋Δ͔ͱɾɾɾ
VMΛෳ্ཱ͍ͪ͛ͯͨ࣌ʹൺΔͱஈҧ͍ => ͕֮͑ͯΒΕΔݸ ੬ऑੑରԠ => ίϯςφ࠶Ϗϧυ & ϗεταʔόʹରԠͰOK
ॴɾॴ ྑ͔ͬͨ͜ͱ dockerೲͱ͍͏ϦΫΤετ ސ٬ଆ͕dockerΠϯϑϥΛ͍࣋ͬͯͨ => dockerڥͳΜͰ͕͢ɾɾɾʹ༨༟ͰରԠ ͜ͷઌ૿͑ͯ͘Δͱ༧͞Ε·͢ ʘ(^o^)ʗ
ॴɾॴ ѱ͔ͬͨ͜ͱ ਓࡐϘτϧωοΫ ੩తαΠτߏஙͷίϯςφ࡞ => ٸ͍Ͱ30 ϑϩϯτΤϯυΤϯδχΞͷΈͰ݁Ͱ͖ͳ͍ => ݁ہɺherokuΛ͏͜ͱʹͨ͠
docker-machineͷͭΒΈ VirtualBoxͰಈ࡞͢ΔdockerͳͷͰɺϗετϚγʔϯଆͱͷ௨৴ ϑΝΠϧڞ༗ͳͲ͕໘ ɹ=> docker for mac, windows͕ٹੈओ͔
ॴɾॴ ѱ͔ͬͨ͜ͱ disk༰ྔ VPSͱ͔݁ߏdisk༰ྔগͳ͍ܖͩͱਏ͘ͳΔ ΠϝʔδϨΠϠʔ͕δϫδϫͱѹഭ => 20ʙ30ఔͷίϯςφΠϝʔδͰ50G͘Β͍ݟͨ΄͏͕ྑ ͍͔ɻ
ॴɾॴ ݸਓతͳײ w %PDLFSpMFͬͯɺ͋Μ·Γے͕ΑΖ͘͠ࢥ͑ͳ͍ɻ΄΅TIFMM w EPDLFSGPSNBD XJOEPXTظͰ͖Δʂʂ w 044ͷ͓ࢼ͠༻్ͱͯ͠ɺ࠷ڧͷڥɹେͷͷEPDLFS
IVCʹ͋Δ w ੈͷதʹ͍͍͚ͭͯͯΔײຯͰ͕͢େࣄ
"HFOEB docker࠾༻͢Δ ಋೖཧ༝ ׆༻ྫɾߏྫ ॴɾॴ ͰdockerΛ෮श
docker࠾༻͢Δʁ ೦಄ʹ͓͍͓ͯ͘͜ͱ w EPDLFSͷݪཧΛཧղ͠ɺཧՄೳͳਓࡐΛਓଗ͍͑ͨɻ w શ෦ΛEPDLFSͰΕΔͱ͍͏ࢥߟఀࢭ/(Ϛωʔδυɾ αʔϏεͰແྉͱ͔͋Δ͠ɺόοΫΤϯυΤϯδχΞෆཁ ͷιϦϡʔγϣϯΛୈҰʹߟ͑Δͷେࣄ w
ίϯςφࣗମΛඞཁͱ͢ΔαʔϏε։ൃͰ͋ΕɺEPDLFSΛ ͏ͷݮʹͳͬͯྑͦ͞͏ɻ
dockerͬͯΈΔʁ ৭ʑݒ೦͋͛·͕ͨ͠ɾɾɾ ͳΜ͔ͩΜͩݴͬͯɺdockerָ͍ͬ͢͠ ͪΐͬͱ͘Β͍ᷖᮣͳײ͕͡ͳ͍ͱɺ৽نಋೖͳΜͯͰ͖ͳ͍YO
͓·͚ dockerͰPHPڥ EPDLFSIVCʹ1)1ͷެࣜΠϝʔδ༗Γ w ʙͷOUTͱ[UT w QIQGQN BQBDIF DMJ
w BMQJOFͱॻ͔Ε͍ͯΔͷܰྔΠϝʔδ
͓·͚ apacheͷ߹ Containers BQBDIF src w ެࣜΠϝʔδQSFGPSLNPEQIQ w EPDVNFOU3PPUʹTSDΛಥͬࠐΉ͚ͩ
͓·͚ php-fpmͷ߹ Containers /HJOY src w /HJOYͷ'BTU$(*ͷαʔόΛલஈʹઃஔ w QIQGQNͷ෦IIWNͱ͔ʹஔՄೳ
QIQGQN
"OZ2VFTUJPO ಋೖཧ༝ ׆༻ྫɾߏྫ ॴɾॴ ͰdockerΛ෮श docker࠾༻͢Δ