dockerignoreͷContainer Build Meetup #2 #container_build@orisano
View Slide
docker buildͷΛ͠·͢
%PDLFS$-* EPDLFSE
%PDLFS$-* EPDLFSE$ docker build .
%PDLFS$-* EPDLFSE$ docker build [build context]
%PDLFS$-* EPDLFSE$ docker build .1. build contextΛtarͰarchive͢Δ
%PDLFS$-* EPDLFSE$ docker build .2. dockerdʹରͯ͠POST͢Δ
%PDLFS$-* EPDLFSE$ docker build .3. ड͚औͬͨtarΛల։
%PDLFS$-* EPDLFSE$ docker build .4. DockerfileͷղऍΛ͢Δ
%PDLFS$-* EPDLFSE$ docker build .5. εςʔδ͝ͱʹ࣮ߦ
%PDLFS$-* EPDLFSE$ docker build .6. InstructionΛ࣮ߦ
%PDLFS$-* EPDLFSE$ docker build .7. Instructionຖʹimage͕Ͱ͖Δ
%PDLFS$-* EPDLFSE$ docker build .8.ऴΘͬͨΒ௨
ෆཁͳϑΝΠϧbuild contextʹؚΊͨ͘ͳ͍
ͳͥʁ
1. Archiveͷίετ2. సૹͷίετ3. cacheͷͨΊ
େྔͷϑΝΠϧΛΞʔΧΠϒ͢Δͷॏ͍(node_modulesͳͲ)
ΫϥΠΞϯτଆͰߦ͏͕ݱঢ়̎ͭͷ࣮͕͋Δ
docker/cli (Go)docker/docker-py (Python)
docker/cli (Go)dockerίϚϯυ
docker/docker-py (Python)
Docker Engine APIΛPython͔Β͏ͨΊͷͷdocker/compose͕͍ͬͯΔͳΜ͔͍
AntiVirusͳͲ͕I/OΛhook͍ͯ͠Δ߹I/Oίετ͕͍
େ͖ͳϑΝΠϧΛૹΔͷେม
COPYͰҙਤͯ͠ͳ͍ϑΝΠϧ͕ରʹͳ͍ͬͯΔͱcache͕յΕͯ࠷ѱ
build contextʹؚΊ͍͚ͯͳ͍ϑΝΠϧ͕͋Δ
1. ೝূใ2. ΞʔΩςΫνϟґଘ
ݴΘ͕ͣͳ.envͳͲ
.git͕ةݥͳ߹͋Δpersonal tokenͰͷgit cloneΛ͍ͯ͠ΔͳͲ
package managerʹΑΔ͕ͦͷڥ͚ͷbuildࡁΈόΠφϦ͕͓͍ͯ͋Δ͜ͱ͕(npm)
Ҏ্ͷΛղܾ͢ΔͨΊʹdockerignoreΛ͏
dockerignore
ޙΖʹॻ͍ͯ͋Δpattern͕༏ઌ͞ΕΔઌ಄ʹ!Λ͚ͭΔͱ൱ఆͰ͖Δ
͑Δදهfoo/*foo/**foo/?
෦Ͱਖ਼نදݱʹม͍ͯ͠Δ
ਖ਼نදݱͳΒΘ͔Δͱ͍͏ਓ͚ʹgithub.com/orisano/dire
ରԠ͢Δਖ਼نදݱΛग़ྗ
Ͳ͏࣮ͬͯݱ͍ͯ͠Δ͔
%PDLFS$-* EPDLFSE$ docker build .0. build contextͷҎԼͷϑΝΠϧ͕readՄೳ͔֬ೝ(͜͜dockerignoreΛߟྀ͞ΕΔ)
%PDLFS$-* EPDLFSE$ docker build .0.5. directoryΛtraverse͠ͳ͕ΒdockerignoreʹϚον͠ͳ͍ϑΝΠϧΛtarʹՃ͍ͯ͘͠
༨ஊ
ϑΝΠϧdockerignore͕ίϯύΠϧ͞ΕΔΑ͏ʹͳ͍ͬͯͨ
docker/cli/pull/1577Ͱमਖ਼͞ΕDocker 19.03͔ΒೖΓ·͢
ͪΐͬͱಛघͳྫ
monorepoͰsubsystemؒͷґଘ͕͋Δ߹
େຊΛbuild contextʹ͠ͳ͍ͱ͍͚ͳ͘ͳΔ
build context͕Ͱ͔͘ͳΔ
dockerignoreͰղܾ!͢Δ͜ͱͰ͖ͳ͍
dockerignorebuildຖʹϑΝΠϧΛࢦఆͰ͖ͳ͍
subsystemຖʹdockerignoreΛ࡞ΓbuildͷͨͼʹdockerignoreΛࣗಈੜ͢ΔΞϓϩʔν͕༗ޮ
github.com/orisano/dignore
Α͋͘Δ
gitignoreͱdockerignore͕΄΅ҰॹʹͳΔ
ͦ͏͍͏߹ʹdockerignore͍Βͳ͘ͳΔํ๏͕͋Δ
git archiveͬͯίϚϯυͬͨ͜ͱ͋Γ·͔͢
repositoryΛtarʹͰ͖ΔίϚϯυ
tarʹ͢ΕbuildͰ͖ΔͷͰ
git archive HEAD | docker build -