Slide 1

Slide 1 text

DockerΛར༻ͨ͠ϩʔΧϧ؀ ڥ͔Βຊ൪؀ڥ·Ͱͷߏஙઃܭ Koichi Nagaoka

Slide 2

Slide 2 text

ࣗݾ঺հ ௕Ԭ ߒҰ (@kkoudev) ؾ͚ͮ͹ۀք12೥͘Β͍ɻ ϑϩϯτΤϯυɺόοΫΤ ϯυɺΠϯϑϥɺiOS/ AndroidΞϓϦ։ൃɺͳΜͰ ΋΍ͬͯ·͢

Slide 3

Slide 3 text

Έͳ͞ΜɺDockerΛ্ख ͘࢖͍͑ͯ·͔͢ʁ

Slide 4

Slide 4 text

ࢄʑޠΓਚ͘͞ΕͨDockerͷར఺ ɾDocker͕ಈ͘؀ڥͰ͸OSͷػೳ͝ͱΠϝʔδ ԽͰ͖ΔͨΊɺϗετଆ͕macOSͩΖ͏ͱLinux ͩΖ͏ͱجຊతʹಉ͡Α͏ʹಈ࡞͢Δ ɾϙʔλϏϦςΟʹ༏Ε͓ͯΓɺεέʔϧ͕؆୯ ɾ֤छϛυϧ΢ΣΞ͕ެࣜͰΠϝʔδԽ͞Ε͍ͯ ΔͨΊɺͦΕΒΛར༻͢Ε͹ϛυϧ΢ΣΞͷΠϯ ετʔϧ͕Docker͚ͩͰ׬݁͢Δ

Slide 5

Slide 5 text

͜ͷར఺Λੜ͔ͨ͢Ίʹ͸ɺDockerͷಛੑ Λཧղͭͭ͠ɺϩʔΧϧ؀ڥ͔Βຊ൪؀ڥ ·ͰΛߟྀͨ͠ઃܭΛߦ͏ඞཁ͕͋Γ·͢

Slide 6

Slide 6 text

ࠓ೔঺հ͢Δ͜ͱ ɾDockerΛ࢖ͬͨ؀ڥߏஙͷߟ͑ํ ɾDockerΛ࢖ͬͨσϓϩΠͷߟ͑ํ
 ɾDockerʹ͓͚ΔΞϯνύλʔϯͱରԠࡦ


Slide 7

Slide 7 text

1. ֤؀ڥΛߏங͢Δ্Ͱඞཁ ͳཁ݅Λચ͍ग़͢

Slide 8

Slide 8 text

Α͋͘ΔWeb։ൃݱ৔ͷಈ࡞؀ڥ 1. ࣗ෼ͷϚγϯ಺Ͱ࣮૷தͷΞϓϦέʔγϣϯΛελϯυΞ ϩϯʹಈ࡞ͤ͞Δ؀ڥ (ϩʔΧϧ؀ڥ) 2. ࣮૷͕׬ྃͨ͠ΞϓϦέʔγϣϯΛଞͷϓϩδΣΫτϝϯό ʔ΍ςελʔʹಈ࡞֬ೝͯ͠΋Β͏ࣾ಺޲͚؀ڥ (։ൃ؀ڥ) 3. ࣾ಺Ͱಈ࡞֬ೝͨ͠ΞϓϦέʔγϣϯΛຊ൪ϦϦʔεલʹ ͓٬͞Μʹݕऩͯ͠΋Β͏ͨΊͷ؀ڥ (εςʔδϯά؀ڥ) 4. ςετ΋ݕऩ΋׬ྃͨ͠ΞϓϦέʔγϣϯΛՔಇͤ͞Δͨ Ίͷ؀ڥ (ຊ൪؀ڥ)

Slide 9

Slide 9 text

Α͋͘Δ؀ڥ͝ͱͷཁ݅ 1. ϩʔΧϧ؀ڥ͸ίʔυमਖ਼ͨ͠Β͙͢ʹಈ࡞֬ೝΛ ߦ͑ΔΑ͏ʹ͍ͨ͠ 2. ։ൃ؀ڥ͸༧ࢉͷؔ܎Ͱ1୆͔͠༻ҙͰ͖ͳ͍ɻͦͷ 1୆ʹશͯͷϛυϧ΢ΣΞΛΠϯετʔϧͯ͠ߏஙͯ͠ ཉ͍͠ 3. ຊ൪͸ӡ༻΍Մ༻ੑΛߟྀͯ͠ϩʔυόϥϯαʔɺ σʔλϕʔεɺΩϟογϡ͸ϚωʔδυαʔϏε (ALBɺRDSɺElastiCache)Λར༻͍ͨ͠͠

Slide 10

Slide 10 text

͜ͷ؀ڥ͝ͱͷཁ݅Λ࣮ݱ ͢Δํ๏ΛɺDockerΛ࢖ͬ ͯߏங͢Δ৔߹ͱ࢖Θͳ͍ Ͱߏங͢Δ৔߹ͷͦΕͧΕ Λൺֱͯ͠঺հ͍͖ͯ͠·͢ ɻ

Slide 11

Slide 11 text

2. DockerΛ࢖֤ͬͯ؀ڥΛߏ ங͢Δ

Slide 12

Slide 12 text

ࠓճߏஙͯ͠ΈΔ؀ڥ

Slide 13

Slide 13 text

֤αʔόͰಈ࡞ͤ͞Δϛυϧ΢ΣΞ/ΞϓϦέʔγϣϯ ■ϩʔυόϥϯαʔ
 ɾAWSͷApplication Load Balancer (ALB)Λ࢖༻
 
 ■Ωϟογϡαʔό
 ɾAWSͷElastiCache (Redis)Λ࢖༻
 
 ■σʔλϕʔε
 ɾAWSͷRDS (MySQL)Λ࢖༻
 
 ■web01/02 (EC2αʔό)
 ɾNginx (HTTPαʔό)
 ɾWebΞϓϦέʔγϣϯ (DjangoͰಈ͘Python3ΞϓϦέʔγϣϯ)
 
 ■batch01/02 (EC2αʔό)
 ɾPython3Ͱಈ͘όονΞϓϦέʔγϣϯ
 ɾδϣϒεέδϡʔϥ(Celery beat)
 ɾRabbitMQ (CeleryͷδϣϒΩϡʔͱͯ͠࢖༻)

Slide 14

Slide 14 text

2-1. ϩʔΧϧ؀ڥΛߏங͢Δ

Slide 15

Slide 15 text

ϩʔΧϧ؀ڥʹ͍ͭͯ ϩʔΧϧ؀ڥ͸ࣗ਎ͷ࣋ͭϚγϯ؀ڥ͚ͩͰಈ ࡞Λ׬݁ͤ͞ΔελϯυΞϩϯͳ࡞Γʹ͠ͳ͚ Ε͹͍͚·ͤΜɻͦͷ্ɺWebΞϓϦʹ͓͚Δ ϩʔΧϧ؀ڥͷ࠷େͷܽ఺͸։ൃػ΍ຊ൪ػ͕ ͱ͸OS͕ҟͳΔέʔε͕ຆͲͰ͋ΔͨΊɺ؀ڥ ࠩҟʹΑΔಈ࡞ͷҧ͍͕࠷΋ൃੜ͠΍͍͢؀ڥ ͱͳΓ·͢ɻ

Slide 16

Slide 16 text

DockerΛ࢖Θͳ͍ϩʔΧϧ؀ڥͷߏஙखॱ 1. ALB͸ϩʔΧϧͩͱཱͯΒΕͳ͍ͷͰɺ୅ΘΓʹHAProxyΛ ࢖͏
 2. HAProxyɺRedisɺMySQLɺNginxɺRabbitMQɺPython3Λ HomebrewͰΠϯετʔϧ͢Δ
 3. ϩʔΧϧ༻ͷ֤ϛυϧ΢ΣΞͷઃఆϑΝΠϧΛهड़͢Δ
 4. WebΞϓϦέʔγϣϯͱόονΞϓϦέʔγϣϯͰґଘؔ܎ Λ෼཭ͤ͞ΔͨΊʹ venv Λ࢖༻͢Δ
 5. WebΞϓϦέʔγϣϯͱόονΞϓϦέʔγϣϯͷґଘؔ܎ ΛͦΕͧΕ pip ͰΠϯετʔϧ͠ɺͦΕͧΕىಈ͓ͯ͘͠ɻ

Slide 17

Slide 17 text

͜ͷखॱ͚ͩΛݟΔͱҰݟ ؆୯ʹࢥ͑Δ͕ɾɾɾ

Slide 18

Slide 18 text

DockerΛ࢖Θͳ͍ϩʔΧϧ؀ڥͷߏஙखॱͷܽ఺ 1. Homebrew͸جຊతʹ࠷৽όʔδϣϯΛΠϯετʔϧ͢ΔͨΊɺݹ͍ όʔδϣϯΛΠϯετʔϧ͢Δࡍ͸͍͍ͪͪઃఆ͕໘౗ͳ্ʹසൟʹ࢖ ༻͕มΘΔɻ։ൃ͍ͯ͠ΔΞϓϦέʔγϣϯ͕ෳ਺͋Δ৔߹͸͞Βʹό ʔδϣϯΛ߹ΘͤΔͷ͕ඇৗʹେม
 2. ಈ࡞ͤ͞ΔOS͕ຊ൪ػͱ͸ҟͳΔͨΊɺσΟϨΫτϦύε΋͔ͳΓҟ ͳΔɻϛυϧ΢ΣΞͷઃఆϑΝΠϧͰϑΝΠϧύεΛهड़͍ͯ͠ΔՕॴ ͸૬ରύε͕࢖͑ͳ͚Ε͹ϩʔΧϧઐ༻ʹઃఆΛ༻ҙ͢Δඞཁ͕͋Δ
 3. 1ͱ2ͷཧ༝͔ΒɺݸਓͷϚγϯͷঢ়ଶʹґଘͯ͠ಈ࡞͠ͳ͔ͬͨΓɺ ผಈ࡞ΛҾ͖ى͜͢έʔε͕ඇৗʹଟ͍ɻ؀ڥߏஙखॱͱ֤ͯ͠ਓ͕ؾ Λ͚ͭͳ͚Ε͹͍͚ͳ͍ϙΠϯτ͕ଟ͘ɺ؅ཧ͢Δଆͱͯ͠΋ඇৗʹ໘ ౗Ͱ͋Δ

Slide 19

Slide 19 text

ͱʹ͔͘େมͰ໘౗͍͘͞ɻ
 ॳ೔ʹݱ৔ʹདྷͯ1೔Ҏ্ηοτ ΞοϓΛ͍ͯ͠Δਓ͕ଟ͘ݟΒΕ Δ৔߹͸ɺ΄΅͜ͷΑ͏ͳߏஙΛ ͍ͯ͠Δ͍ͤ (ͱݴͬͯ΋աݴͰ͸ ͳ͍)

Slide 20

Slide 20 text

DockerΛ࢖͏ϩʔΧϧ؀ڥͷߏஙखॱ 1. ALB͸ϩʔΧϧͩͱཱͯΒΕͳ͍ͷͰɺ୅ΘΓʹHAProxyΛ࢖͏
 2. HAProxyɺRedisɺMySQLɺNginxɺRabbitMQɺPythonͷ࢖༻͢ΔΠϝʔδ໊ͱ λά໊(όʔδϣϯ)ɺઃఆ஋Λ docker-compose ͷઃఆϑΝΠϧ(docker- compose.yml)ʹهड़͢Δ
 3. ϩʔΧϧ༻ͷ֤ϛυϧ΢ΣΞͷઃఆϑΝΠϧΛهड़͢Δ
 4. मਖ਼Λ͙͢ʹ֬ೝͰ͖ΔΑ͏ʹ͢ΔͨΊɺϗετଆʹ͋ΔΞϓϦέʔγϣϯͷι ʔεϑΝΠϧΛVOLUME໋ྩͰϚ΢ϯτͯ͠ར༻͢Δ
 5. WebΞϓϦέʔγϣϯͱόονΞϓϦέʔγϣϯͷґଘؔ܎ΛͦΕͧΕDockerͰ औಘͨ͠Pythonͷ pip ͰΠϯετʔϧ͠ɺϗετଆͷͦΕͧΕผσΟϨΫτϦ΁อ ଘͰ͖ΔΑ͏ʹ͓ͯ͘͠
 6. docker-composeΛىಈ͠ɺdocker-compose.ymlʹهड़ͨ͠ϛυϧ΢ΣΞͱΞϓ ϦέʔγϣϯΛىಈ͢Δ

Slide 21

Slide 21 text

DockerΛ࢖͏ϩʔΧϧ؀ڥͷߏஙखॱͷར఺ 1. Homebrewͱ͸ҧ͍ɺ֤ϛυϧ΢ΣΞ͝ͱʹಛఆͷόʔδϣϯΛ؆୯ʹ ࢦఆ͢Δ͜ͱ͕Ͱ͖ΔɻόʔδϣϯΞοϓ͢Δͷ΋ઃఆϑΝΠϧͷॻ͖׵ ͚͑ͩͰOKɻ·ͨɺDockerΠϝʔδͷऔಘ΋docker-composeͷىಈ࣌ʹ ࣗಈతʹߦΘΕΔ
 2. ϗετଆͷOS͕ҟͳͬͯ΋DockerΠϝʔδ͸ຊ൪ػͱಉ͡OSͷಈ࡞Λ ίϯςφԽՄೳͰ͋ΔͨΊɺσΟϨΫτϦ΍ϑΝΠϧύεͷҧ͍ͱ͍ͬͨ ؀ڥࠩҟ͸ൃੜ͠ͳ͍
 3. 1ͱ2ͷཧ༝͔ΒɺݸਓͷϚγϯͷঢ়ଶʹґଘͯ͠ಈ࡞͠ͳ͔ͬͨΓɺผ ಈ࡞ΛҾ͖ى͜͢έʔεΛ΄΅ආ͚ΒΕΔɻ
 4. جຊతʹdocker-compose.ymlΛ؅ཧ͍ͯ͠ΔϦϙδτϦͷऔಘͱɺ docker-compose up -d ͚ͩͰ؀ڥߏங͕׬ྃ͢Δɻ؅ཧ΋ߏங΋ϝνϟΫ νϟ؆୯ʂ

Slide 22

Slide 22 text

DockerΛ࢖͏͜ͱͰ؀ڥߏ ங͕ܶతʹ؆୯ʹͳΓ·͢ɻ ͦΕʹՃ͑ͯ؀ڥࠩҟΛͳ ͤ͘Δɻ͜Ε͕ͦ͜Docker ࠷େͷར఺Ͱ͢

Slide 23

Slide 23 text

2-2. ։ൃ؀ڥ͔Βຊ൪؀ڥ·Ͱ Λߏங͢Δ

Slide 24

Slide 24 text

։ൃ؀ڥ͔Βຊ൪؀ڥ·Ͱ ͸ϩʔΧϧͱ͸ҧ͍ɺϏϧ υͨ͠಺༰ΛύοέʔδԽ ͠ɺͦΕΛαʔό΁σϓϩ Π͢Δέʔε͕ຆͲͰ͢

Slide 25

Slide 25 text

DockerΛ࢖Θͳ͍։ൃ/ຊ൪؀ڥͷߏஙखॱ 1. ࢖༻͢ΔALBɺElastiCache (Redis)ɺRDS (MySQL) Λ࡞੒͢Δ
 2. NginxɺRabbitMQɺPythonͷ࢖༻͢ΔόʔδϣϯΛAnsibleͳͲΛ࢖ͬ ͯΠϯετʔϧ͢Δ
 3. ։ൃ/ຊ൪༻ͷ֤ϛυϧ΢ΣΞͷઃఆϑΝΠϧΛهड़͢Δ
 4. ։ൃػʹWebΞϓϦέʔγϣϯͱόονΞϓϦέʔγϣϯΛύοέʔ δϯάͯ͠ɺϑΝΠϧసૹ͢Δ (Capistrano΍Ansistrano͋ͨΓΛ࢖͏)
 5. WebΞϓϦέʔγϣϯͱόονΞϓϦέʔγϣϯͰґଘؔ܎Λ෼཭͞ ͤΔͨΊʹ venv Λ࢖༻͢Δ
 6. WebΞϓϦέʔγϣϯͱόονΞϓϦέʔγϣϯͷґଘؔ܎Λσϓϩ Π࣌ʹͦΕͧΕ pip ͰΠϯετʔϧ͠ɺىಈ͓ͯ͘͠ɻ

Slide 26

Slide 26 text

ϩʔΧϧʹൺ΂Δͱߏங͸ େมϥΫʹͳΓ·ͨ͠ɻ͠ ͔͠ɾɾɾ

Slide 27

Slide 27 text

DockerΛ࢖Θͳ͍։ൃ/ຊ൪؀ڥͷߏஙखॱͷܽ఺ 1. ϛυϧ΢ΣΞͷόʔδϣϯΞοϓΛ͢Δࡍ ʹɺAnsibleͳͲͰ࠶౓ΠϯετʔϧΛ͢Δඞཁ ͕͋Δɻ(ίϯύΠϧΛ൐͏΋ͷͰ͋Ε͹ͦͷ෼ ͕͔͔࣌ؒΔ) ·ͨɺόʔδϣϯผʹσΟϨΫτ ϦΛ෼͚ΔͳͲɺ༧ΊσΟϨΫτϦߏ੒͕ߟྀ ͞Ε͍ͯͳ͍ͱόʔδϣϯΞοϓ͕ͮ͠Β͘ͳ Δ

Slide 28

Slide 28 text

DockerΛ࢖͏։ൃ/ຊ൪؀ڥͷߏஙखॱ 1. ࢖༻͢ΔALBɺElastiCache (Redis)ɺRDS (MySQL)Λ࡞੒ ͢Δ
 2. NginxɺRabbitMQɺϏϧυͨ͠PythonΞϓϦέʔγϣϯͷ ࢖༻͢ΔΠϝʔδ໊ͱλά໊(όʔδϣϯ)ɺઃఆ஋Λ docker- compose ͷઃఆϑΝΠϧ(docker-compose.yml)ʹهड़͢Δ
 3. ։ൃɾຊ൪༻ͷ֤ϛυϧ΢ΣΞͷઃఆϑΝΠϧΛهड़͢Δ
 4. docker-composeΛىಈ͠ɺdocker-compose.ymlʹهड़͠ ͨϛυϧ΢ΣΞͱΞϓϦέʔγϣϯΛىಈ͢Δ

Slide 29

Slide 29 text

DockerΛ࢖͏։ൃ/ຊ൪؀ڥͷߏஙखॱͷར఺ 1. ϛυϧ΢ΣΞͷόʔδϣϯΞοϓ͕͠΍͍͢ɻdocker-compose ͷઃఆϑΝΠϧΛॻ͖׵͑Δ͚ͩͰOK
 2. ΞϓϦέʔγϣϯͱͦͷґଘؔ܎Λ̍ͭͷΠϝʔδͱͯ͠·ͱΊ Δ͜ͱ͕ग़དྷΔɻvenvΛ࢖͏ඞཁ΋ͳ͘ͳΔ
 3. 2Ͱ࡞੒ͨ͠ΠϝʔδΛ։ൃػ͔Βຊ൪؀ڥ·Ͱશ͘ಉ͡΋ͷΛ ར༻Ͱ͖ΔͨΊɺ؀ڥґଘ͢Δ͜ͱ͕΄΅ͳ͍ɻ(DB઀ଓઌͳͲͷ ઃఆ஋͸΋ͪΖΜ؀ڥม਺ͱͯ͠ผͷ΋ͷΛ౉͢ඞཁ͸͋Γ)
 4. ϩʔΧϧಉ༷ʹɺجຊతʹdocker-compose.ymlΛ؅ཧ͍ͯ͠ΔϦ ϙδτϦͷऔಘͱɺdocker-compose up -d ͚ͩͰ؀ڥߏங͕׬ྃ͢ Δɻ؅ཧ΋ߏங΋ϝνϟΫνϟ؆୯ʂ

Slide 30

Slide 30 text

։ൃ؀ڥ͔Βຊ൪؀ڥ·Ͱ΋DockerΛ ࢖͏ํ͕ϝϦοτ͕ଟ͍͜ͱ͕Θ͔Δ ͔ͱࢥ͍·͢ɻdocker-composeͷઃఆ ϑΝΠϧΛ֤αʔό͝ͱʹ༻ҙ͠ɺඞཁ ͳϛυϧ΢ΣΞͱΞϓϦέʔγϣϯͷઃ ఆΛهड़͢Δ͚ͩͰߏங͕׬ྃ͢ΔͷͰɺ ͱʹ͔͘؆୯Ͱ͢ɻ

Slide 31

Slide 31 text

3. ֤؀ڥΛҰݩ؅ཧ͢ΔϓϩδΣ ΫτσΟϨΫτϦߏ੒ͷ঺հ

Slide 32

Slide 32 text

DockerΛ࢖͏͜ͱͰ֤؀ڥ ͕ߏங͠΍͘͢ͳΔ͜ͱ͸ Θ͔͕ͬͨɺ۩ମతʹͲͷ Α͏ʹ͢Ε͹ྑ͍ͷ͔ɺͦ ͷҰྫΛ঺հ͠·͢ɻ

Slide 33

Slide 33 text

3-1. ֤ΞϓϦέʔγϣϯɺϛυ ϧ΢ΣΞΛ౷ׅ؅ཧ͢Δϓ ϩδΣΫτΛ࡞੒͢Δ

Slide 34

Slide 34 text

౷ׅ؅ཧ͢ΔϓϩδΣΫτͱ͸Կ͔ ɾϩʔΧϧ͔Βຊ൪·Ͱͷ؀ڥͷશͯͷϛυϧ΢Σ ΞɺΞϓϦέʔγϣϯΛ؅ཧ͢Δ docker- compose.yml Λ؅ཧ͢ΔϓϩδΣΫτ ɾ֤ϛυϧ΢ΣΞͷઃఆϑΝΠϧ΋؀ڥผʹ؅ཧ͢Δ ɾϩʔΧϧ޲͚ʹWebΞϓϦέʔγϣϯ΍όονͷ ιʔεΛ֨ೲ֤ͨ͠ιʔεϦϙδτϦͷஔ͖৔ॴ΋֬ อ͢Δ͜ͱͰɺιʔεΛ௚઀Dockerίϯςφ΁Ϛ΢ ϯτ͠ɺϩʔΧϧ։ൃΛՄೳͱ͢Δ

Slide 35

Slide 35 text

౷ׅ؅ཧ͢ΔϓϩδΣΫτͷ۩ମྫ DockerͰར༻͢Δϛυϧ΢ΣΞͷઃఆϑΝΠϧɺ ϩάσΟϨΫτϦΛ֨ೲͨ͠σΟϨΫτϦ docker login΍ґଘؔ܎ͷΠϯετʔϧͳ Ͳɺ໘౗ͳίϚϯυΛ؆қ࣮ߦग़དྷΔΑ͏ ʹͨ͠εΫϦϓτͷ֨ೲઌ WebΞϓϦέʔγϣϯ΍όονΛ؅ཧͨ͠ ผϦϙδτϦͷιʔε֨ೲઌɻσΟϨΫτϦ ͷத਎ࣗମ͸gitignore͓ͯ͘͠ ؀ڥผdocker-composeઃఆϑΝΠϧΛϧʔτʹ͓͘

Slide 36

Slide 36 text

͜ͷߏ੒ͷར఺ ɾ͜ͷσΟϨΫτϦߏ੒ͷϓϩδΣΫτΛ֤؀ڥ ΁͍࣋ͬͯ͘͜ͱͰɺϩʔΧϧ͔Βຊ൪·Ͱͷ؀ ڥͷશͯΛ͜ͷ౷ׅϓϩδΣΫτ͚ͩͰ׬݁Ͱ͖ Δ ɾ৽ͨʹΞϓϦέʔγϣϯ΍ϛυϧ΢ΣΞ͕௥Ճ ʹͳͬͨ৔߹͸ɺઃఆϑΝΠϧΛॻ͖׵͑ͨΓɺ sourcesσΟϨΫτϦ಺ʹผϦϙδτϦΛclone͢ Δ͚ͩͰྑ͍

Slide 37

Slide 37 text

3-2. ؀ڥ͝ͱͷΞϓϦέʔγϣ ϯͷґଘؔ܎ͱσϓϩΠͷ ؅ཧΛߟ͑Δ

Slide 38

Slide 38 text

Ϗϧυର৅ͱͳΔΞϓϦέʔγϣϯͷྫ ɾPythonͰಈ͘ΞϓϦέʔγϣϯ ɾґଘؔ܎͸ pip Λ࢖ͬͯ؅ཧ ɾ։ൃத͸ґଘؔ܎ͷ௥Ճ͕౎౓ൃੜ͢Δ ɾґଘؔ܎͸ requirements.txt ʹهࡌͯ͠ιʔε ͱಉ༷ʹόʔδϣϯ؅ཧ͢Δ

Slide 39

Slide 39 text

ϩʔΧϧ؀ڥʹٻΊΒΕΔ͜ͱ ɾιʔεΛमਖ਼ͨ͠Βଈमਖ਼͕֬ೝͰ͖Δ͜ͱ ɾґଘؔ܎ͷ௥Ճɾ࡟আ΋༰қʹߦ͑ͯɺ͔ͭ ͦͷ൓ө֬ೝ΋͙͢ʹߦ͑Δ͜ͱ

Slide 40

Slide 40 text

։ൃɾຊ൪؀ڥʹٻΊΒΕΔ͜ͱ ɾ։ൃ؀ڥͰ֬ೝͨ͠΋ͷΛͦͷ··ຊ൪؀ڥ ΁͍࣋ͬͯ͘͜ͱͰಉ౳ʹಈ࡞Ͱ͖Δ͜ͱ ɾґଘؔ܎ͱιʔεΛผ؅ཧͱͤͣɺ1ͭͷΠϝ ʔδʹؚΊΔ͜ͱͰɺΠϝʔδΛ੾Γସ͑Δͩ ͚Ͱಈ࡞ΛอূͰ͖Δ͜ͱ

Slide 41

Slide 41 text

ϩʔΧϧ؀ڥʹ͓͚Δґଘؔ܎ͷ؅ཧͷྫ 1. ར༻͢ΔPythonͷDockerΠϝʔδΛ༻ҙ͢Δ 2. 1ͷΠϝʔδʹґଘؔ܎Λ֨ೲ͢ΔσΟϨΫτϦΛ VOLUME໋ྩͰϚ΢ϯτՄೳͳঢ়ଶʹ͓ͯ͘͠
 (pip ͸ --user ΦϓγϣϯΛར༻͢Δ͜ͱͰɺ PYTHONUSERBASE؀ڥม਺Ͱࢦఆ͞ΕͨσΟϨΫτ Ϧʹґଘؔ܎Λ֨ೲ͢Δ͜ͱ͕ՄೳͱͳΔ) 3. 2Ͱࢦఆͨ͠PYTHONUSERBASEͷσΟϨΫτϦ಺ ʹ͋ΔbinσΟϨΫτϦΛPATHʹؚΊΔΑ͏ʹ͓ͯ͘͠

Slide 42

Slide 42 text

docker-composeͷྫ (ϩʔΧϧ؀ڥ)

Slide 43

Slide 43 text

docker-composeͷྫ (ϩʔΧϧ؀ڥ) ϩʔΧϧͰ͸ର৅ΞϓϦέʔγϣϯͷϗετଆͷ ιʔεΛϚ΢ϯτ͢Δ PYTHONUSERBASE΍PATHͳͲͷ؀ڥม਺͸͜ ͜Ͱࢦఆ͢Δɻenv_fileʹؚΊΔܗͰ΋Մ

Slide 44

Slide 44 text

ґଘؔ܎ͷΠϯετʔϧͱىಈ (ϩʔΧϧ) # ґଘؔ܎ΛΠϯετʔϧ͢Δ
 docker-compose run --rm web pip install --user -r requirements.txt # ىಈ͢Δ
 docker-compose -f docker-compose.local.yml up -d

Slide 45

Slide 45 text

ϩʔΧϧͰ͸ґଘؔ܎ͷΠϯετʔϧ ͸ىಈલʹҰ౓ߦ͍ɺϗετଆͷσΟ ϨΫτϦ΁഑ஔ͓ͯ͘͜͠ͱͰ౎౓Π ϯετʔϧ͢Δ͜ͱΛ๷͗·͢ɻιʔ ε΋ϗετଆͷ΋ͷΛϚ΢ϯτ͢Δ͜ ͱͰɺ౎౓मਖ਼ˍಈ࡞֬ೝ͕Մೳͱͳ Γɺ։ൃ͕͠΍͘͢ͳΓ·͢ɻ

Slide 46

Slide 46 text

։ൃɾຊ൪؀ڥʹ͓͚Δґଘؔ܎ͷ؅ཧͷྫ 1. ར༻͢ΔPythonͷDockerΠϝʔδΛ༻ҙ͢Δ 2. DockerΠϝʔδͷϏϧυ࣌ʹґଘؔ܎ΛΠϯ ετʔϧͯ͠Πϝʔδʹґଘؔ܎͝ͱؚΊΔ 3. 2ͷґଘؔ܎ͷΠϯετʔϧઌσΟϨΫτϦ಺ ʹ͋ΔbinσΟϨΫτϦΛPATHʹؚΊΔΑ͏ʹ͠ ͓ͯ͘

Slide 47

Slide 47 text

docker-composeͷྫ (։ൃ/ຊ൪؀ڥ)

Slide 48

Slide 48 text

docker-composeͷྫ (։ൃ/ຊ൪؀ڥ) ։ൃͱຊ൪Ͱ͸Ϗϧυͨ͠ΠϝʔδΛࢦ ఆ͢Δɻ ϩάग़ྗઌσΟϨΫτϦͷΈΛϚ΢ϯτ ͢Δ

Slide 49

Slide 49 text

ΞϓϦέʔγϣϯͷDockerfileͷྫ

Slide 50

Slide 50 text

ΞϓϦέʔγϣϯͷDockerfileͷྫ ϩʔΧϧ؀ڥͰ΋ར༻͍ͯ͠ΔPython༻ ͷΠϝʔδΛݩΠϝʔδʹઃఆ͢Δ (Ϗ ϧυ࣌ؒ୹ॖͷͨΊʹ௒ॏཁ) ADDͰϓϩδΣΫτͷιʔεશମΛΠ ϝʔδʹ௥Ճ͢Δɻ/var/opt/example ͕ ΞϓϦέʔγϣϯͷϧʔτͱͳΔ pipͷΠϯετʔϧઌσΟϨΫτϦ͸σϑΥϧτ(ϢʔβσΟ ϨΫτϦ഑Լͷ .local σΟϨΫτϦͱ͢Δ) ͜Ε͸ADDର ৅ͱͳͬͨσΟϨΫτϦ഑ԼΛΠϯετʔϧઌͱͨ͠৔߹ɺ ADDͨ͠ॠؒͷঢ়ଶʹϩʔϧόοΫ͞Εͯ͠·͏ͨΊɺ ϩʔΧϧͱ͸ҟͳΔσΟϨΫτϦͱ͍ͯ͠Δ

Slide 51

Slide 51 text

ΞϓϦέʔγϣϯͷىಈ (։ൃɾຊ൪) # ىಈ͢Δ (։ൃ)
 docker-compose -f docker-compose.development.yml pull docker-compose -f docker-compose.development.yml run --rm web python manage.py collectstatic -- noinput
 docker-compose -f docker-compose.development.yml up -d # ىಈ͢Δ (ຊ൪Web)
 docker-compose -f docker-compose.production_web.yml pull
 docker-compose -f docker-compose.production_web.yml run --rm web python manage.py collectstatic -- noinput docker-compose -f docker-compose.production_web.yml up -d
 # ىಈ͢Δ (ຊ൪Batch)
 docker-compose -f docker-compose.production_batch.yml pull docker-compose -f docker-compose.production_batch.yml up -d

Slide 52

Slide 52 text

։ൃɾຊ൪Ͱ͸ґଘؔ܎ΛؚΊͨΞϓϦέʔγϣϯ ͷΠϝʔδΛ୯ʹىಈ͢Δ͚ͩʹͳΓ·͢ɻ͜ͷΠ ϝʔδ͸Jenkins΍CircleCIͳͲɺCI؀ڥͰdocker build͠ɺ։ൃɾຊ൪͔Β΋ΞΫηεՄೳͳϨδε τϦ΁docker push͓͖ͯ͠·͢ɻ ։ൃɾຊ൪͸Ϗϧυͨ͠DockerΠϝʔδΛ pull ͠ ͯىಈ͢Δ͚ͩͰσϓϩΠ͕׬ྃ͢ΔͨΊɺ։ൃ؀ ڥͰಈ࡞֬ೝͨ͠ΠϝʔδΛͦͷ··ຊ൪΁࣋ͬͯ ͍͘͜ͱ΋ՄೳͱͳΓɺ΄΅؀ڥࠩҟͷͳ͍ಈ࡞Λ ظ଴Ͱ͖·͢ɻ

Slide 53

Slide 53 text

؀ڥ͝ͱͷґଘؔ܎ͷ؅ཧͱσϓϩΠͷ·ͱΊ ɾDockerΛ࢖֤ͬͯ؀ڥΛ؅ཧ͢Δ৔߹ɺ౷ׅ͢ΔϓϩδΣΫτΛ࡞੒ ͠ɺͦ͜Ͱ؀ڥผͷdocker-compose.ymlͱϛυϧ΢ΣΞͷઃఆϑΝΠϧ Λ؅ཧ͢Δͱɺશ؀ڥͷ؅ཧ͓Αͼ։ൃ͕͠΍͘͢ͳΔ ɾϩʔΧϧ؀ڥ͸ϗετଆʹιʔεϑΝΠϧɺґଘؔ܎Λ഑ஔ͠ɺͦΕ ΒΛϚ΢ϯτͯ͠ΞϓϦέʔγϣϯΛىಈ͢Δ͜ͱͰɺ౎౓मਖ਼ͱ֬ೝ Λ͠΍͘͢͢Δ
 ɾ։ൃɾຊ൪͸ґଘؔ܎ͱιʔεΛ1ͭʹ·ͱΊͨDockerΠϝʔδΛϏϧ υˍσϓϩΠ͢Δ͜ͱͰσϓϩΠΛ؆ܿʹͭͭ͠ɺΞϓϦέʔγϣϯͷ ؀ڥࠩҟΛ΄΅θϩʹͰ͖Δ

Slide 54

Slide 54 text

͓·͚-01. Dockerʹ͓͚ΔΞϯνύλʔ ϯͱରԠࡦ

Slide 55

Slide 55 text

࠷ޙʹɺࢲ͕ࠓ·Ͱ։ൃݱ ৔Ͱ࣮ࡍʹૺ۰ͯ͠དྷͨ DockerͷΞϯνύλʔϯ ͱͦͷରԠࡦʹ͍ͭͯ঺հ ͠·͢ɻ

Slide 56

Slide 56 text

Ξϯνύλʔϯ-01. ڊେ͗͢ΔDockerΠϝʔδ

Slide 57

Slide 57 text

DockerΛ࢖͍࢝Ίͨ๭ϓϩδΣΫτA͞Μͷྫ ɾDockerͷϏϧυ͕30෼Ҏ্͔͔Δ
 ɾԿ͔ͱࢥͬͯௐ΂ͯΈΔͱDockerΠϝʔδͷ αΠζ͕2GBΛ௒͍͑ͯΔʢʂʣ ɾ͜ΕͰ͸εέʔϧ΋ͮ͠Β͍͠ɺϙʔλϏϦ ςΟʹ͸΄Ͳԕ͍
 ɾͦ΋ͦ΋ͳΜͰ2GBҎ্ͷαΠζʹͳͬͨͷ ͔

Slide 58

Slide 58 text

DockerΛ࢖͍࢝ΊͨϓϩδΣΫτA͞Μͷצҧ͍ ɾࠓ·ͰVagrant͹͔Γ࢖͍ͬͯͨͷͰDockerΛ Ծ૝؀ڥͷΑ͏ͳ΋ͷͱצҧ͍͍ͯͨ͠
 ɾͦͷͨΊɺ1ͭͷΠϝʔδʹϛυϧ΢ΣΞશͯ ͱΞϓϦέʔγϣϯΛશ෦ೖΕͯ͠·͍ͬͯͨ
 ɾ͞Βʹ͸Կނ͔ຖճιʔε͔ΒϏϧυ͓ͯ͠ ΓɺDockerͷϏϧυ͕30෼Ҏ্͔͔͍ͬͯͨ

Slide 59

Slide 59 text

DockerΛ࢖͍࢝ΊͨϓϩδΣΫτA͞ΜͷରԠࡦ 1. ϛυϧ΢ΣΞ͝ͱɺΞϓϦέʔγϣϯ͝ͱʹ DockerΠϝʔδ͸෼ׂ͢Δ
 2. ϛυϧ΢ΣΞΛιʔε͔ΒϏϧυ͢ΔΑ͏ͳ ຖճ݁Ռ͕ಉ͡ʹͳΔΑ͏ͳ৔߹͸༧ΊϏϧυ ͨ͠΋ͷผΠϝʔδԽ͓͖ͯ͠ɺFROMͷϕʔε Πϝʔδͱͯ͠ࢦఆ͢ΔΑ͏ʹDockerfileΛॻ͘


Slide 60

Slide 60 text

Ξϯνύλʔϯ-02. ΞΧ΢ϯτ৘ใΛΠϝʔδ಺ ʹอଘͯ͠͠·͏

Slide 61

Slide 61 text

DockerΛ࢖͍࢝Ίͨ๭ϓϩδΣΫτA͞Μͷྫ̎ ɾ࡞੒ͨ͠DockerΠϝʔδΛಛʹύϥϝʔλΛࢦఆͤͣ ىಈ͢ΔͱಛఆͷRDS΍S3΁઀ଓ͢ΔΑ͏ʹͳ͍ͬͯͨ
 ɾԿ͔ͱࢥͬͯௐ΂ͯΈΔͱDBͷ઀ଓ৘ใ΍AWSͷ IAMΞΧ΢ϯτͷΫϨσϯγϟϧ৘ใ(ΞΫηεΩʔ΍γ ʔΫϨοτΩʔ)·Ͱ΋͕Πϝʔδ಺ʹ಺แ͞Ε͍ͯͨ ɾ͜ΕͰ͸ηΩϡϦςΟతʹΑΖ͘͠ͳ͍͠ɺ઀ଓઌ͕ ݻఆʹͳ͍ͬͯͯ͸֤؀ڥͰΠϝʔδΛ࢖͍·Θ͢͜ͱ ͕Ͱ͖ͳ͍

Slide 62

Slide 62 text

DockerΛ࢖͍࢝Ίͨ๭ϓϩδΣΫτA͞ΜͷରԠࡦ 1. DockerΠϝʔδ಺ʹDB઀ଓઌ΍ΫϨσϯγϟϧ৘ ใ͸಺แ͠ͳ͍ɻDockerΠϝʔδىಈ࣌ʹ؀ڥม਺ͱ ͯ͠౉͢
 2. Ͳ͏ͯ͠΋؀ڥม਺͕ಡΈࠐΊͳ͍ઃఆϑΝΠϧͳ Ͳͷ৔߹ɺgettextʹ෇ଐ͍ͯ͠Δ envsubst ίϚϯυΛ ࢖༻ͯ͠ઃఆϑΝΠϧʹهड़͞Εͨ؀ڥม਺Λஔ͖׵ ͑ΔΑ͏ʹ͢Δ 3. ؀ڥม਺ͷ؅ཧ͸ direnv Λ࢖͏ͱศར

Slide 63

Slide 63 text

͜ΕΛػʹɺDockerʹ· ͩ৮Ε͍ͯͳ͍ํ΋ੋඇಋ ೖΛݕ౼ͯ͠ΈΔ͜ͱΛΦ εεϝ͍ͨ͠·͢ɻ

Slide 64

Slide 64 text

Thanks! ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠