Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Multi-stage Builds Patterns & Practice

orisano
November 21, 2018

Multi-stage Builds Patterns & Practice

orisano

November 21, 2018
Tweet

More Decks by orisano

Other Decks in Technology

Transcript

  1. Multi-stage Builds
    Patterns & Practice
    Docker Meetup Tokyo #26 #dockertokyo
    @orisano

    View Slide

  2. ࣗݾ঺հ
    • @orisano
    • ۦ͚ग़͠ͷΞϓϦέʔγϣϯΤϯδχΞ
    • ޮ཰తͳdocker buildΛ໨ࢦͯ͠ؤு͍ͬͯΔ

    View Slide

  3. օ͞Μ
    Multi-stage Builds
    ͯ͠·͔͢ʁ

    View Slide

  4. ͦ΋ͦ΋
    Multi-stage Builds
    ͱ͸

    View Slide

  5. Docker 17.05
    (2017-05-04)
    ͔Βೖͬͨػೳ

    View Slide

  6. Docker 17.05
    (2017-05-04)
    ͔Βೖͬͨػೳ

    View Slide

  7. എܠ

    View Slide

  8. ͦ΋ͦ΋
    push͢ΔΠϝʔδΛ
    খ͍ͨ͘͞͠

    View Slide

  9. Multi-stage BuildsҎલ

    View Slide

  10. build༻ͷDockerfileΛ࢖ͬͯ
    buildͯ͠volume͔Β
    ੒Ռ෺ΛऔΓग़͢

    View Slide

  11. Ұ࿈ͷྲྀΕΛ
    shell scriptͰॻ͍͍ͯͨ
    $ ./build.sh

    View Slide

  12. ͜ΕΛDockerfileͷΈͰ
    ࣮ݱͰ͖ΔΑ͏ʹͳͬͨ

    View Slide

  13. ෳ਺ͷFROM
    COPY —from
    ͰͷผΠϝʔδ͔Βͷίϐʔ

    View Slide

  14. ্ͷΑ͏ͳഎܠͰ௥Ճ͞Εͨ
    Multi-stage Builds

    View Slide

  15. ࢖͑Δ΋ͷ͸࢖͏ͷ͕ਓؒ

    View Slide

  16. ͍ΖΜͳ׆༻ํ๏͕͋Δ

    View Slide

  17. https://medium.com/@tonistiigi/advanced-
    multi-stage-build-patterns-6f741b852fae

    View Slide

  18. https://speakerdeck.com/
    garethr/advanced-docker-
    image-build-patterns
    (2019-11-01 Velocity)

    View Slide

  19. Multi-stage Builds Patterns

    View Slide

  20. builder & app
    alias image
    tested app
    inner base image
    split step

    View Slide

  21. builder & app
    alias image
    tested app
    inner base image
    split step

    View Slide

  22. View Slide

  23. #VJMEFS
    "QQ

    View Slide

  24. builder & app
    alias image
    tested app
    inner base image
    split step

    View Slide

  25. View Slide

  26. base imageΛ
    ໌ࣔతʹڞ௨ԽͰ͖Δ

    View Slide

  27. builder & app
    alias image
    tested app
    inner base image
    split step

    View Slide

  28. View Slide

  29. #VJMEFS
    "QQ
    5FTU

    View Slide

  30. View Slide

  31. #VJMEFS
    "QQ
    5FTU

    View Slide

  32. builder & app
    alias image
    tested app
    inner base image
    split step

    View Slide

  33. View Slide

  34. #BTF
    "QQ "QQ

    View Slide

  35. builder & app
    alias image
    tested app
    inner base image
    split step

    View Slide

  36. View Slide

  37. 'BU#VJMEFS
    "QQ

    View Slide

  38. #VJMEFS
    "QQ
    7FOEPS )FBWZ )FBWZ

    View Slide

  39. cacheΛ࠷େݶ׆༻Ͱ͖Δ

    View Slide

  40. Multi-stage Builds͸
    buildkitͱ૬ੑ͕ྑ͍

    View Slide

  41. ฒྻbuildʹΑΔ
    ߴ଎Խ͕ݟࠐΊΔʂ

    View Slide

  42. Multi-stage builds͸࠷ߴʂ

    View Slide

  43. ͔͠͠

    View Slide

  44. buildkit͡Όͳ͍ͱਏ͍

    View Slide

  45. CI͸buildkit
    ࢖͑ͳ͔ͬͨΓ͢Δ

    View Slide

  46. CI্ͷ
    Multi-stage Buildsͷ
    cacheઓུ

    View Slide

  47. ͜Ε·Ͱͷ΍Γํͩͱ
    খ͍͞ΠϝʔδͷcacheΛ
    ͯ͠͠·͏

    View Slide

  48. ຊ౰ʹඞཁͳͷ͸
    ॏ͍Πϝʔδͷcache

    View Slide

  49. CIʹ͓͚Δ
    Multi-stage Builds͸
    ΄΅͢΂ͯͷεςʔδΛ
    ໌ࣔతʹbuild͢Δ͔͠ͳ͍

    View Slide

  50. ͦͷ্Ͱ
    Ͳ͏͍͏ઓུΛऔΔ͔

    View Slide

  51. save & load
    Or
    push & pull
    +
    —cache-from

    View Slide

  52. save & load ͷ৔߹

    View Slide

  53. Pros
    ֎෦ʹstorage͕͋Ε͹
    ࣮ݱՄೳ
    ϑΝΠϧड͚౉͠ͷΈͰྑ͍

    View Slide

  54. Cons
    αΠζ͕Ͱ͔͍
    ಉ͡ϕʔεΠϝʔδͰ΋ॏෳ
    save͕ͳΜ͔ॏ͍

    View Slide

  55. push & pull ͷ৔߹

    View Slide

  56. Pros
    Registry͕͋Ε͹Մೳ
    ѹॖ͞Εͨঢ়ଶͰड͚౉͠
    ϕʔεΠϝʔδ͕ॏෳ͠ͳ͍

    View Slide

  57. Cons
    cache༻tag or image͕ඞཁ
    push & pullͷෛՙ

    View Slide

  58. ͿͬͪΌ͚ݱঢ়Ͱ͸
    CI্ͷcache͕໘౗ष͗͢Δ

    View Slide

  59. CIͰ
    cacheΛޮ͔͍ͤͨͳΒ
    2 stage·Ͱ
    (ݸਓͷײ૝Ͱ͢)

    View Slide

  60. CIͱͷ૬ੑ΋͋Δ͕
    pipeline͕ෳࡶʹͳͬͨΓ
    ͦ΋ͦ΋࣮ݱͰ͖ͳ͔ͬͨΓ

    View Slide

  61. Multi-stage Buildsͷ࢖͍ॴ

    View Slide

  62. buildΑΓpullͷ΄͏͕ଟ͍
    dockerd͕มΘΒͳ͍؀ڥ
    खݩͰͷbuildޮ཰Λ࠷େԽ

    View Slide

  63. CI޲͖Ͱ͸ͳ͍

    View Slide

  64. ͦΕͰ΋΍Γ͍ͨਓͷͨΊʹ

    View Slide

  65. ࡞Γ·ͨ͠
    orisano/castage

    View Slide

  66. View Slide

  67. DockerfileΛಡΜͰ͖ͯ
    ͢΂ͯͷεςʔδΛநग़
    pull ͱ cache-fromΛ
    ࣗಈੜ੒ͯ͘͠ΕΔ

    View Slide

  68. View Slide

  69. View Slide

  70. ͜Ε͚ͩͰ͸ղܾ͠ͳ͍

    View Slide

  71. dockerdͱbuildkit
    —cache-from
    ͷڍಈ͕ҧ͏

    View Slide

  72. ͳ͍৔߹͸
    ແࢹͯ͘͠Εͨ΄͏͕خ͍͠

    View Slide

  73. ॳظΠϝʔδ͕ͳ͍࣌
    ͚ͩpipelineΛม͑Δͷਏ͍

    View Slide

  74. ݁࿦

    View Slide

  75. CIʹ͓͚Δ
    Multi-stage Builds͸೉͍͠

    View Slide