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
9
13k
どうすると生き残れないのか/how-not-to-survive
hanhan1978
17
14k
100分で本番デプロイ!Laravelで作るWebアプリケーション作成/100min_web_app_cicd
hanhan1978
1
170
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
2.9k
集中して作業する技術/how_to_work_deeply
hanhan1978
65
49k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
10k
ADRを一年運用してみた/adr_after_a_year
hanhan1978
8
4.2k
B+木入門:PHPで理解する データベースインデックスの仕組み/b-plus-tree-101
hanhan1978
5
5.3k
ADRを一年運用してみた/our_story_about_adr
hanhan1978
5
2.4k
Other Decks in Programming
See All in Programming
可変変数との向き合い方 $$変数名が踊り出す$$ / php conference Variable variables
gunji
0
180
生成AI時代のコンポーネントライブラリの作り方
touyou
1
290
AI駆動のマルチエージェントによる業務フロー自動化の設計と実践
h_okkah
0
230
Claude Code + Container Use と Cursor で作る ローカル並列開発環境のススメ / ccc local dev
kaelaela
12
7.1k
20250704_教育事業におけるアジャイルなデータ基盤構築
hanon52_
5
1.1k
High-Level Programming Languages in AI Era -Human Thought and Mind-
hayat01sh1da
PRO
0
880
iOS 26にアップデートすると実機でのHot Reloadができない?
umigishiaoi
0
140
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
300
Claude Code派?Gemini CLI派? みんなで比較LT会!_20250716
junholee
1
540
型で語るカタ
irof
0
700
PipeCDのプラグイン化で目指すところ
warashi
1
310
MCPを使ってイベントソーシングのAIコーディングを効率化する / Streamlining Event Sourcing AI Coding with MCP
tomohisa
0
170
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
329
21k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Documentation Writing (for coders)
carmenintech
72
4.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Into the Great Unknown - MozCon
thekraken
40
1.9k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Producing Creativity
orderedlist
PRO
346
40k
The Invisible Side of Design
smashingmag
301
51k
Designing for humans not robots
tammielis
253
25k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
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࠾༻͢Δ