ã³ã³ããã¹ããã£ã¬ã¯ããªã®_part_ãã³ã³ããã«ã³ããŒããå¿ èŠããããŸãïŒä»ã®éšåã¯å¥ã®COPYã®å¯Ÿè±¡ã«ãªããŸãïŒã æ®å¿µãªãããããã«å¯ŸããçŸåšã®å¯èœæ§ã¯æé©ã§ã¯ãããŸããã
https://docs.docker.com/reference/builder/#dockerignore-fileãåç
§ããŠãã ãã
ãããžã§ã¯ãã®ã«ãŒãã«ãã.dockerignoreãã¡ã€ã«ã«ãšã³ããªãè¿œå ã§ããŸãã
.dockerignoreã¯ãã®åé¡ã解決ããŸããã ç§ãæžããããã«ããä»ã®éšåã¯å¥ã®ã³ããŒã®å¯Ÿè±¡ãšãªããŸããã
ããã§ãä»ã®ã³ããŒã«åºã¥ããŠæ¡ä»¶ä»ãã§ã³ããŒãããã§ããïŒ
ã³ã³ããã¹ãã«ã¯ãå€ãã®ãã£ã¬ã¯ããªA1 ... A10ãšãã£ã¬ã¯ããªBãå«ãŸããŠããŸããA1... A10ã«ã¯1ã€ã®å®å ããããBã«ã¯å¥ã®å®å ããããŸãã
COPY A1 /some/where/A1/
COPY A2 /some/where/A2/
...
COPY A10 /some/where/A10/
COPY B some/where/else/B/
ãããŠãããã¯åä»ã§ãã
ããã®ã©ã®éšåãåä»ã§ããïŒ ãããããã¹ãŠåå¥ã«ãªã¹ãããŸããïŒ
COPY A* /some/where/
COPY B /some/where/else/
ããã¯æ©èœããŸããïŒ
A1..A10ãBãšããååã¯åœç©ã§ããã ããã«ã COPY A* ...
ã¯ããã£ã¬ã¯ããªã®_contents_ããŸãšããŸãã
ç§ãèªããéžæè¢ã¯ããã€ããããŸãããã©ããåä»ã ãšæããŸãã ç§ã¯æåã®æçš¿ã§3ã€èšåããŸããã 4çªç®ã®ãªãã·ã§ã³ã¯ãA1..A10ãæ°ãããã£ã¬ã¯ããªAã«ç§»åãããããã«ããœãŒã¹ã³ãŒããæ°žç¶çã«åé 眮ããããšã§ããè¿œå ã®ãã¹ãã¬ãã«ã¯å¿ èŠãªãããããããå¿ èŠãªãããšãæåŸ ããŠããŸãããçŸåšã®ããŒã«ã§ã¯ããã®æãç§ã®ãããã³ã°ããããããžã§ã¯ããç¹å¥ãªå Žåã
ïŒBTWãïŒ6094ïŒä»¥äžã®ã·ã³ããªãã¯ãªã³ã¯ïŒããã®å Žåã«åœ¹ç«ã¡ãŸããããããæããã«ãããããªãã·ã§ã³ã§ã¯ãããŸãããïŒ
@bronger COPY
ãcp
ãšãŸã£ããåãããã«åäœããå Žåãããã¯ããªãã®ãŠãŒã¹ã±ãŒã¹ã解決ããŸããïŒ
100ïŒ
ç解ã§ãããããããŸããã
ãã¶ã@duglinã¯äžèŠããããšãã§ããŸãã
@bronger @ cpuguy83ãæ£ãã質åããããšæããŸããããcpãã䜿çšããŠããå Žåããããã©ã®ããã«è§£æ±ºããŸããïŒ ç§ã¯ãcpãã®ããçš®ã®é€å€ãªãã·ã§ã³ã調ã¹ãŠæ°ã¥ããªãã£ãã®ã§ããdockerbuildãã®å€ã§ãããã©ã®ããã«è§£æ±ºãããããããŸããã
cpã®æ¯ãèãã§ãç§ã¯èšãããšã«ãã£ãŠç¶æ³ãæ¹åããããšãã§ããŸãã
COPY ["A1", ... "A10", "/some/where/"]
ãA11ããã£ã¬ã¯ããªãè¿œå ããå Žåããã®è¡ãèããå¿ èŠããããããããã¯ãŸã 軜床ã®ã¡ã³ããã³ã¹ã®åé¡ã§ãã ããããããã¯èš±å®¹ã§ããã§ãããã
ããã«ããã¹ãŠãã³ããŒããŠäžèŠãªéšåãåé€ããŠããã³ããŒèªäœä»¥å€ã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ã¯ã»ãšãã©ãªããããcpã¯é€å€ããå¿ èŠã¯ãããŸããã dockerã®COPYã䜿çšãããšãBãå€æŽããããã³ã«ãã£ãã·ã¥ã誀ã£ãŠç¡å¹ã«ãªããç»åã倧ãããªãããšãæå³ããŸãã
@brongerããªããã§ããããšïŒ
COPY a b c d /some/where
ããªããææ¡ããŠããããã«ã
COPY ...
RUN rm ...
ãå®è¡ããå Žåãã¯ããè¿œå ã®ã¬ã€ã€ãŒããããŸãããããã§ããã£ãã·ã¥ã䜿çšã§ããã¯ãã§ãã ãããåå ã§ãã£ãã·ã¥ãã¹ãçºçããå Žåã¯ããç¥ãããã ããããããã¹ãã§ã¯ãªããšæããŸãã
ããã
COPY a b c d /some/where/
ãã£ã¬ã¯ããª/ some / where / {aãbãcãd}ãäœæãã代ããã«ããã£ã¬ã¯ããªabcdã®å 容ãäžç·ã«ã³ããŒããŸãã ããã¯ãsrcãã£ã¬ã¯ããªã«ã¹ã©ãã·ã¥ãè¿œå ãããrsyncã®ããã«æ©èœããŸãã ãããã£ãŠã_four_åœä»€
COPY a /some/where/a/
COPY b /some/where/b/
COPY c /some/where/c/
COPY d /some/where/d/
å¿ èŠã§ãã
ãã£ãã·ã¥ã«é¢ããŠã¯...ç§ãèšããªã
COPY . /some/where/
RUN rm -Rf /some/where/e
eãå€æŽãããå Žåããã£ãã·ã¥ã¯äœ¿çšãããŸããããeã¯æäœã«å¹æçã«å«ãŸããŠããŸããã
@brongerãããæ²ããããšã«ããªãã¯æ£ããã --exclude zzz
ã¿ã€ãã®ãã©ã°ãè¿œå ã§ãããšæããŸããã httpsïŒ //github.com/docker/docker/blob/master/ROADMAP.md#22 -dockerfile-syntaxã«ãããšãå€ãã®ãã©ã°ãååŸã§ããªãå¯èœæ§ããããŸããä»ãã©ã¯ã·ã§ã³ã
ãã£ããã ã 次ã«ãåœé¢ã¯COPY + rmã䜿çšããŠãFixMeã³ã¡ã³ããè¿œå ããŸãã ãæéãããã ãããããšãããããŸãïŒ
ã¡ããã©ïŒ+1ïŒãã®åé¡ã COPYãrsyncã®æ«å°Ÿã®ã¹ã©ãã·ã¥ã»ãã³ãã£ã¯ã¹ãåæ ããŠããªãããšãå®æçã«åŸæããŠããŸãã ããã¯ã1ã€ã®ã¹ããŒãã¡ã³ãã§è€æ°ã®ãã£ã¬ã¯ããªãã³ããŒã§ããªãããšãæå³ããã¬ã€ã€ãŒã®æ¥å¢ã«ã€ãªãããŸãã
1ã€ãé€ããŠå€ãã®ãã£ã¬ã¯ããªãã³ããŒãããå ŽåããããããŸãïŒç°ãªãã¬ã€ã€ãŒç¡å¹åå¹æãæããããã®ã§ãåŸã§ã³ããŒããŸãïŒããã®ããã --exclude
ã圹ç«ã¡ãŸãã
ãŸãã man rsync
ããïŒ
A trailing slash on the source changes this behavior to avoid creating
an additional directory level at the destination. You can think of a
trailing / on a source as meaning "copy the contents of this directory"
as opposed to "copy the directory by name", but in both cases the
attributes of the containing directory are transferred to the containâ
ing directory on the destination. In other words, each of the followâ
ing commands copies the files in the same way, including their setting
of the attributes of /dest/foo:
rsync -av /src/foo /dest
rsync -av /src/foo/ /dest/foo
ããããã®ã¯ã€ã«ããªDockerfile
ãå£ããã«ãä»ã¯å€æŽã§ããªããšæããŸãã
å ·äœçãªäŸãšããŠã次ã®ãããªãã£ã¬ã¯ããªããããšããŸãã
/vendor
/part1
/part2
/part3
/...
/partN
ç§ã¯æ¬¡ã®ãããªãã®ã欲ããã§ãïŒ
COPY /vendor /docker/vendor
RUN /vendor/build
COPY /part1 /part2 ... /partN /docker/ # copy directories part1-N to /docker/part{1..N}/
RUN /docker/build1-N.sh
ãã®ãããpart1-Nã¯/vendor
ã®æ§ç¯ãç¡å¹ã«ããŸããã ïŒ/ vendorã¯part1-Nãšæ¯èŒããŠã»ãšãã©æŽæ°ãããªãããïŒã
ç§ã¯ä»¥åãpart1-Nãç¬èªã®ãã£ã¬ã¯ããªã«é 眮ããããšã§ãããåé¿ããã®ã§ã次ã®ããã«ããŸãã
/vendor
/src/part1-N
ããããç§ã¯ãããžã§ã¯ãã§ãã®åé¡ã«ééããã®ã§ãç°¡åã«åé 眮ããããšã¯ã§ããŸããã
@prallerã®è¯ãäŸã§ããããŸã£ããåãåé¡ã«çŽé¢ããŠããŸãã äž»ãªåé¡ã¯ãGoã®filepath.Matchã§ã¯ãæ£èŠè¡šçŸãšæ¯èŒããŠåµé æ§ãããŸãé«ããªãããšã§ãïŒã€ãŸããã¢ã³ããã¿ãŒã³ããããŸããïŒã
ç§ã¯ã¡ããã©ããã®ããã«ããé ã®æªãåé¿çãæãã€ããã COPYã¯ãã£ã¬ã¯ããªãé€å€ã§ããŸããããADDã¯tgzãå±éã§ããŸãã
ããã¯ãè¿œå ã®ãã«ãã¹ãããã®1ã€ã§ãã
tar --exclude = 'ã/ deferred_copy' -czfall_but_deferred.tgzã
Dockerãã«ã..ã
次ã«ãDockerfileã§ïŒ
ADD ./all_but_deferred.tgz / application_dir /
..ãã£ãã«å€æŽãããªãã¬ã€ã€ãŒã®å
容..
è¿œå ã / application_dir /
..é »ç¹ã«å€åããã¬ã€ã€ãŒã®å
容
ããã«ãããå å«/é€å€ããããšããç¡é§ãªã¬ã€ã€ãŒã®å¡ãªãã§ãå å«/é€å€/äœã§ãããããã®tarã®å®å šãªæ§æãåŸãããŸãã
@ jason-kaneå
±æããŠãããŠããããšããããã¯ããããªãã¯ã§ãã å°ããªãã€ã³ãã1ã€ãããŸãz
ïŒgzipïŒãã©ã°ãtar
ã«è¿œå ã§ããªãããã§ããããã«ãããsha256ãã§ãã¯ãµã å€ãå€æŽãããDockerãã£ãã·ã¥ãç¡å¹ã«ãªããŸãã ããã§ãªããã°ããã®ã¢ãããŒãã¯ç§ã«ãšã£ãŠçŽ æŽãããåããããŸãã
ãã®åé¡ã®+1ã¯ãå€ãã®globã©ã€ãã©ãªããµããŒãããŠããã®ãšåãæ¹æ³ã§ãµããŒãã§ãããšæããŸãã
node_modules
以å€ã®ãã¹ãŠãã³ããŒããææ¡ããããŸã
COPY . /app -node_modules/
ç§ãåãåé¡ã«ééããŸããJavaWebã¢ããªãçŽ900MBã®å Žåãããã¯ç§ã«ãšã£ãŠã¡ãã£ãšèŠçã§ããããã®ã»ãŒ80ïŒ
ã¯ãã£ãã«å€æŽãããŸããã
ããã¯ç§ã®ã¢ããªã±ãŒã·ã§ã³ã®åæã®ç¶æ
ã§ããããã©ã«ãæ§é ã¯ããçšåºŠå®å®ããŠããã®ã§ããã£ãã·ã¥ã䜿çšã§ããããã«6ã7 COPYã¬ã€ã€ãŒãè¿œå ããŠãããŸããŸãããããã¡ã€ã«ããã£ã¬ã¯ããªãå¢ãããšãé·æçã«ã¯ç¢ºå®ã«åé¡ã«ãªããŸããè¿œå ãããŸã
ð
docker cp
ã§ãåãåé¡ãçºçããŸããã1ã€ãé€ããã¹ãŠã®ãã¡ã€ã«ããã©ã«ããŒããã³ããŒããã
ããã§ãŸã£ããåãåé¡ã gitãªããžããªãã³ããŒããŠ.gitãã£ã¬ã¯ããªãé€å€ãããã
@oaxlinã«ã¯ã.dockerignoreãã¡ã€ã«ã䜿çšã§ããŸãã
@antoinecoããã§ããŸããããšæããŸããïŒ è©ŠããŠãããã°ããçµã¡ãŸããããå°ãªããšããã®æç¹ã§ã¯ã .dockerignore
ã¯docker cp
ã§ã¯æ©èœããªãã£ããšç¢ºä¿¡ããŠããŸãã
@ kkozmic-絶察ã«ç¢ºèªããŠãã ãã:)ããããããªããèšåããdocker cp
CLIãµãã³ãã³ãã¯ããã®åé¡ã®ç¯å²ã§ããDockerfileã«ããCOPY
ã¹ããŒãã¡ã³ããšã¯ç°ãªããŸãã
docker cp
ã¯ãå®éã«ã¯Dockerfileããšã¯äœã®é¢ä¿ããããŸããã dockerignoreã§ãããäžæ¹ã§ãã€ã¡ãŒãžã®æ§ç¯ã«ã¯äœ¿çšãããŸããã
ãããæ¬åœã«æ¬²ããã§ã-ãã«ããã¹ããŒãã¢ããããããã«ããã«ãã®åã®éšåã«ãããã©ã«ããŒãã³ããŒããŠããã£ãã·ã¥ã圹ç«ã€ã§ããã...
ãŠãŒã¹ã±ãŒã¹ãäœã§ãããã¯ããããŸããããCOPYãåé¡ã解決ããåã«ãé€å€ãããã¡ã€ã«ã«è§Šããã ãã§ã¯ãããŸãããïŒ
RUN touch /app/node_modules
COPY . /app
RUN rm /app/node_modules
AFAIK COPY
ã¯ãã¡ã€ã«ãäžæžãããªãã®ã§ãããã§ããŸããããšæããŸãã
ãã£ãšãæ°ã«ããªãã§ãã ããã COPY
ã¯å®éã«ãã¡ã€ã«ãäžæžãããŠããããã«èŠããŸãã npmãã€ã³ã¹ããŒã«ããŠCOPY . /usr/src/app
ãå®è¡ããhttps://nodejs.org/en/docs/guides/nodejs-docker-webapp/ã«å°ãæžæã£ãŠããŸãã node_modules
ã¯dockerãç¡èŠããããšæ³å®ããŠãããšæããŸããïŒ äžæ¹ã COPY_NO_OVERWRITE
ïŒããé©åãªååãå¿
èŠïŒã³ãã³ãã䜿çšããããšã¯ãã³ããŒäžã«ãã¡ã€ã«ãç¡èŠãã1ã€ã®æ¹æ³ã§ãïŒç¡èŠããããã®ã®ããã«ç©ºã®ãã¡ã€ã«/ãã£ã¬ã¯ããªãäœæããå¿
èŠããããŸãïŒã
FWIWãããã¯ãšãŠãéãã§ãã
ç§ã¯å¥ã®ããã¯ãœãªã¥ãŒã·ã§ã³ãèŠã€ããŸããïŒ
ãããžã§ã¯ãæ§é ã®äŸïŒ
ã¢ããª/
config /
èæ¬/
ã¹ããã¯/
éç/
..ã
ç§ãã¡ã欲ããïŒ
ããã¯ãœãªã¥ãŒã·ã§ã³ïŒ
ADD ./static /home/app
ADD ["./[^s^a]*", "./s[^t]*", "/home/app/"]
ADD ./app /home/app
2çªç®ã®ADDã¯ããã/st ããšã./aããé€ããã¹ãŠãã³ããŒããããšãšåçã§ãã
æ¹åã®ããã®ã¢ã€ãã¢ã¯ãããŸããïŒ
ã³ã¡ã³ãã®ã¹ããŒã¿ã¹ã¯ã©ãã§ããïŒ
ð
ð
ð
ð
.gitignoreãšåãæ¹æ³ã§.dockerignoreãã¡ã€ã«ãäœæããã®ã¯ã©ãã§ããïŒ
@mirestrepoãã®åé¡ã®æåã®2ã€ã®ãã©ããŒã¢ãããåç §ããŠãã ããã
çŸåšãããã¯CïŒ/ dotnetéçºçšã®ã¡ã¬ããã©ãŒãã³ã¹ã§ãã
ç§ã欲ãããã®ïŒ
ãé€ããŠãã¹ãŠãã³ããŒããããšã¯ã§ããªãã®ã§ãããã¯ïŒç°¡åã«ïŒäžå¯èœã®ããã§ãã
ãããã£ãŠãdllãäºéã«ã³ããŒãããŠDockerãã¡ã€ã«ã®ãµã€ãºã倧ãããªããããã¹ãŠã1ã€ã®ã¬ã€ã€ãŒã«ã³ããŒãããŸãã
å€éšdllã¯ãã£ãã·ã¥ãããã®ã§ã¯ãªãæ¯åã³ããŒããããããåŸè
ã¯ã¡ã¬ããŒãã«ãªããŸãã
@adresdvilasolutoinã«æè¬ããŸãç§ã¯ãããåå²ããããšãã§ããŸããïŒ
COPY ["[^M][^y]*","/app/"]
COPY ./My* /app/
ããã§ããæåã®ã³ãã³ãã§.jsonãã¡ã€ã«ãã³ããŒããããšããåé¡ãæ®ããŸãã
@antoinecoã®ãããã§ãç§ã®åé¡ã¯è§£æ±ºããŸããã .gitãã£ã¬ã¯ããªãDockerã€ã¡ãŒãžã«ã³ããŒããªããªããŸããã
ããã«ãããç»åãµã€ãºãåçã«æ¹åãããDockerãã£ãã·ã³ã°ã·ã¹ãã ã«å¯ŸããŠç»åãã¯ããã«äœ¿ãããããªããŸããã
ç§ãåãåé¡ãæ±ããŠãã æ®ãã®ãã¡ã€ã«ã®åã«ã³ããŒããã倧ããªãã¡ã€ã«ãããã®ã§ãã³ããŒã«æéãããããããã³ã³ããã¹ããå€æŽããŠãç¹°ãè¿ãããŸããïŒ7 GBã®binãã¡ã€ã«ïŒã æ°ããåé¿çã¯ãããŸããïŒ
COPYããã³ãã«ãŒãã³ã°ã¢ãããŒãã®åé¡ã¯ããã«ãŒãã³ã°åã®ã¬ã€ã€ãŒãåŒãç¶ããã¹ãŠã®ããŒã¿ãä¿æããŠããããšã§ãã
COPY . --exclude=a --exclude=b
ã¯éåžžã«äŸ¿å©ã§ãã @ cpuguy83ãã©ãæããŸããïŒ
@Nowakerç§ã¯ããã奜ãã§ãã ãšã«ããtar
ãšrsync
ãšäžèŽããŠããããã§ãã
ããã¯dockerignoreãšåããã©ãŒãããããµããŒãããã¯ãã ãšæããŸããïŒ
@tonistiigi @dnephin
ãã®ã±ãŒã¹ã¯ïŒ32507ã§åŠçããããšæããŸãã
@ cpuguy83ããã æã泚ç®ãã¹ãã¯ã COPY --chown=uid:gid
ã«æ²¿ã£ããã®ã§ã
@dnephin RUN --mount
ã¯ãåºåãçæãããåŸã«äžèŠãªããŒã¿ã«åºã¥ããŠäœããçæããããšãäžå¿ãšããããŸã£ããç°ãªããŠãŒã¹ã±ãŒã¹ã®ããã«èãããŸãã ïŒããšãã°ãGoã§ã³ã³ãã€ã«ããããMarkdownãã¡ã€ã«ããHTMLãçæãããããŸãïŒã RUN --mount
ã¯ããŒãã§ãããçŸåšåãçµãã§ãããããžã§ã¯ãïŒSphinxã䜿çšããŠAPIããã¥ã¡ã³ããçæããïŒã§ééããªã䜿çšããŸãã
COPY somedir --exclude=excludeddir1 --exclude=excludeddir2
ã¯ãæçµçã«ã€ã¡ãŒãžã«å«ãŸããå¿
èŠããããã1ã€ã ãã§ãªãè€æ°ã®COPYã¹ããŒãã¡ã³ãã«é£ã³æ£ãããŒã¿ã®ã³ããŒãäžå¿ãšããŠããŸãã ç®æšã¯ããããžã§ã¯ãã®ã«ãŒãã«å€æ°ã®ãã£ã¬ã¯ããªããããå€æŽ/å¢å ããå¯èœæ§ãããå Žåã«ãæ瀺çãªCOPY first second third .... eleventh destination/
ãåé¿ããããšã§ãã
ç§ã®å ŽåããœãŒã¹ãã¡ã€ã«ãå€æŽãããŠããªãå Žåã«ãã£ãã·ã¥ã䜿çšãããããšã確èªããããã«ãæåã«å¿ é ã§ã¯ãªããã¡ã€ã«ãé€ããŠãã»ãšãã©ã®ãã¡ã€ã«ãã³ããŒããããšæããŸãã 次ã«ãã³ã³ãã€ã«/çæããŸã-ã³ããŒããããã¡ã€ã«ãå€æŽãããŠããªãå Žåã¯ãã£ãã·ã¥ã䜿çšããŸãïŒã€ã§ãŒã€ïŒã æåã«ã以åã«é€å€ãããã¡ã€ã«ãã³ããŒããŸããããã¯ãååã®ãã«ã以éã«å€æŽãããå¯èœæ§ããããŸããããããã®å€æŽã¯ã³ã³ãã€ã«/çæã«ã¯åœ±é¿ããŸããã æããã«ãç§ã¯ã«ããããã®ãã¡ã€ã«ãšãã£ã¬ã¯ããªãæã£ãŠããŸãã æåã«ã³ããŒãããã®ã§ãããæåŸã«ã³ããŒãããã®ã¯ã«ããã«ã ãã§ãã
ã¢ã€ãã¢ã¯ã RUN --mount
ãå€ãã®åé¡ã解決ã§ãããšããããšã§ãã COPY --exclude
ã¯ã1ã€ã®åé¡ã®ã¿ã解決ããŸãã
åã
ã®åé¡ã解決ããããã«ããããã®æ§æãè¿œå ããããããå€ãã®åé¡ã解決ãããã®ãè¿œå ããããšæããŸãã RUN --mount... rsync --exclude ...
ïŒãŸãã¯åã
ã®ãã®ãã³ããŒããã¹ã¯ãªããïŒã䜿çšãããšã COPY --exclude
ãšåçã«ãªããŸãã
@dnephinãããç§ã¯RUN --mount rsync
ãèããŠããŸããã§ããïŒ åªããïŒ ð
ããã¯ç¢ºãã«çŽ æŽãããã§ãã ãã ããrsyncããããã®ã ãã§ãªããããŠã³ãããããã£ã¬ã¯ããªã§äœããå€æŽããããšãã£ãã·ã¥ãç¡å¹ã«ãªãããã @ Nowakerã§ãã£ãã·ã¥ãå¹ççã«æŽ»çšããããšã¯ã§ããŸããã
ãã®rsyncã®åºåãä»ã®äœãã®å
¥åãšããŠäœ¿çšããããã§å®éã«å€æŽããããã¡ã€ã«ããªãå Žåããã£ãã·ã¥ã¯åã³ååŸãããŸãã ããªããæ¬åœã«ãããæãã§ãããªããããªãã¯çŸåšhttps://gist.github.com/tonistiigi/38ead7a4ed60565996d207a7d589d9c4#file-gistfile1-txt-L130-L140ã®ãããªãã®ã§ãããè¡ãããšãã§ããŸãã RUN --mount
ïŒãŸãã¯ãã«ããããã®LLBïŒã§ã®å¯äžã®å€æŽç¹ã¯ãã¹ããŒãžéã§å®éã«ãã¡ã€ã«ãã³ããŒããå¿
èŠã¯ãªããçŽæ¥ã¢ã¯ã»ã¹ã§ãããããã¯ããã«é«éã§ãã
FROM php:7.2-apache as source
COPY ./src/ /var/www/html/
RUN rm -rf /var/www/html/vendor/
RUN rm -rf /var/www/html/tests/
FROM php:7.2-apache
COPY --from=source /var/www/html/ /var/www/html/
@antoinecoãŠã§ã«ãããããªãããçŽ æŽããããã®ã§ã¯ãããŸããã ãææããã ãããããšãããããŸãã
@MartijnHolsããã¯è¯ãåé¿çã§ãã æçš¿ããŠããã ãããããšãããããŸãã
ã¡ã³ããã«ãšã£ãŠïŒããã¯èšã£ãŠãããCOPYã«--chownãå®è£
ããçç±ããã«ãã¹ããŒãžãã«ãã§RUNchownã䜿çšã§ããããšèšããŸãã æ£æ°ã®ããã«--exclude
ãå¿
èŠã§ãã æè¿ã®Dockerfilesã«ã¯ããŸãã«ãå€ãã®åé¿çããããŸãã
COPY --exclude
ã®æ©æµãåãããŠãŒã¹ã±ãŒã¹ããããŸãã ã³ã³ããå
šäœã«ã³ããŒããå¿
èŠãããããã°ããŒã¿ãã©ã«ãããããŸãã ãã®ãã£ã¬ã¯ããªã®å
容ã¯é »ç¹ã«å€æŽãããå¯èœæ§ããããŸãã ãã£ãã·ã¥ã®ããã©ãŒãã³ã¹ãåäžãããããã«ããã£ã¬ã¯ããªã«1ã€ã®å€§ããªãã¡ã€ã«ããããæ®ããã³ããŒããåã«ãããèªäœã®ã¬ã€ã€ãŒã«ã³ããŒããŸãã çŸåšã®ãšããããã®ã¿ã€ãã®ã³ã³ããã説æããã®ã¯äžå¿
èŠã«åé·ã§ãã
Requirements.txtãäžå¿ãšããã¬ã€ã€ãŒããã£ãã·ã³ã°ã䜿çšããæ£ããæ¹æ³ã¯äœã§ãã
ç§ã¯ãããæã£ãŠããŸãïŒ
/root-app
- /Dockerfile
- /requirements.txt
- /LICENSE
- /helloworld.py
- /app-1
-/app-1/script1
-/app-1/script2
-/app-1/script3
- /app-2
-/app-2/script1
ãããŠDockerfileïŒ
FROM python:slim
COPY ./requirements.txt /
RUN pip install --trusted-host pypi.python.org -r /requirements.txt
WORKDIR /root-app
COPY . /helloworld
CMD ["python", "helloworld.py"]
2çªç®ã®COPYã³ãã³ãã䜿çšããŠèŠä»¶ãã«ããã£ãã·ã¥ãé€å€ããæ£ããæ¹æ³ã¯äœã§ãã...åæ§ã«ãapp-1ãšapp-2ãããŸãå€æŽãããªãå Žåã¯ãããããã¬ã€ã€ãŒåããŸããïŒ
@axehayzãããããªããæ±ããŠãããã®ãã©ããã¯ããããŸãããã httpsïŒ //medium.com/@guillaumejacquart/node-js-docker-workflow-12febcc0eed8ã®ããŒãã¯ãŒã¯ãããŒãšåæ§ã®ããšãè¡ããŸãã
ã€ãŸãã2çªç®ã®ã³ããŒãCOPY .
ãã£ãŠãåé¡ãããŸããã pip install
ãåã«ããéããã€ã³ã¹ããŒã«ãããããã±ãŒãžã®ãã£ãã·ã¥ãç¡å¹ã«ãªãããšã¯ãããŸããã
åãåé¡ã«çŽé¢ããŸããã çŸæç¹ã§ã¯ãå¥ã®ãã£ã¬ã¯ããªã«ãããã¡ã€ã«ãå±éããããšæããŸãã
COPY --exclude = ... --exclude = ..ã®å¥ã®ã±ãŒã¹ããããŸãã
ç»åãµã€ãºãçž®å°ããããã«COPY--from = oldimageãå®è¡ããããšããŠããŸããã»ãšãã©ã®ãã¡ã€ã«ãã³ããŒããå¿ èŠããããŸãããäžéšã®ãã¡ã€ã«ã¯ã³ããŒããŸããã ãã£ã¬ã¯ããªããšã«å®è¡ã§ããŸãããããã¯é¢åã§ãããæ©èœããŸã...ããããdirs /ãã¡ã€ã«ã®ãªã¹ããé€å€ããããè€æ°ã®é€å€ãªãã·ã§ã³ãæå®ã§ãããšãéåžžã«åªããŠãããä¿å®ã容æã«ãªããŸãã
ããã§ã3幎ååŸããŸã£ããæ¿èªããããŸãããïŒ
@asimonfãŠãŒã¹ã±ãŒã¹ãç解ããããã«ãããããã®è¬èŸããããŸãã 誰ããã®ä»äºãããŠããªããšããããšã§ããïŒ ããã¯æ£ããã§ãã ç§ãã¡ã¯çãèªåãã¡ãåãçµãããšã«ã€ããŠéžæãããªããã°ãªããŸããã
æ£çŽãªãšãããããã¯ãDockerfileã«å°ãäœåã«æžã蟌ãå¿ èŠãããå Žåã§ããæ¢åã®æ©èœã䜿çšããŠéåžžã«ç°¡åã«å®è¡ã§ããŸãã
# haven't tested exact syntax, but this is the general idea
FROM myRsync AS files
COPY . /foo
RUN mkdir /result && rsync -r --exclude=<pattern> /foo/ /result/
FROM scratch
COPY --from=files /result/* /
buildkitã䜿çšãããšãè¿œå ã®ã¹ããŒãžãå¿ èŠãããŸãã
#syntax=docker/dockerfile:experimental
..
RUN --mount=target=/ctx rsync ... /ctx/ /src/
ãã«ãã¹ããŒãžãã«ãã䜿çšããŠäœãã足ããªãå Žåãé€ããŠãããã§ã®è§£æ±ºçãšã¯æããŸããã ãã£ãã·ã¥ã¯ãCOPY段éã§ã¯ãŸã ç¡å¹ã«ãªã£ãŠããŸãã
ãã«ãã¹ããŒãžãã«ãã䜿çšããŠäœãã足ããªãå Žåãé€ããŠãããã§ã®è§£æ±ºçãšã¯æããŸããã ãã£ãã·ã¥ã¯ãCOPY段éã§ã¯ãŸã ç¡å¹ã«ãªã£ãŠããŸãã
ããã¯æ£ããã§ãã ããã¯ç§ãä»æ±ããŠããåé¡ã§ãã
ãã«ãã¹ããŒãžã¯ç§ã«ãšã£ãŠçŽ æŽãããåããããŸãã
ãã£ãã·ã¥ãå®å šã«æŽ»çšããããã«ããã«ãããã«ãã¹ããŒãžã«åå²ããŠããŸãã次ã®ããã«ãªããŸãã
FROM alpine as source
WORKDIR /app
COPY . ./
RUN scripts/stagify-files
FROM node:12.4.0
WORKDIR /app
# Step 0: Setup environments
COPY --from=source /app/stage0 ./
RUN stage0-build.sh
# Step 1: Install npm packages
COPY --from=source /app/stage1 ./
RUN stage1-build.sh
# Step 2: Build project
COPY --from=source /app/stage2 ./
RUN stage2-build.sh
@zenozenã®ããã»ã¹ã§ã®èª²é¡ã¯ãDockerãã«ãå°çšã«ã¢ããªã±ãŒã·ã§ã³ã¬ã€ã¢ãŠãã調æŽããå¿
èŠãããããšã§ããããã¯ãå€ãã®äººããããããªãããšã§ãã
Dockerã®äœ¿çšã¯ãã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã«ã®ã¬ã€ã¢ãŠãæ¹æ³ïŒä¿å®æ§ãæ°å
¥ç€Ÿå¡ã®äœ¿ããããããããžã§ã¯ãéã®æšæºããã¬ãŒã ã¯ãŒã¯èŠä»¶ãªã©ïŒãç解ããéã«ãã©ã³ã¹ãåãããã®å€ãã®èæ
®äºé
ã®1ã€ã§ãã
@cfletcherç§ã¯ããªããäœãæå³ããã®ãå®å šã«ç解ã§ãããã©ããããããŸããã
äžèšã®å€æŽã§ã¯ãå®éã«Dockerfileããµããµããã£ã¬ã¯ããªã«ç§»åããŸããïŒrsyncã䜿çšããŠãããã®ãã¡ã€ã«ãåæ»ãããããšãããšå€ãã®åé¡ãçºçããŸããïŒãã€ãŸããDockerfileãé衚瀺ã«ããããšããŠããŸããã
ç§ãææ¡ããã¢ãããŒãã¯ãç§ãæ³åããããã«äžè¬çã§ãã ãããžã§ã¯ãã«100åã®ãã¡ã€ã«ããããšããŸãã ãã®ãã¡ã®1ã€ãéžæããŠstage0ãäœæãã次ã«1 + 10ãéžæããŠã¹ããŒãž1ãäœæãã次ã«100ããã¹ãŠéžæããŠã¹ããŒãž2ãäœæããŸããåã¹ããŒãžã¯åã®ã¹ããŒãžã®äžã«ã¹ã¿ãã¯ãããç°ãªããã«ãã³ãã³ãããããŸãã è€éãªãããžã§ã¯ãæ§é ã®å Žåãããã¯åã«stagify-filesããžãã¯ãè€éã«ãªãããšãæå³ããŸãã
ç§ã«ãšã£ãŠæ倧ã®çç±ã¯ãã³ãŒããã¢ãžã¥ãŒã«ã«åå²ãã npm install
ãå®è¡ããåã«ãã¹ãŠã®package.json
ãã¡ã€ã«ãã³ããŒããå¿
èŠãããããšã§ãã
ãŸããã³ããŒã®ããã®ããçš®ã®é€å€åŒæ°ãå¿ èŠã§ãã ã«ãŒããã£ã¬ã¯ããªã«ã¯20以äžã®ãã¡ã€ã«ãš10以äžã®ãã£ã¬ã¯ããªããããŸãã 2ã€ã®ãã£ã¬ã¯ããªãšããã€ãã®ãã¡ã€ã«ã倧éã«ã³ãŒãã£ã³ã°ããŸãã ãããã2ã€ã®COPYã¬ã€ã€ãŒã«åå²ããããšæããŸãã 1ã€ã¯ãç§ãã¡ã決ããŠè§Šããªãéçãã¡ã€ã«ãšãã£ã¬ã¯ããªçšã§ããããã1ã€ã¯ãç§ãã¡ãåžžã«è§Šãããã¡ã€ã«ãšãã£ã¬ã¯ããªçšã§ãã
éåžžã«æ²ããããšã«ãããã¯ãŸã ç¡èŠãããŠããŸãã ããã«ããããã£ãã·ã¥ãç¡å¹ã«ããªãããã«1ã€ã®ãã£ã¬ã¯ããªãé€å€ã§ããã°ããã«ãããšã«5åç¯çŽã§ããã¯ãã§ãã
buildkitã䜿çšãããšããã£ãã·ã¥ã¯pre-buildkitã®ããã«èŠªã€ã¡ãŒãžã«äŸåããŸããã
ãããã£ãŠãåè¿°ã®rsyncãœãªã¥ãŒã·ã§ã³ã§ã¯ãå€æŽããããã³ã«åæããå¿
èŠããããšããç¹ã§ãããããŸãããåŸç¶ã®ã¹ããŒãžã¯ã³ã³ãã³ãã«åºã¥ããŠãã£ãã·ã¥ããã転éãããå
容ãå€æŽãããªãå Žåã¯ãã£ãã·ã¥ãããŸãã ..å°ãªããšãç§ã®å®å
šãªãªã³ã¶ã¹ãããçè«ã§ã¯ããããã®ã¹ããŒãžã¯ãã£ãã·ã¥ã䜿çšããå¿
èŠããããŸãã
åçŽãª--exclude
ãã©ã°ãCOPY
ã«è¿œå ããã®ã¯ããšãŠãé£ãã販売ã§ãã ããã¯TOP30ã§æãæ¯æãããŠãããã±ããã§ãããä»ã®TOP30ãã±ãããšæ¯èŒããŠå®è£
ã«é¢ããŠã¯æ¯èŒçç°¡åã§ãã :(
ç©è°ãéžããã®ã§ã¯ãªããäœæ¥ãå¿ èŠã§ãã
@ cpuguy83ã€ã§ãŒã€ã ããã¯ç©è°ãéžã/ããæåŠãããããã«èŠããŸããã å質åºæºã«åæ Œããã°ã COPY --exclude
ã®é©åãªPRãåãå
¥ããããå¯èœæ§ãé«ããšããããšã§ããïŒ
ãã¹ãŠã®ã¡ã³ããã«ã€ããŠè©±ãããšã¯ã§ããŸãããããããšIIRCã«ã€ããŠããããdockerignoreãæ§æãªã©ã«ã©ã®ããã«é¢ä¿ãããã«ã€ããŠã1ãæã»ã©åã«@tonistiigiã«è©±ããŸããïŒãããŠãdockerignoreãæ§æçã«äžååã§ãããšããäºå®ïŒã
å€æŽã¯ãã«ããããã«å ¥ããå¿ èŠããããŸãã
COPY --exclude=... --exclude=...
è³æ-ã¢ããªã¹ãªããžããªã®å Žåãå¿
èŠ
è³æïŒ COPY !(excludedfile) .
ã§è©ŠããŠã¿ãŸããããããã¯Bashã§åäœããã¯ãã§ãããDockerã§ã¯åäœããŸãã
$ïŒ$ Dockerfile
$ïŒ$å
ã®ãã¹ãŠã®COPY
ã¹ããŒãã¡ã³ãã«å¯ŸããŠ.dockerignore
ãã¡ã€ã«å
ã®ãã¹ãŠãç¹°ãè¿ããªããã°ãªããªããšããææ¡ã¯å¥œãã§ã¯ãããŸããã ç»åã®äžéšã«ãªããåªå
ãããã¹ãã§ã¯ãªããã®ã§DRYãç¶æã§ããããšãimhoã
ïŒ33923ãèŠããšããã«ãã³ã³ããã¹ãããé€å€ããããã®ãã COPY
ã¹ããŒãã¡ã³ãããé€å€ããããã®ãšãŸã£ããåãã§ããã®ã¯å¶ç¶ã§ã¯ãªããšæããŸãã ç§ã¯ãã®ãããªãã®ãè¯ã解決çã«ãªããšä¿¡ããŠããŸãïŒ
COPY --use-dockerignore <source> <target>
ãŸãã¯ããããã次ã®ãããªãã®ã§ãã
COPY --use-ignorefile=".gitignore" <source> <target>
.dockerignore
ãéåžž.gitignore
ã®90ïŒ
ã®è€è£œã§ããããšã«æ°ä»ããšãç¡èŠããããã¹ãŠã®ãã¡ã€ã«ãšãã©ã«ããŒãCOPY
ã¹ããŒãã¡ã³ãããšã«ããäžåºŠç¹°ãè¿ãå¿
èŠãããã®ã¯éåžžã«é¢åã§ãã ããè¯ãæ¹æ³ãå¿
èŠã§ãã
@ asbjornu.gitignoreãš.dockerignoreã¯ãŸã£ããåããã®ã§ã¯ãããŸããã ç¹ã«ãã¢ãŒãã£ãã¡ã¯ãããã«ãã¹ããŒãžã§çæãããgitã«ãŸã£ããååšããªããã«ãã¹ããŒãžãã«ãã®å Žåã§ããçµæã®ã€ã¡ãŒãžã«å«ããå¿
èŠããããŸãã
ãããŠãã¯ããå°å
¥ããããã«ãã¹ããŒãžãã«ãã§ã¯ãã¹ããŒãžããšã«ç°ãªã.dockerignoreãã¡ã€ã«ã䜿çšããæ©èœãå¿
èŠã§ã-絶察ã«ã
ãdockerbuildãã®å€ã§ã³ããŒãããããšããããããŸãã ãã®ãããªå Žåã.dockerignoreã¯äœãããŸããã å¯äžã®è³¢æãªè§£æ±ºçã§ãããdockercpãã®ä¿®æ£ãå¿ èŠã§ã
ãã®å·ãçºè¡ãããŠãã5幎ã«ãªããŸãã 2020幎9æãç§ã¯ãŸã ããã欲ããã§ãã å€ãã®äººãåé¿çãšããŠããã¯ãææ¡ããŠããŸãããã»ãšãã©ãã¹ãŠã®äººãšä»ã®äººãäœããã®åœ¢ã§exclude
ãã©ã°ãèŠæ±ããŠããŸãã ãã®åé¡ããã°ããã®éæªè§£æ±ºã®ãŸãŸã«ããªãã§ãã ããã
äœããå¿ èŠãªå Žåã¯ãããã«åãçµãããããã«åãçµã誰ããèŠã€ããå¿ èŠããããŸãã
äœããå¿ èŠãªå Žåã¯ãããã«åãçµãããããã«åãçµã誰ããèŠã€ããå¿ èŠããããŸãã
ãŸããã¢ããã¹ããªãŒã ããããæãã§ãããã©ãããç¥ãå¿ èŠããããŸãã
ãœãŒã¹ã³ãŒãã®ã¬ãã¥ãŒåŸããŸãããhttps://github.com/tonistiigi/fsutil/blob/master/copy/copy.goã§ã³ããŒæ©èœãæ¡åŒµããå¿
èŠããããšæããŸãã ãã®åŸãlibsolverã§backend.goãæ¡åŒµã§ããŸãããã®åŸãASTãšbuildkitã®ããã³ããšã³ããæ¡åŒµã§ããããã«ãªããŸãã
ããããã®åŸãã³ããŒã¯unixcpãããrsyncã»ãã³ãã£ãã¯ã«è¿ããªããŸãã
æŽæ°ïŒã¯ããcopy.goãæ¡åŒµããåŸããã¹ãŠãhttps://github.com/moby/buildkit/pull/1492ã«è¿ããªããé€å€ã®ãªã¹ãã解æãããŸãã
æãåèã«ãªãã³ã¡ã³ã
ãã®åé¡ã®+1ã¯ãå€ãã®globã©ã€ãã©ãªããµããŒãããŠããã®ãšåãæ¹æ³ã§ãµããŒãã§ãããšæããŸãã
node_modules
以å€ã®ãã¹ãŠãã³ããŒããææ¡ããããŸã