docker build battle
by
orisano
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Docker Build Battle Docker Meetup Tokyo #25 LT #dockertokyo @orisano
Slide 2
Slide 2 text
Docker buildʹԿΛٻΊΔ͔
Slide 3
Slide 3 text
buildࣗମΛߴʹʂ ग़ྗ͞ΕΔimageΛখ͘͞ʂ
Slide 4
Slide 4 text
imageΛখ͘͢͞Δͷ docker push͢Δͱ͖ͷ docker pull͢Δͱ͖ͷ ͷߴԽʹͭͳ͕Δ
Slide 5
Slide 5 text
ࠓ͍ͨ͜͠ͱ
Slide 6
Slide 6 text
ͲͷΑ͏ʹ͘͢Δ͔ ͲͷΑ͏ʹখ͘͢͞Δ͔
Slide 7
Slide 7 text
ͲͷΑ͏ʹ͘͢Δ͔ ͲͷΑ͏ʹখ͘͢͞Δ͔
Slide 8
Slide 8 text
ͲͷΑ͏ʹ͘͢Δ͔ • ίϚϯυͦͷͷΛ͘͢Δ • cacheΛޮ͔ͤΔ • ґଘͷͳ͍εςʔδΛฒྻͰ࣮ߦ͢Δ • ඞཁͳ͍εςʔδΛbuild͠ͳ͍
Slide 9
Slide 9 text
ͲͷΑ͏ʹ͘͢Δ͔ • ίϚϯυͦͷͷΛ͘͢Δ • cacheΛޮ͔ͤΔ • ґଘͷͳ͍εςʔδΛฒྻͰ࣮ߦ͢Δ • ඞཁͳ͍εςʔδΛbuild͠ͳ͍
Slide 10
Slide 10 text
ίϚϯυͦͷͷΛ͘͢Δ
Slide 11
Slide 11 text
͘Ͱ͖ΔίϚϯυ͋Δ
Slide 12
Slide 12 text
Α͘ૺ۰͢Δ ͘Ͱ͖ΔίϚϯυ
Slide 13
Slide 13 text
GitHub͔Β࣮ߦϑΝΠϧΛ curl or wgetͰऔಘ͢Δ
Slide 14
Slide 14 text
GitHub ReleaseS3 S3Rangeϔομʔ͕͑Δ
Slide 15
Slide 15 text
ͭ·Γ ฒྻμϯϩʔυ͕Մೳ
Slide 16
Slide 16 text
github.com/orisano/rget
Slide 17
Slide 17 text
No content
Slide 18
Slide 18 text
ڥʹΑΓ·͕͢ 5min -> 2min
Slide 19
Slide 19 text
ͲͷΑ͏ʹ͘͢Δ͔ • ίϚϯυͦͷͷΛ͘͢Δ • cacheΛޮ͔ͤΔ • ґଘͷͳ͍εςʔδΛฒྻͰ࣮ߦ͢Δ • ඞཁͳ͍εςʔδΛbuild͠ͳ͍
Slide 20
Slide 20 text
cacheΛޮ͔ͤΔ
Slide 21
Slide 21 text
docker build͢ΔϚγϯ͕ ಉҰͷ߹ ಉҰͰͳ͍߹
Slide 22
Slide 22 text
docker build͢ΔϚγϯ͕ ಉҰͷ߹ ಉҰͰͳ͍߹
Slide 23
Slide 23 text
cacheͷΈΛཧղ͢Δ
Slide 24
Slide 24 text
RUN จࣈྻ͕มΘΒͳ͍ݶΓ جຊతʹcache͞ΕΔ
Slide 25
Slide 25 text
COPY, ADD͢ΔϑΝΠϧͷ ༰͕มΘͬͨ߹ Ҏ߱ͷRUNͷcache͕ഁغ
Slide 26
Slide 26 text
ͳͷͰ lockfileͳͲΛઌʹίϐʔͯ͠ install͚ͩͯ͠cacheͤ͞Δ
Slide 27
Slide 27 text
No content
Slide 28
Slide 28 text
No content
Slide 29
Slide 29 text
docker build͢ΔϚγϯ͕ ಉҰͷ߹ ಉҰͰͳ͍߹
Slide 30
Slide 30 text
CI্Ͱbuild͢Δͱ͖ͳͲ cache͕ͳ͍͜ͱ͕ଟ͍
Slide 31
Slide 31 text
docker save & load or docker pull docker build —cache-from Λ͏
Slide 32
Slide 32 text
image͕େ͖͍/layer͕ଟ͍ ߹ buildͷ΄͏͕ૣ͍͜ͱ͋Δ
Slide 33
Slide 33 text
image͕େ͖͍/layer͕ଟ͍ ߹ buildͷ΄͏͕ૣ͍͜ͱ͋Δ ܭଌܾͯ͠ΊΔ
Slide 34
Slide 34 text
ͲͷΑ͏ʹ͘͢Δ͔ • ίϚϯυͦͷͷΛ͘͢Δ • cacheΛޮ͔ͤΔ • ґଘͷͳ͍εςʔδΛฒྻͰ࣮ߦ͢Δ • ඞཁͳ͍εςʔδΛbuild͠ͳ͍
Slide 35
Slide 35 text
ґଘͷͳ͍εςʔδΛ ฒྻͰ࣮ߦ͢Δ
Slide 36
Slide 36 text
buildkitΛ͍ͬͯͩ͘͞ʂ github.com/moby/buildkit export DOCKER_BUILDKIT=1
Slide 37
Slide 37 text
ͲͷΑ͏ʹ͘͢Δ͔ • ίϚϯυͦͷͷΛ͘͢Δ • cacheΛޮ͔ͤΔ • ґଘͷͳ͍εςʔδΛฒྻͰ࣮ߦ͢Δ • ඞཁͳ͍εςʔδΛbuild͠ͳ͍
Slide 38
Slide 38 text
ඞཁͳ͍εςʔδΛ build͠ͳ͍
Slide 39
Slide 39 text
͓ͦΒ͘buildkitͰͰ͖Δ͕ buildkit͕͑ͳ͍߹ʹ
Slide 40
Slide 40 text
github.com/orisano/targd • DockerfileͷASTΛऔಘ • ࢦఆ͞ΕͨεςʔδͷґଘεςʔδΛநग़ • ґଘεςʔδ͚ͩͷDockerfileΛग़ྗ
Slide 41
Slide 41 text
github.com/orisano/targd
Slide 42
Slide 42 text
ͲͷΑ͏ʹ͘͢Δ͔ ͲͷΑ͏ʹখ͘͢͞Δ͔
Slide 43
Slide 43 text
ͲͷΑ͏ʹখ͘͢͞Δ͔ • multi stage buildΛ͏ • RUNΛ·ͱΊΔ(?) • ͳͥେ͖͍͔ΛΔ
Slide 44
Slide 44 text
ͲͷΑ͏ʹখ͘͢͞Δ͔ • multi stage buildΛ͏ • RUNΛ·ͱΊΔ(?) • ͳͥେ͖͍͔ΛΔ
Slide 45
Slide 45 text
multi stage buildΛ͏
Slide 46
Slide 46 text
multi stage buildʹ͍ͭͯ ׂѪ
Slide 47
Slide 47 text
multi stage buildͰ ͋Γ͕ͪͳٙ
Slide 48
Slide 48 text
࠷ऴతͳΠϝʔδ͕ খ͘͞ͳΔ͔Β ͦΕ·Ͱͷεςʔδ ࠷దԽ͠ͳͯ͘ྑ͍ʁ
Slide 49
Slide 49 text
No content
Slide 50
Slide 50 text
ݸਓతʹNo
Slide 51
Slide 51 text
CI্Ͱbuild —cache-from Λ͍ͬͯΔ߹ ࠷ऴεςʔδ͚ͩcache͢Δ ҙຯͳ͍
Slide 52
Slide 52 text
moby/moby/issues/34715
Slide 53
Slide 53 text
multi stage build࣌ʹ cacheΛޮ͔͍ͤͨ߹ લͷεςʔδ ໌ࣔతʹpush͢Δ͔͠ͳ͍
Slide 54
Slide 54 text
݁ہpush͢ΔͷͰ push/pullͷίετ͕͔͔Δ ͯ͢ͷεςʔδΛฏʹ খ͖͘͢͞ (ݸਓͷݟղͰ͢)
Slide 55
Slide 55 text
ͲͷΑ͏ʹখ͘͢͞Δ͔ • multi stage buildΛ͏ • RUNΛ·ͱΊΔ(?) • ͳͥେ͖͍͔ΛΔ
Slide 56
Slide 56 text
RUNΛ·ͱΊΔ(?)
Slide 57
Slide 57 text
ͳΜͱͳ͘RUNΛ·ͱΊΔ ͱαΠζ͕খ͘͞ͳΔ (ͱࢥ͍ͬͯ·ͨ͠)
Slide 58
Slide 58 text
github.com/orisano/minid • DockerfileͷASTΛऔಘ • ࿈ଓ͢ΔRUN, COPY, ADD, ENVΛ࿈݁͢Δ • ݁ՌͷDockerfileΛग़ྗ
Slide 59
Slide 59 text
github.com/orisano/minid
Slide 60
Slide 60 text
ϨΠϠʔͷΦʔόʔϔου͕ ݮΔ͔Βখ͘͞ͳΔʁ
Slide 61
Slide 61 text
͍͍͑
Slide 62
Slide 62 text
·ͣ Ͳ͏͍͏ܗͰอଘ͞ΕͯΔ͔ ΛΔ
Slide 63
Slide 63 text
aufs / overlayfs2
Slide 64
Slide 64 text
ετϨʔδυϥΠόʔͷ ৄࡉׂѪ
Slide 65
Slide 65 text
େࡶʹݴ͏ͱίϚϯυຖʹ fsͷࠩΛ͍࣋ͬͯΔ
Slide 66
Slide 66 text
ͳͷͰRUNΛލ͍Ͱ ಉ͡ϑΝΠϧΛ͍͡Δͱ αΠζ͕ഒʹͳͬͨΓ͢Δ
Slide 67
Slide 67 text
RUNΛލ͍Ͱ େ͖ͳҰ࣌ϑΝΠϧΛ আͯ͠ޮՌ͕ͳ͍
Slide 68
Slide 68 text
ػցతʹ RUNΛ·ͱΊΔͷ ޮՌ͕͋Δ
Slide 69
Slide 69 text
ͲͷΑ͏ʹখ͘͢͞Δ͔ • multi stage buildΛ͏ • RUNΛ·ͱΊΔ(?) • ͳͥେ͖͍͔ΛΔ
Slide 70
Slide 70 text
ͳͥେ͖͍͔ΛΔ
Slide 71
Slide 71 text
͍͔ͳΔνϡʔχϯάͰ ܭଌͤͣʹ͍͚ͬͯͳ͍
Slide 72
Slide 72 text
docker history
Slide 73
Slide 73 text
docker history
Slide 74
Slide 74 text
ͲͷϨΠϠʔ͕ େ͖͍͔Θ͔Δ͚Ͳ ͳͥେ͖͍͔͔ΓͮΒ͍
Slide 75
Slide 75 text
github.com/orisano/dlayer • documentະඋ… Ӷҙ։ൃத • docker saveͰಘΒΕͨtarΛղੳ • layerͱcmdͷରԠΛͱΔ • layerͷࠩΛϑΝΠϧαΠζ͕େ͖͍ॱʹදࣔ
Slide 76
Slide 76 text
github.com/orisano/dlayer
Slide 77
Slide 77 text
࣮ࡍʹdlayerΛͬͯ golangެࣜalpineΠϝʔδͷ αΠζΛݮΒͯ͠Έͨ
Slide 78
Slide 78 text
docker-library/golang/pull/232
Slide 79
Slide 79 text
No content
Slide 80
Slide 80 text
·ͱΊ • ίϚϯυΛ͘Ͱ͖ͳ͍͔ߟ͑Δ • cacheΛཧղͯ͠༗ޮʹ׆͔͢ (CI or ϩʔΧϧ) • multi stage buildΛ͏ (ॏ͍stageΛcache͢Δ) • layerΛখ͘͢͞ΔͨΊʹੳ͢Δ • buildkitΛ͏!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Slide 81
Slide 81 text
࡞ͬͨπʔϧ • github.com/orisano/rget • github.com/orisano/targd • github.com/orisano/minid • github.com/orisano/dlayer • ྑ͍ͱࢥͬͨΒελʔ͍͚ͯͨͩ͠ΔͱྭΈʹͳΓ·͢
Slide 82
Slide 82 text
͓͢͢Ίͷࢿྉ • https://docs.docker.com/develop/develop- images/dockerfile_best-practices/ #dockerfile-instructions • https://cloud.google.com/solutions/best- practices-for-building-containers