$30 off During Our Annual Pro Sale. View Details »

docker build battle

orisano
September 03, 2018

docker build battle

orisano

September 03, 2018
Tweet

More Decks by orisano

Other Decks in Programming

Transcript

  1. Docker Build Battle
    Docker Meetup Tokyo #25 LT #dockertokyo
    @orisano

    View Slide

  2. Docker buildʹԿΛٻΊΔ͔

    View Slide

  3. buildࣗମΛߴ଎ʹʂ
    ग़ྗ͞ΕΔimageΛখ͘͞ʂ

    View Slide

  4. imageΛখ͘͢͞Δͷ͸
    docker push͢Δͱ͖ͷ଎౓
    docker pull͢Δͱ͖ͷ଎౓
    ͷߴ଎Խʹͭͳ͕Δ

    View Slide

  5. ࠓ೔࿩͍ͨ͜͠ͱ

    View Slide

  6. ͲͷΑ͏ʹ଎͘͢Δ͔
    ͲͷΑ͏ʹখ͘͢͞Δ͔

    View Slide

  7. ͲͷΑ͏ʹ଎͘͢Δ͔
    ͲͷΑ͏ʹখ͘͢͞Δ͔

    View Slide

  8. ͲͷΑ͏ʹ଎͘͢Δ͔
    • ίϚϯυͦͷ΋ͷΛ଎͘͢Δ
    • cacheΛޮ͔ͤΔ
    • ґଘͷͳ͍εςʔδΛฒྻͰ࣮ߦ͢Δ
    • ඞཁͳ͍εςʔδΛbuild͠ͳ͍

    View Slide

  9. ͲͷΑ͏ʹ଎͘͢Δ͔
    • ίϚϯυͦͷ΋ͷΛ଎͘͢Δ
    • cacheΛޮ͔ͤΔ
    • ґଘͷͳ͍εςʔδΛฒྻͰ࣮ߦ͢Δ
    • ඞཁͳ͍εςʔδΛbuild͠ͳ͍

    View Slide

  10. ίϚϯυͦͷ΋ͷΛ଎͘͢Δ

    View Slide

  11. ଎͘Ͱ͖ΔίϚϯυ΋͋Δ

    View Slide

  12. Α͘ૺ۰͢Δ
    ଎͘Ͱ͖ΔίϚϯυ

    View Slide

  13. GitHub͔Β࣮ߦϑΝΠϧΛ
    curl or wgetͰऔಘ͢Δ

    View Slide

  14. GitHub Release͸S3
    S3͸Rangeϔομʔ͕࢖͑Δ

    View Slide

  15. ͭ·Γ
    ฒྻμ΢ϯϩʔυ͕Մೳ

    View Slide

  16. github.com/orisano/rget

    View Slide

  17. View Slide

  18. ؀ڥʹΑΓ·͕͢
    5min -> 2min

    View Slide

  19. ͲͷΑ͏ʹ଎͘͢Δ͔
    • ίϚϯυͦͷ΋ͷΛ଎͘͢Δ
    • cacheΛޮ͔ͤΔ
    • ґଘͷͳ͍εςʔδΛฒྻͰ࣮ߦ͢Δ
    • ඞཁͳ͍εςʔδΛbuild͠ͳ͍

    View Slide

  20. cacheΛޮ͔ͤΔ

    View Slide

  21. docker build͢ΔϚγϯ͕
    ಉҰͷ৔߹
    ಉҰͰͳ͍৔߹

    View Slide

  22. docker build͢ΔϚγϯ͕
    ಉҰͷ৔߹
    ಉҰͰͳ͍৔߹

    View Slide

  23. cacheͷ࢓૊ΈΛཧղ͢Δ

    View Slide

  24. RUN͸
    จࣈྻ͕มΘΒͳ͍ݶΓ
    جຊతʹcache͞ΕΔ

    View Slide

  25. COPY, ADD͢ΔϑΝΠϧͷ
    ಺༰͕มΘͬͨ৔߹
    Ҏ߱ͷRUNͷcache͕ഁغ

    View Slide

  26. ͳͷͰ
    lockfileͳͲΛઌʹίϐʔͯ͠
    install͚ͩͯ͠cacheͤ͞Δ

    View Slide

  27. View Slide

  28. View Slide

  29. docker build͢ΔϚγϯ͕
    ಉҰͷ৔߹
    ಉҰͰͳ͍৔߹

    View Slide

  30. CI্Ͱbuild͢Δͱ͖ͳͲ
    cache͕ͳ͍͜ͱ͕ଟ͍

    View Slide

  31. docker save & load
    or
    docker pull
    docker build —cache-from
    Λ࢖͏

    View Slide

  32. image͕େ͖͍/layer͕ଟ͍
    ৔߹
    buildͷ΄͏͕ૣ͍͜ͱ΋͋Δ

    View Slide

  33. image͕େ͖͍/layer͕ଟ͍
    ৔߹
    buildͷ΄͏͕ૣ͍͜ͱ΋͋Δ
    ܭଌܾͯ͠ΊΔ

    View Slide

  34. ͲͷΑ͏ʹ଎͘͢Δ͔
    • ίϚϯυͦͷ΋ͷΛ଎͘͢Δ
    • cacheΛޮ͔ͤΔ
    • ґଘͷͳ͍εςʔδΛฒྻͰ࣮ߦ͢Δ
    • ඞཁͳ͍εςʔδΛbuild͠ͳ͍

    View Slide

  35. ґଘͷͳ͍εςʔδΛ
    ฒྻͰ࣮ߦ͢Δ

    View Slide

  36. buildkitΛ࢖͍ͬͯͩ͘͞ʂ
    github.com/moby/buildkit
    export DOCKER_BUILDKIT=1

    View Slide

  37. ͲͷΑ͏ʹ଎͘͢Δ͔
    • ίϚϯυͦͷ΋ͷΛ଎͘͢Δ
    • cacheΛޮ͔ͤΔ
    • ґଘͷͳ͍εςʔδΛฒྻͰ࣮ߦ͢Δ
    • ඞཁͳ͍εςʔδΛbuild͠ͳ͍

    View Slide

  38. ඞཁͳ͍εςʔδΛ
    build͠ͳ͍

    View Slide

  39. ͓ͦΒ͘buildkitͰͰ͖Δ͕
    buildkit͕࢖͑ͳ͍৔߹ʹ

    View Slide

  40. github.com/orisano/targd
    • DockerfileͷASTΛऔಘ
    • ࢦఆ͞ΕͨεςʔδͷґଘεςʔδΛநग़
    • ґଘεςʔδ͚ͩͷDockerfileΛग़ྗ

    View Slide

  41. github.com/orisano/targd

    View Slide

  42. ͲͷΑ͏ʹ଎͘͢Δ͔
    ͲͷΑ͏ʹখ͘͢͞Δ͔

    View Slide

  43. ͲͷΑ͏ʹখ͘͢͞Δ͔
    • multi stage buildΛ࢖͏
    • RUNΛ·ͱΊΔ(?)
    • ͳͥେ͖͍͔Λ஌Δ

    View Slide

  44. ͲͷΑ͏ʹখ͘͢͞Δ͔
    • multi stage buildΛ࢖͏
    • RUNΛ·ͱΊΔ(?)
    • ͳͥେ͖͍͔Λ஌Δ

    View Slide

  45. multi stage buildΛ࢖͏

    View Slide

  46. multi stage buildʹ͍ͭͯ͸
    ׂѪ

    View Slide

  47. multi stage buildͰ
    ͋Γ͕ͪͳٙ໰

    View Slide

  48. ࠷ऴతͳΠϝʔδ͕
    খ͘͞ͳΔ͔Β
    ͦΕ·Ͱͷεςʔδ͸
    ࠷దԽ͠ͳͯ͘ྑ͍ʁ

    View Slide

  49. View Slide

  50. ݸਓతʹ͸No

    View Slide

  51. CI্Ͱbuild —cache-from
    Λ࢖͍ͬͯΔ৔߹
    ࠷ऴεςʔδ͚ͩcache͢Δ
    ҙຯ͸ͳ͍

    View Slide

  52. moby/moby/issues/34715

    View Slide

  53. multi stage build࣌ʹ
    cacheΛޮ͔͍ͤͨ৔߹͸
    લͷεςʔδ΋
    ໌ࣔతʹpush͢Δ͔͠ͳ͍

    View Slide

  54. ݁ہpush͢ΔͷͰ
    push/pullͷίετ͕͔͔Δ
    ͢΂ͯͷεςʔδΛฏ౳ʹ
    খ͘͢͞΂͖
    (ݸਓͷݟղͰ͢)

    View Slide

  55. ͲͷΑ͏ʹখ͘͢͞Δ͔
    • multi stage buildΛ࢖͏
    • RUNΛ·ͱΊΔ(?)
    • ͳͥେ͖͍͔Λ஌Δ

    View Slide

  56. RUNΛ·ͱΊΔ(?)

    View Slide

  57. ͳΜͱͳ͘RUNΛ·ͱΊΔ
    ͱαΠζ͕খ͘͞ͳΔ
    (ͱࢥ͍ͬͯ·ͨ͠)

    View Slide

  58. github.com/orisano/minid
    • DockerfileͷASTΛऔಘ
    • ࿈ଓ͢ΔRUN, COPY, ADD, ENVΛ࿈݁͢Δ
    • ݁ՌͷDockerfileΛग़ྗ

    View Slide

  59. github.com/orisano/minid

    View Slide

  60. ϨΠϠʔͷΦʔόʔϔου͕
    ݮΔ͔Βখ͘͞ͳΔʁ

    View Slide

  61. ͍͍͑

    View Slide

  62. ·ͣ
    Ͳ͏͍͏ܗͰอଘ͞ΕͯΔ͔
    Λ஌Δ

    View Slide

  63. aufs / overlayfs2

    View Slide

  64. ετϨʔδυϥΠόʔͷ
    ৄࡉ͸ׂѪ

    View Slide

  65. େࡶ೺ʹݴ͏ͱίϚϯυຖʹ
    fsͷࠩ෼Λ͍࣋ͬͯΔ

    View Slide

  66. ͳͷͰRUNΛލ͍Ͱ
    ಉ͡ϑΝΠϧΛ͍͡Δͱ
    αΠζ͕ഒʹͳͬͨΓ͢Δ

    View Slide

  67. RUNΛލ͍Ͱ
    େ͖ͳҰ࣌ϑΝΠϧΛ
    ࡟আͯ͠΋ޮՌ͕ͳ͍

    View Slide

  68. ػցతʹ
    RUNΛ·ͱΊΔͷ͸
    ޮՌ͕͋Δ

    View Slide

  69. ͲͷΑ͏ʹখ͘͢͞Δ͔
    • multi stage buildΛ࢖͏
    • RUNΛ·ͱΊΔ(?)
    • ͳͥେ͖͍͔Λ஌Δ

    View Slide

  70. ͳͥେ͖͍͔Λ஌Δ

    View Slide

  71. ͍͔ͳΔνϡʔχϯάͰ΋
    ܭଌͤͣʹ΍ͬͯ͸͍͚ͳ͍

    View Slide

  72. docker history

    View Slide

  73. docker history

    View Slide

  74. ͲͷϨΠϠʔ͕
    େ͖͍͔͸Θ͔Δ͚Ͳ
    ͳͥେ͖͍͔͸෼͔ΓͮΒ͍

    View Slide

  75. github.com/orisano/dlayer
    • documentະ੔උ… Ӷҙ։ൃத
    • docker saveͰಘΒΕͨtarΛղੳ
    • layerͱcmdͷରԠΛͱΔ
    • layerͷࠩ෼ΛϑΝΠϧαΠζ͕େ͖͍ॱʹදࣔ

    View Slide

  76. github.com/orisano/dlayer

    View Slide

  77. ࣮ࡍʹdlayerΛ࢖ͬͯ
    golangެࣜalpineΠϝʔδͷ
    αΠζΛݮΒͯ͠Έͨ

    View Slide

  78. docker-library/golang/pull/232

    View Slide

  79. View Slide

  80. ·ͱΊ
    • ίϚϯυΛ଎͘Ͱ͖ͳ͍͔ߟ͑Δ
    • cacheΛཧղͯ͠༗ޮʹ׆͔͢ (CI or ϩʔΧϧ)
    • multi stage buildΛ࢖͏ (ॏ͍stageΛcache͢Δ)
    • layerΛখ͘͢͞ΔͨΊʹ෼ੳ͢Δ
    • buildkitΛ࢖͏!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    View Slide

  81. ࡞ͬͨπʔϧ
    • github.com/orisano/rget
    • github.com/orisano/targd
    • github.com/orisano/minid
    • github.com/orisano/dlayer
    • ྑ͍ͱࢥͬͨΒελʔ͍͚ͯͨͩ͠ΔͱྭΈʹͳΓ·͢

    View Slide

  82. ͓͢͢Ίͷࢿྉ
    • https://docs.docker.com/develop/develop-
    images/dockerfile_best-practices/
    #dockerfile-instructions
    • https://cloud.google.com/solutions/best-
    practices-for-building-containers

    View Slide