第21回 岡山Ruby, Ruby on Rails勉強会で話をしたRailsの開発環境にDockerを導入した話の資料です。
Rails։ൃڥʹDockerΛಋೖͨ͠ୈ21ճ ԬࢁRuby, Ruby on Railsษڧձҳݟ(@mako_wis)
View Slide
ࣗݾհw ҳݟ ΜΈ·͜ͱw [email protected]w גࣜձࣾΫϨΦϑʔΨʢԻૉࡐൢചɺԻָίϯςεταΠτӡӦʣw ϑϩϯταʔόʔαΠυγεw ࠓͷձ
αʔϏεΠϯ࣌ͷߏEC2(App) EC2(Batch)RDS
S3૿͑ΔawsαʔϏεEC2(App) EC2(Batch)RDS
S3૿͑ΔawsαʔϏεEC2(App) EC2(Batch)RDSCloudSearch
S3૿͑ΔawsαʔϏεEC2(App) EC2(Batch)RDSCloudSearchSQS
S3૿͑ΔawsαʔϏεEC2(App) EC2(Batch)RDSCloudSearchSQSSNS
͜͜Ͱͪΐͬͱ͕
ൃੜ͍ͯͨ͠• ֤ࣗͦΕͧΕͰઃఆͯͨ͠ͷͰൿͷλϨԽ• S3Λ։ൃ༻ʹڞ௨ͷόέοτΛݟ͍ͯͨΓͯ͠σʔλͷॏෳ͕ൃੜ• Ϛγϯങ͍ସ͑ͱ͔ͰڥߏஙΓ͠ͷ߹ʹ͕͔͔࣌ؒΔ
ڥߏங͕ϘτϧωοΫʹ
ڥߏஙΛ؆୯ʹͯ͠ޮUP
ରॲํ๏• ϩʔΧϧʹAWSସαʔϏεΛར༻ͯ͠ຊ൪ͱಉͷڥΛߏங• ։ൃऀຖʹຊ൪ͱಉͷڥΛAWS্ʹߏங
ରॲํ๏• ϩʔΧϧʹAWSସαʔϏεΛར༻ͯ͠ຊ൪ͱಉͷڥΛߏங• ։ൃऀຖʹຊ൪ͱಉͷڥΛAWS্ʹߏஙࠓճͬͪ͜
DockerͰϩʔΧϧʹڥߏங
ࠓճͷํ• DockerΛར༻ͯ͠ϩʔΧϧʹ։ൃڥΛߏங• खܰʹڥΛ্ཱ͍ͪ͛ͨͷͰdocker-composeͰίϯςφΛཧ• ସ͑αʔϏε͕ແ͍ͷผ్ରࡦߟ͑Δ
RailsΞϓϦRubyόονS3MySQLSQSɾSNSSQSɾSNSॳظԽ
RailsΞϓϦҎ֎ͷͱ͜Ζ
S3ͷஔ͖͑• MinioΛ༻• https://github.com/minio/minio• dockerΠϝʔδΛར༻ͯ͠ӬଓԽ͕༰қ• σΟϨΫτϦ=όέοτͱͯ͠Έͳͯ͘͠ΕΔͷͰόέοτ࡞ࡁͰͰ͖Δ
SQSɾSNSͷஔ͖͑• Localstack• https://github.com/localstack/localstack• ֤छawsαʔϏεͷସ͑αʔϏεΛఏڙ• s3minioͷํ͕͍͍͢ͷͰࠓճະ༻• SNSSQSͷ྆ํରԠͯ͘͠Ε͍ͯΔ• Ωϡʔ࡞ผ్ઃఆόονΩοΫ༻ͷΠϝʔδΛ࡞ͯ͠docker-compose up࣌ʹ࣮ߦ
RDSͷஔ͖͑• ฐࣾMySQLͳͷͰMySQLͷdockerΠϝʔδΛ༻• ֤ࣗೖΕ͍ͯΔMySQLΛ༻͢Δख͕͋ͬͨઃఆόʔδϣϯ͕όϥͭ͘Մೳੑ͋ΔͷͰ౷Ұ
CloudSearchɾɾɾ• ϕʔλ൛͔ͩΒͳͷ͔ସ͑αʔϏε͕ΠϚΠν• ݩʑΫϥυαʔνͷઃఆ͕ͳ͔ͬͨΒDBͷݕࡧʹΓସ͑ΔϩδοΫ͕͋ͬͨͷͰͦΕΛར༻• ʢͦͷ͏ͪElasticSearchʹΓ͑Δ͔͠Εͳ͍ͷͰҰ୴ஔ͍͓ͯ͘
όονΞϓϦͷରԠ• όονͷDockerΠϝʔδͷ࡞• DockerԽʹ͏ίʔυमਖ਼• SQSʹґଘͯ͠ΔͷͰSQSͷ४උྃΛͭίʔυΛՃ• ϝΠϯΞϓϦͱಉ࣌ʹىಈ͍ͨ͠• όονͷDockerϑΝΠϧΛϏϧυͯ͠ΠϝʔδΛ࡞͢ΔํࣜΛબ• ϦϙδτϦ͕ผͳͷͰgit submoduleΛར༻ͯ͠ϝΠϯΞϓϦͷϦϙδτϦʹՃ
RailsΞϓϦͷͱ͜Ζ
΄ΜͱDockerͷ֎ʹग़͔ͨͬͨ͠ɾɾɾ
Docker͔Βग़ͤͳ͔ͬͨཧ༝• Rubyόονଆ͔ΒRailsΞϓϦʹ௨৴ͷඞཁ͕͋Γ• Dockerίϯςφଆ͔ΒϗετOSͷIPΛऔಘ͢Δํ๏͕ϗετOSଆͰ·ͪ·ͪ• MacͱLinuxҰॹͬΆ͍͚ͲWindows͕ɾɾɾ• ϗετOSଆͰRailsΛىಈ͢ΔͱRubyͷόονଆ͔ΒRails௨৴Ͱ͖ͳ͍
Docker্Ͱಈ͔͠·͢
DockerͰಈ͔͢• ެࣜʹRubyΠϝʔδ͕͋ΔͷͰͦΕΛ༻• ϦϙδτϦϧʔτʹDockerϑΝΠϧΛஔ͍ͯΠϝʔδϏϧυ• Πϝʔδ࡞࣌ʹbundle installΛߦ͏• ΞϓϦͷϧʔτΛίϯςφʹϚϯτͯ͠ίʔυมߋ࣌ʹ͙͢ʹөͰ͖ΔΑ͏ʹ͢Δ
Docker-compose upͰ։ൃڥ্ཱ͕͕ͪΔ
DockerԽͰਏ͍ͱ͜Ζ• Gemfileͷมߋ࣌ʹDockerΠϝʔδͷϏϧυ͕ඞཁ• PCʹΑͬͯը໘ͷද͕ࣔҟৗʹ͍• RailsίϚϯυ࣮ߦ͕DockerΛհ͢ͷͰͯ͘ਏ͍• rakeίϚϯυͷ࣮ߦΛύΠϓͰड͚औΕͳ͍ͷͰਏ͍
·ͱΊ• docker-compose upͰඞཁͳ։ൃڥ্ཱ͕͕ͪΔͷศར• ֤ࣗͦΕͧΕͰઃఆ͢Δख͕ؒল͚ͨ• Railsͷ֤छίϚϯυΛ࣮ߦ͢Δͷ͕໘• ͍͍ͪͪdocker-compose run ~Λ࣮ߦ͢Δͷ͕ΊΜͲ͍͘͞• γΣϧεΫϦϓτΛ४උͯ͠লྗԽ• DockerΠϝʔδS3ϩʔΧϧԽͰPCͷ༰ྔ͕ඞཁ
͓ΘΓ