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
100分で本番デプロイ!Laravelで作るWebアプリケーション作成/100min_web_app_cicd
hanhan1978
1
63
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
6
1.9k
集中して作業する技術/how_to_work_deeply
hanhan1978
62
46k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
9.7k
ADRを一年運用してみた/adr_after_a_year
hanhan1978
8
3.8k
B+木入門:PHPで理解する データベースインデックスの仕組み/b-plus-tree-101
hanhan1978
5
4.9k
ADRを一年運用してみた/our_story_about_adr
hanhan1978
5
2.1k
PHPで学ぶ Session の基本と応用 / web-app-session-101-2024
hanhan1978
13
5.7k
レガシー回避のPHP開発術/avoid_php_legacy
hanhan1978
17
13k
Other Decks in Programming
See All in Programming
Visual StudioのGitHub Copilotでいろいろやってみる
tomokusaba
1
210
How mixi2 Uses TiDB for SNS Scalability and Performance
kanmo
41
16k
自力でTTSモデルを作った話
zgock999
0
100
CloudNativePGを布教したい
nnaka2992
0
110
データベースのオペレーターであるCloudNativePGがStatefulSetを使わない理由に迫る
nnaka2992
0
230
Better Code Design in PHP
afilina
0
170
Formの複雑さに立ち向かう
bmthd
1
940
はじめての Go * WASM *OCR
sgash708
1
100
データの整合性を保つ非同期処理アーキテクチャパターン / Async Architecture Patterns
mokuo
55
19k
ソフトウェアエンジニアの成長
masuda220
PRO
12
2.1k
Jakarta EE meets AI
ivargrimstad
0
410
dbt Pythonモデルで実現するSnowflake活用術
trsnium
0
260
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
328
21k
Automating Front-end Workflow
addyosmani
1368
200k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
The Pragmatic Product Professional
lauravandoore
32
6.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
380
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
Bash Introduction
62gerente
611
210k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Speed Design
sergeychernyshev
27
810
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࠾༻͢Δ