Multi-stage BuildsPatterns & PracticeDocker Meetup Tokyo #26 #dockertokyo@orisano
View Slide
ࣗݾհ• @orisano• ۦ͚ग़͠ͷΞϓϦέʔγϣϯΤϯδχΞ• ޮతͳdocker buildΛࢦͯ͠ؤு͍ͬͯΔ
օ͞ΜMulti-stage Buildsͯ͠·͔͢ʁ
ͦͦMulti-stage Buildsͱ
Docker 17.05(2017-05-04)͔Βೖͬͨػೳ
എܠ
ͦͦpush͢ΔΠϝʔδΛখ͍ͨ͘͞͠
Multi-stage BuildsҎલ
build༻ͷDockerfileΛͬͯbuildͯ͠volume͔ΒՌΛऔΓग़͢
Ұ࿈ͷྲྀΕΛshell scriptͰॻ͍͍ͯͨ$ ./build.sh
͜ΕΛDockerfileͷΈͰ࣮ݱͰ͖ΔΑ͏ʹͳͬͨ
ෳͷFROMCOPY —fromͰͷผΠϝʔδ͔Βͷίϐʔ
্ͷΑ͏ͳഎܠͰՃ͞ΕͨMulti-stage Builds
͑Δͷ͏ͷ͕ਓؒ
͍ΖΜͳ׆༻ํ๏͕͋Δ
https://medium.com/@tonistiigi/advanced-multi-stage-build-patterns-6f741b852fae
https://speakerdeck.com/garethr/advanced-docker-image-build-patterns(2019-11-01 Velocity)
Multi-stage Builds Patterns
builder & appalias imagetested appinner base imagesplit step
#VJMEFS"QQ
base imageΛ໌ࣔతʹڞ௨ԽͰ͖Δ
#VJMEFS"QQ5FTU
#BTF"QQ "QQ
'BU#VJMEFS"QQ
#VJMEFS"QQ7FOEPS )FBWZ )FBWZ
cacheΛ࠷େݶ׆༻Ͱ͖Δ
Multi-stage Buildsbuildkitͱ૬ੑ͕ྑ͍
ฒྻbuildʹΑΔߴԽ͕ݟࠐΊΔʂ
Multi-stage builds࠷ߴʂ
͔͠͠
buildkit͡Όͳ͍ͱਏ͍
CIbuildkit͑ͳ͔ͬͨΓ͢Δ
CI্ͷMulti-stage Buildsͷcacheઓུ
͜Ε·ͰͷΓํͩͱখ͍͞ΠϝʔδͷcacheΛͯ͠͠·͏
ຊʹඞཁͳͷॏ͍Πϝʔδͷcache
CIʹ͓͚ΔMulti-stage Builds΄΅ͯ͢ͷεςʔδΛ໌ࣔతʹbuild͢Δ͔͠ͳ͍
ͦͷ্ͰͲ͏͍͏ઓུΛऔΔ͔
save & loadOrpush & pull+—cache-from
save & load ͷ߹
Pros֎෦ʹstorage͕͋Ε࣮ݱՄೳϑΝΠϧड͚͠ͷΈͰྑ͍
ConsαΠζ͕Ͱ͔͍ಉ͡ϕʔεΠϝʔδͰॏෳsave͕ͳΜ͔ॏ͍
push & pull ͷ߹
ProsRegistry͕͋ΕՄೳѹॖ͞Εͨঢ়ଶͰड͚͠ϕʔεΠϝʔδ͕ॏෳ͠ͳ͍
Conscache༻tag or image͕ඞཁpush & pullͷෛՙ
ͿͬͪΌ͚ݱঢ়ͰCI্ͷcache͕໘ष͗͢Δ
CIͰcacheΛޮ͔͍ͤͨͳΒ2 stage·Ͱ(ݸਓͷײͰ͢)
CIͱͷ૬ੑ͋Δ͕pipeline͕ෳࡶʹͳͬͨΓ࣮ͦͦݱͰ͖ͳ͔ͬͨΓ
Multi-stage Buildsͷ͍ॴ
buildΑΓpullͷ΄͏͕ଟ͍dockerd͕มΘΒͳ͍ڥखݩͰͷbuildޮΛ࠷େԽ
CI͖Ͱͳ͍
ͦΕͰΓ͍ͨਓͷͨΊʹ
࡞Γ·ͨ͠orisano/castage
DockerfileΛಡΜͰ͖ͯͯ͢ͷεςʔδΛநग़pull ͱ cache-fromΛࣗಈੜͯ͘͠ΕΔ
͜Ε͚ͩͰղܾ͠ͳ͍
dockerdͱbuildkit—cache-fromͷڍಈ͕ҧ͏
ͳ͍߹ແࢹͯ͘͠Εͨ΄͏͕خ͍͠
ॳظΠϝʔδ͕ͳ͍͚࣌ͩpipelineΛม͑Δͷਏ͍
݁
CIʹ͓͚ΔMulti-stage Builds͍͠