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.9k
dockerで社内外の環境を整えた話
PHPカンファレンス福岡2016
小規模な受託開発の会社で、開発・ステージング環境用途として
dockerを利用した際の経験談&まとめです。
Ryo Tomidokoro
May 21, 2016
Tweet
Share
More Decks by Ryo Tomidokoro
See All by Ryo Tomidokoro
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
hanhan1978
8
3.3k
Spec Driven Development入門/spec_driven_development_for_learners
hanhan1978
2
1.5k
フロントエンドがTypeScriptなら、バックエンドはPHPでもいいじゃない/php-is-not-bad
hanhan1978
8
13k
どうすると生き残れないのか/how-not-to-survive
hanhan1978
17
14k
100分で本番デプロイ!Laravelで作るWebアプリケーション作成/100min_web_app_cicd
hanhan1978
1
240
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
3.4k
集中して作業する技術/how_to_work_deeply
hanhan1978
65
54k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
11k
ADRを一年運用してみた/adr_after_a_year
hanhan1978
8
4.7k
Other Decks in Programming
See All in Programming
CSC307 Lecture 03
javiergs
PRO
1
490
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.6k
並行開発のためのコードレビュー
miyukiw
0
1.2k
CSC307 Lecture 07
javiergs
PRO
1
560
Raku Raku Notion 20260128
hareyakayuruyaka
0
370
高速開発のためのコード整理術
sutetotanuki
1
410
24時間止められないシステムを守る-医療ITにおけるランサムウェア対策の実際
koukimiura
1
130
Apache Iceberg V3 and migration to V3
tomtanaka
0
170
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
2.5k
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
750
CSC307 Lecture 09
javiergs
PRO
1
840
CSC307 Lecture 01
javiergs
PRO
0
690
Featured
See All Featured
sira's awesome portfolio website redesign presentation
elsirapls
0
150
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
650
Making the Leap to Tech Lead
cromwellryan
135
9.7k
RailsConf 2023
tenderlove
30
1.3k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
68
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
440
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Into the Great Unknown - MozCon
thekraken
40
2.3k
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࠾༻͢Δ