Moby: рдмрд╛рд╣рд░ рд░рдЦреА рдЧрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХреЙрдкреА рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдЕрдЧре░ 2015  ┬╖  82рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: moby/moby

рдореБрдЭреЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕рдВрджрд░реНрдн рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ _part_ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рджреВрд╕рд░рд╛ рднрд╛рдЧ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рдЕрдзреАрди рд╣реИ)ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдЙрдк-рдЗрд╖реНрдЯрддрдо рд╣реИрдВ:

  1. рдХреЙрдкреА рдФрд░ рдЫрд╛рдБрдЯреЗрдВред рдореИрдВ рдЕрд╕реАрдорд┐рдд рдХреЙрдкреА рдХреЗ рдмрд╛рдж рдЕрд╡рд╛рдВрдЫрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╣рдЯрд╛ рд╕рдХрддрд╛ рдерд╛ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрд╡рд╛рдВрдЫрд┐рдд рд╕рд╛рдордЧреНрд░реА рдмрджрд▓ рдЧрдИ рд╣реЛ, рдЗрд╕рд▓рд┐рдП рдХреИрд╢ рдЕрдорд╛рдиреНрдп рд╣реЛ рдЧрдпрд╛ рд╣реИред
  2. рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ COPY рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рдпрд╣ рдЫрд╡рд┐ рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкрд░рддреЛрдВ рдХрд╛ _lot_ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
  3. "рдбреЙрдХрд░ рдмрд┐рд▓реНрдб" рдХреЙрд▓ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рд░реИрдкрд░ рд▓рд┐рдЦрдирд╛ рдЬреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрджрд░реНрдн рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдЖрд░рд╛рдо рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛ рд╕рдХреЗред рдмреЛрдЭрд┐рд▓ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ред
arebuilder kinenhancement kinfeature

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП +1, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рд╕рдорд░реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧреНрд▓реЛрдм рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ:

node_modules рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рдХреЙрдкреА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

COPY . /app -node_modules/

рд╕рднреА 82 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рджреЗрдЦреЗрдВ https://docs.docker.com/reference/builder/#dockerignore -file
рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ .dockerignore рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

.dockerignore рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛, "рджреВрд╕рд░рд╛ рднрд╛рдЧ рдПрдХ рдФрд░ рдХреЙрдкреА рдХреЗ рдЕрдзреАрди рд╣реИ"ред

рддреЛ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╢рд░реНрдд рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрд╣реБрдд рд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ A1...A10 рдФрд░ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ B. A1...A10 рдХрд╛ рдПрдХ рдЧрдВрддрд╡реНрдп рд╣реИ, 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_ рдХреЛ рдПрдХ рд╕рд╛рде рдлреЗрдВрдХрддрд╛ рд╣реИред

рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рднреА рдЕрдЬреАрдм рд╣реИрдВред рдореИрдВрдиреЗ рдЕрдкрдиреА рдореВрд▓ рдкреЛрд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рддреАрди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред рдЪреМрдерд╛ рд╡рд┐рдХрд▓реНрдк рдореЗрд░реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ A1..A10 рдХреЛ рдПрдХ рдирдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ A рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдиреЗрд╕реНрдЯрд┐рдВрдЧ рд╕реНрддрд░ рдХреА рдЗрдЪреНрдЫрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореЗрд░реЗ рд╡рд░реНрддрдорд╛рди рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╕реНрдкреЗрд╢рд▓-рдХреЗрд╕ рдореЗрд░реА рдбреЙрдХрд░рд╛рдЗрдЬреНрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рддрдмред

(BTW, #6094 (рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдореНрд▓рд┐рдВрдХ) рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рднреА рдирд╣реАрдВ рд╣реИред)

@bronger рдЕрдЧрд░ COPY рдмрд┐рд▓реНрдХреБрд▓ cp рдЬреИрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛?

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ 100% рд╕рдордЭрддрд╛ рд╣реВрдВред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ @duglin рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХреЗред

@bronger рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @ cpuguy83 рдиреЗ рд╕рд╣реА рдкреНрд░рд╢реНрди рдкреВрдЫрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк 'cp' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ? рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдФрд░ 'рд╕реАрдкреА' рдкрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╣рд┐рд╖реНрдХрд░рдг рд╡рд┐рдХрд▓реНрдк рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ 'рдбреЙрдХрд░ рдмрд┐рд▓реНрдб' рдХреЗ рдмрд╛рд╣рд░ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВрдЧреЗред

рд╕реАрдкреА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде, рдореИрдВ рдпрд╣ рдХрд╣рдХрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реБрдзрд╛рд░ рд╕рдХрддрд╛ рдерд╛

COPY ["A1", ... "A10", "/some/where/"]

рдпрд╣ рдЕрднреА рднреА рдПрдХ рдорд╛рдореВрд▓реА рд░рдЦрд░рдЦрд╛рд╡ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдореИрдВ "рдП 11" рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдЙрд╕ рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реАрдкреА рдХреЛ рдмрд╣рд┐рд╖реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдЪреАрдЬ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдФрд░ рдЕрд╡рд╛рдВрдЫрд┐рдд рднрд╛рдЧреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдирдХрд▓ рд╕реЗ рдкрд░реЗ рд▓рдЧрднрдЧ рдХреЛрдИ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИред рдбреЙрдХрд░ рдХреА рдХреЙрдкреА рдХреЗ рд╕рд╛рде, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдмреА рдмрджрд▓рдиреЗ рдкрд░ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЕрдорд╛рдиреНрдп рдХреИрд╢, рдФрд░ рдмрдбрд╝реА рдЫрд╡рд┐рдпрд╛рдВред

@bronger рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

COPY a b c d /some/where

рдЬреИрд╕реЗ рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рдереЗред

RUN rm ... рдХреЗ рдмрд╛рдж COPY ... рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рдБ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рдд рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЖрдк рдЕрднреА рднреА рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдХрд╛рд░рдг рдХреИрд╢ рдорд┐рд╕ рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓реЗрдХрд┐рди

COPY a b c d /some/where/

рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ /some/where/{a,b,c,d} рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдПрдмреАрд╕реАрдбреА рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рд╕рд╛рде рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИред рдпрд╣ src рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдПрдХ рд╕реНрд▓реИрд╢ рдХреЗ рд╕рд╛рде rsync рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, _рдЪрд╛рд░_ рдирд┐рд░реНрджреЗрд╢

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

рддреЛ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдИ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдИ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдСрдкрд░реЗрд╢рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред

@bronger рд╣рд╛рдБ, рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ --exclude zzz рдкреНрд░рдХрд╛рд░ рдХрд╛ рдзреНрд╡рдЬ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐ https://github.com/docker/docker/blob/master/ROADMAP.md#22 -dockerfile-syntax рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рдЕрднреА рдХрд░реНрд╖рдгред

рдХрд╛рдлреА рдЙрдЪрд┐рддред рддрдм рдореИрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдкреА + рдЖрд░рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдПрдХ рдлрд┐рдХреНрд╕рдореА рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реВрдВрдЧрд╛ред рдЕрдкрдирд╛ рд╕рдордп рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдмрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: +1: рдпрд╣ рдореБрджреНрджрд╛ред рдореБрдЭреЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЦреЗрдж рд╣реИ рдХрд┐ COPY rsync рдХреЗ рдЕрдиреБрдЧрд╛рдореА рд╕реНрд▓реИрд╢ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╣реА рдХрдерди рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдкрд░рдд рдкреНрд░рд╕рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдорд╛рдорд▓реЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдореИрдВ рдПрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рдд-рдЕрдорд╛рдиреНрдп рдкреНрд░рднрд╛рд╡ рд╣реЛрдВ), рдЗрд╕рд▓рд┐рдП --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 s рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдЕрдм рдмрджрд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред

рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реА рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ:

/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 рдХреА рдЗрдорд╛рд░рдд рдХреЛ рдЕрдорд╛рдиреНрдп рди рдХрд░реЗред (рдЪреВрдВрдХрд┐ /рд╡рд┐рдХреНрд░реЗрддрд╛ part1-N рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЕрдкрдиреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ part1-N рдбрд╛рд▓рдХрд░ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП:

/vendor
/src/part1-N

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрддрдиреА рдЖрд╕рд╛рдиреА рд╕реЗ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реВрдВред

@praller рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг, рд╣рдо рдареАрдХ рдЙрд╕реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ Go's filepath.Match рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд░рдЪрдирд╛рддреНрдордХрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд рдХреЛрдИ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдирд╣реАрдВ)

рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣рдж рддрдХ рдХреНрд░реИрдХ-рдмреНрд░реЗрди рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд▓реЗрдХрд░ рдЖрдпрд╛ рд╣реВрдВред рдХреЙрдкреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди _can_ рдЬреЛрдбрд╝реЗрдВ tgz рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред

рдпрд╣ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг рд╣реИ:
tar --exclude='./deferred_copy' -czf all_but_deferred.tgz ред
рдбреЛрдХрд░ рдирд┐рд░реНрдорд╛рдг ...

рдлрд┐рд░ рдЕрдкрдиреЗ рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдореЗрдВ:
рдЬреЛрдбрд╝реЗрдВ ./all_but_deferred.tgz /application_dir/
.. рд╢рд╛рдпрдж рд╣реА рдХрднреА рдмрджрд▓рддреА рдкрд░рддреЛрдВ рдореЗрдВ рд╕рд╛рдорд╛рди ..
рдЬреЛрдбрд╝реЗрдВ ред /application_dir/
.. рдЕрдХреНрд╕рд░ рдмрджрд▓рддреА рдкрд░рддреЛрдВ рдореЗрдВ рд╕рд╛рдорд╛рди

рдпрд╣ рдЯрд╛рд░ рдХрд╛ рдкреВрд░рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓/рдмрд╣рд┐рд╖реНрдХреГрдд/рдЬреЛ рдХреБрдЫ рднреА рд╢рд╛рдорд┐рд▓/рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рдмрд░реНрдмрд╛рдж рдкрд░рддреЛрдВ рдХреЗ рдЧреЛрдмреНрд╕ рдХреЗ рдмрд┐рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред

@ рдЬреЗрд╕рди-рдХреЗрди рдпрд╣ рдЕрдЪреНрдЫреА рдЪрд╛рд▓ рд╣реИ, рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдПрдХ рдЫреЛрдЯреА рд╕реА рдмрд╛рдд: рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк z (gzip) рдзреНрд╡рдЬ рдХреЛ tar рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ - рдпрд╣ sha256 рдЪреЗрдХрд╕рдо рдорд╛рди рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдбреЙрдХрд░ рдХреИрд╢ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░ рджреЗрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП +1, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рд╕рдорд░реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧреНрд▓реЛрдм рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ:

node_modules рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рдХреЙрдкреА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

COPY . /app -node_modules/

рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдЖрддреА рд╣реИ, рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рджрд░реНрджрдирд╛рдХ рд╣реИ рдЬрдм рдореЗрд░реЗ рдЬрд╛рд╡рд╛ рд╡реЗрдмрдПрдк рд▓рдЧрднрдЧ 900 рдПрдордмреА рд╣реИрдВ рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рд▓рдЧрднрдЧ 80% рд╢рд╛рдпрдж рд╣реА рдХрднреА рдмрджрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред
рдпрд╣ рдореЗрд░реЗ рдЖрд╡реЗрджрди рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдХреБрдЫ рд╣рдж рддрдХ рд╕реНрдерд┐рд░ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП 6-7 рдХреЙрдкреА рдкрд░рдд рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪреЛрдЯ рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ рдЬрдм рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рдЬреБрдбрд╝ рдЧрдП рд╣реИ

рдореИрдВ

рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рд╣рд╛рд▓рд╛рдВрдХрд┐ docker cp рдХреЗ рд╕рд╛рде, рдореИрдВ рдПрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдХреЙрдкреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ

рдареАрдХ рд╡рд╣реА рдореБрджреНрджрд╛ рдпрд╣рд╛рдБред рдореИрдВ рдПрдХ рдЧрд┐рдЯ рд░реЗрдкреЛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ .git рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

@oaxlin рдЖрдк рдЙрд╕рдХреЗ рд▓рд┐рдП .dockerignore рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@antoineco рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛? рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХрд┐рдП рдХреБрдЫ рд╕рдордп рд╣реЛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ .dockerignore рдХрдо рд╕реЗ рдХрдо рдЙрд╕ рд╕рдордп docker cp рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛

@ kkozmic-seek рдмрд┐рд▓реНрдХреБрд▓ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд :) рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд 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 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИред рдЕрдм рдореИрдВ https://nodejs.org/en/docs/guides/nodejs-docker-webapp/ рд╕реЗ рдереЛрдбрд╝рд╛ рд╣реИрд░рд╛рди рд╣реВрдВ, рдЬреЛ npm рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ COPY . /usr/src/app рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ node_modules рдбреЛрдХрд░ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рджреВрд╕рд░реА рдУрд░, COPY_NO_OVERWRITE (рдмреЗрд╣рддрд░ рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛) рдХрдорд╛рдВрдб рдХреЙрдкреА рдХреЗ рджреМрд░рд╛рди рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЖрдкрдХреЛ рдЙрди рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ/рдбреАрдЖрдИрдЖрд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореБрдЭреЗ рдпрд╣ рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдПрдХ рдФрд░ рд╣реИрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛:

рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛:
рдЕрдиреБрдкреНрд░рдпреЛрдЧ/
рд╡рд┐рдиреНрдпрд╛рд╕/
рд╕реНрдХреНрд░рд┐рдкреНрдЯ/
рдХрд▓реНрдкрдирд╛/
рд╕реНрдерд┐рд░/
...

рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

  1. рд╕реНрдерд┐рд░ рдХреЙрдкреА рдХрд░реЗрдВ/
  2. рдЕрдиреНрдп рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ
  3. рдРрдк рдХреЙрдкреА рдХрд░реЗрдВ/

рд╣реИрдХ рд╕рдорд╛рдзрд╛рди:
ADD ./static /home/app
ADD ["./[^s^a]*", "./s[^t]*", "/home/app/"]
ADD ./app /home/app

рджреВрд╕рд░рд╛ ADD рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ: "./st " рдФрд░ "./a" рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВред
рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рдЯрд┐рдкреНрдкрдгреА рдХреА рд╕реНрдерд┐рддрд┐ рдХреМрди рд╕реА рд╣реИ?

рдореИрдВ

рдореИрдВ

рдореИрдВ

рдореИрдВ

.gitignore рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рд╣реА рддрд░реАрдХреЗ рд╕реЗ .dockerignore рдлрд╝рд╛рдЗрд▓ рд░рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

@mirestrepo рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдкрд╣рд▓реЗ рджреЛ рдЕрдиреБрд╡рд░реНрддреА рджреЗрдЦреЗрдВред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рд╕реА #/рдбреЙрдЯрдиреЗрдЯ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЗрдЧрд╛ рдкрд░рдл nerf рд╣реИред

рдЬреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

  • рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рдмрд╛рд╣рд░реА dll рдХреЛ docker рдЗрдореЗрдЬ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ (My*.dll рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ)
  • рдлрд┐рд░ рдореЗрд░реЗ рд╕рднреА dll (My.*.dll рд╕реЗ рд╢реБрд░реВ) рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБред

рдЕрдм рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ (рдЖрд╕рд╛рдиреА рд╕реЗ) рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рдм рдХреБрдЫ рдХреЙрдкреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рддреЛ рдпрд╛ рддреЛ dll рдХреЛ рдбрдмрд▓ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ docker file size рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдпрд╛ рд╕рдм рдХреБрдЫ рдПрдХ рд▓реЗрдпрд░ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдмрд╛рдж рдореЗрдВ рдПрдХ рдореЗрдЧрд╛ nerf рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдмрд╛рд╣рд░реА dll рдХреЛ рдХреИрд╢ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╣рд░ рдмрд╛рд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@adresdvila solutoin рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдореИрдВ рдЗрд╕реЗ рдЗрд╕рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛:

COPY ["[^M][^y]*","/app/"] 
COPY ./My* /app/

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдХрд┐ .json рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд╣рд▓реЗ рдХрдорд╛рдВрдб рдкрд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

@antoineco рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЪрд┐рд▓реНрд▓рд╛рдирд╛ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред рдореИрдВ рдЕрдм рдЕрдкрдиреА рдбреЙрдХрдЯрд░ рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ .git рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд╣реАрдВ рдмрдирд╛рддрд╛ред

рдЗрд╕рдиреЗ рдЫрд╡рд┐ рдЖрдХрд╛рд░ рдореЗрдВ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛, рдФрд░ рдореЗрд░реА рдЫрд╡рд┐ рдХреЛ рдбреЙрдХрд░ рдХреИрд╢рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓ рдмрдирд╛ рджрд┐рдпрд╛ред

рдореЗрд░реА рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝реА рдлрд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдмрд╛рдХреА рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрдкреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЛрдИ рднреА рдмрджрд▓рд╛рд╡ рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдП рдирд╣реАрдВ рдХреНрдпреЛрдВрдХрд┐ рдХреЙрдкреА рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ (7 рдЬреАрдмреА рдмрд┐рди рдлрд╛рдЗрд▓)ред рдХреНрдпрд╛ рдХреЛрдИ рдирдпрд╛ рдЙрдкрд╛рдп рд╣реИ?

COPY рдФрд░ рдкреНрд░реВрди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░реВрдирд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдХреА рдкрд░рдд рдореЗрдВ рдЕрднреА рднреА рд╕рднреА рдбреЗрдЯрд╛ рдореМрдЬреВрдж рд╣реИрдВред

COPY . --exclude=a --exclude=b рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ, @cpuguy83?

@ рдиреЛрд╡рд╛рдХрд░ рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИред рд╡реИрд╕реЗ рднреА tar рдФрд░ rsync рдХреЗ рдЕрдиреБрд░реВрдк рд▓рдЧрддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдбреЙрдХрд░реАрдЧреНрдиреЛрд░ рдХреЗ рд╕рдорд╛рди рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

@tonistiigi @dnephin

рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ #32507 рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@ cpuguy83 рд╣рд╛рдБред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, COPY --chown=uid:gid . рдХреЗ рдЕрдиреБрд░реВрдк

@dnephin RUN --mount рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЧреЛ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди, рдорд╛рд░реНрдХрдбрд╛рдЙрди рдлрд╝рд╛рдЗрд▓ рд╕реЗ HTML рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛, рдЖрджрд┐)ред RUN --mount рдбреЛрдк рд╣реИ рдФрд░ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рд╕реНрдлрд┐рдВрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреАрдЖрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдирд╛)ред

COPY somedir --exclude=excludeddir1 --exclude=excludeddir2 рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ рдЬрд┐рд╕реЗ рдЫрд╡рд┐ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХрдИ COPY рдХрдердиреЛрдВ рдореЗрдВ рдмрд┐рдЦрд░рд╛ рд╣реБрдЖ рд╣реИред рд▓рдХреНрд╖реНрдп рд╕реНрдкрд╖реНрдЯ COPY first second third .... eleventh destination/ рд╕реЗ рдмрдЪрдирд╛ рд╣реИ рдЬрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд░реВрдЯ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рд╣реЛрдВ рдФрд░ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди/рд╡реГрджреНрдзрд┐ рдХреЗ рдЕрдзреАрди рд╣реЛред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдкрд╣рд▓реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ рдХрд┐ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░, рд╕рдВрдХрд▓рд┐рдд/рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ - рдФрд░ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрджрд┐ рдХреЙрдкреА рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ рдмрджрд▓реА рд╣реИрдВ (рдпрд╛рдп)ред рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдерд╛ рдЬреЛ рдкрд┐рдЫрд▓реЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рд╕реЗ рдмрджрд▓ рд╕рдХрддреА рдереАрдВ рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрдХрд▓рди/рдЙрддреНрдкрдиреНрди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ . рдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рдХреЙрдкреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдЬреЛрдбрд╝рд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдВрдд рдореЗрдВ рдХрд╣реАрдВ рдХреЙрдкреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ RUN --mount рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред COPY --exclude рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рдРрд╕рд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдЖрдк RUN --mount... rsync --exclude ... (рдпрд╛ рдХреБрдЫ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдпрд╣ COPY --exclude рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ред

@dnephin рдУрд╣, рдореИрдВрдиреЗ RUN --mount rsync рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛! рдЙрддреНрдХреГрд╖реНрдЯ! рдореИрдВ

рдпрд╣ рд╡рд╛рдХрдИ рдмреЗрд╣рддрд░реАрди рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдк рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ @Nowaker , рдХреНрдпреЛрдВрдХрд┐ рдХреИрд╢ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдорд╛рдЙрдВрдЯреЗрдб рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХреБрдЫ рднреА рдмрджрд▓рддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рд╡рд╣реА рдЬреЛ рдЖрдк rsync рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдЙрд╕ rsync рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдмрджрд▓реА рд╣реИ рддреЛ рдХреИрд╢ рдлрд┐рд░ рд╕реЗ рдЙрдард╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ https://gist.github.com/tonistiigi/38ead7a4ed60565996d207a7d589d9c4#file -gistfile1-txt-L130-L140 рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ RUN --mount (рдпрд╛ рдмрд┐рд▓реНрдбрдХрд┐рдЯ рдореЗрдВ рдПрд▓рдПрд▓рдмреА) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИред

рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ https://docs.docker.com/develop/develop-images/multistage-build/?

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 Welp, рддреЛ рдпрд╣ рдЕрдм рдФрд░ рдЙрддреНрдХреГрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж ..

@MartijnHols рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХрд╛ рд╢реБрдХреНрд░рд┐рдпрд╛ред

рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП: рдЙрд╕ рдиреЗ рдХрд╣рд╛, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ "рдХреНрдпреЛрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ --COPY рдореЗрдВ, рдЖрдк рдмрд╣реБ-рд╕реНрддрд░реАрдп рдирд┐рд░реНрдорд╛рдг рдореЗрдВ RUN chown рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ"ред рд╣рдореЗрдВ рд╡рд┐рд╡реЗрдХ рдХреЗ рд▓рд┐рдП --exclude рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Dockerfiles рдореЗрдВ рдЗрди рджрд┐рдиреЛрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬреЛ COPY --exclude рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрдЧрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝рд╛ рдбреЗрдЯрд╛ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ рдЬрд┐рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдмрд╛рд░-рдмрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЕрдзреАрди рд╣реИред рдХреИрд╢ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдмрд╛рдХреА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреА рдкрд░рдд рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЕрднреА рддрдХ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдВрдЯреЗрдирд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИред

рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗрдВрджреНрд░рд┐рдд рд╕реНрддрд░рд┐рдд рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИред 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

рдФрд░ рдбреЙрдХрд░рдлрд╛рдЗрд▓:

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"]

рдХреИрд╢ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ COPY рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ ... рдФрд░ рдЗрд╕реА рддрд░рд╣ рдореЗрд░реЗ рдРрдк -1 рдФрд░ рдРрдк -2 рдХреЛ рдкрд░рдд рдХрд░реЗрдВ рдпрджрд┐ рд╡реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ?

@axehayz рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдпрд╣реА рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ https://medium.com/@guillaumejacquart/node -js-docker-workflow-12febcc0eed8 рдореЗрдВ рдиреЛрдб рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдХрд░реВрдБрдЧрд╛ред

рдпрд╛рдиреА рдЖрдкрдХреА рджреВрд╕рд░реА рдкреНрд░рддрд┐ рдХреЗ рд▓рд┐рдП рдмрд╕ COPY . рд╣реЛрдирд╛ рдареАрдХ рд╣реИ; рдЬрдм рддрдХ рдЖрдкрдХрд╛ pip install рдкрд╣рд▓реЗ рдЖрддрд╛ рд╣реИ, рдпрд╣ рд╕рдВрд╕реНрдерд╛рдкрд┐рдд рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд┐рдд рдХреИрд╢ рдХреЛ рдЕрдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдлрд┐рд▓рд╣рд╛рд▓ рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

рдореЗрд░реЗ рдкрд╛рд╕ COPY --exclude=... --exclude=... рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рд╣реИ

рдореИрдВ рдЕрдкрдиреА рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдкреА --from=oldimage рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдлрд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗ рдмрд┐рдирд╛ред рдореИрдВ рдЗрд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬреЛ рджрд░реНрджрдирд╛рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рдпрд╛ рддреЛ рдбреАрдЖрдИрдЖрд░/рдлрд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдпрд╛ рдПрдХрд╛рдзрд┐рдХ - рдмрд╣рд┐рд╖реНрдХреГрдд рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЗрддрдирд╛ рдмреЗрд╣рддрд░ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рддреЛ рд╕рд╛рдврд╝реЗ рддреАрди рд╕рд╛рд▓ рдХреЗ рдмрд╛рдж рднреА рдХреЛрдИ рдкрд╛рд╡рддреА рдирд╣реАрдВ рд╣реИ?

@asimonf рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реА рдкрд╛рд╡рддреА рдФрд░ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рдпрд╣ рдХрд╛рдо рдХрд┐рд╕реА рдиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ? рд╡рд╣ рд╕рд╣реА рд╣реИред рд╣рдо рд╕рднреА рдХреЛ рдЙрди рдЪреАрдЬреЛрдВ рдкрд░ рдЪреБрдирд╛рд╡ рдХрд░рдирд╛ рд╣реИ рдЬрд┐рди рдкрд░ рд╣рдо рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдпрд╣ рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред

# 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/* /

рдмрд┐рд▓реНрдбрдХрд┐рдЯ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░рдг рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

#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 рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЪреБрдиреМрддреА рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЗрдЖрдЙрдЯ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбреЙрдХрдЯрд░ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЕрдкрдиреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЗрдЖрдЙрдЯ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдИ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд░рдЦрд░рдЦрд╛рд╡, рдирдП рдХрд┐рд░рд╛рдП рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА, рдХреНрд░реЙрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдорд╛рдирдХреЛрдВ, рдврд╛рдВрдЪреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ, рдЖрджрд┐)ред

@cfletcher рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╕рдордЭрддрд╛ рд╣реВрдВред

рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреА рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдХреЛ рдЙрдк-рдЙрдк-рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ (рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдореБрдЭреЗ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП rsync рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реБрдИрдВ), рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдбреЙрдХрд░рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд▓реНрдкрдирд╛ рдХреА рд╣реИ, рдореИрдВрдиреЗ рдЬреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ 100 рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред рдпрд╣ рдХреЗрд╡рд▓ рдЙрдирдореЗрдВ рд╕реЗ 1 рдХреЛ рд╕реНрдЯреЗрдЬ 0 рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрдирдореЗрдВ рд╕реЗ 1+10 рдХреЛ рд╕реНрдЯреЗрдЬ 1 рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдлрд┐рд░ рд╕рднреА 100 рдХреЛ рд╕реНрдЯреЗрдЬ 2 рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдКрдкрд░ рд╕реНрдЯреИрдХреНрдб рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЕрд▓рдЧ рдмрд┐рд▓реНрдб рдХрдорд╛рдВрдб рд╣реЛрддрд╛ рд╣реИред рдЬрдЯрд┐рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рд╕реАрдзрд╛ рд╕рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕реНрдЯреИрдЧрд┐рдлрд╛рдИ-рдлрд╛рдЗрд▓ рд▓реЙрдЬрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрдЧрд╛ред

рдореЗрд░реЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ npm install рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрдкреА рдХреА рдЧрдИ рд╕рднреА package.json рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреЙрдкреА рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмрд╣рд┐рд╖реНрдХреГрдд рддрд░реНрдХ рднреА рдЪрд╛рд╣реЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ 20+ рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ 10+ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рд╣реИрдВред рд╣рдо 2 рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдФрд░ рдХреБрдЫ рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рднрд╛рд░реА рдХреЛрдб рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЗрдиреНрд╣реЗрдВ рджреЛ рдХреЙрдкреА рдкрд░рддреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдПрдХ рд╕реНрдерд┐рд░ рдлрд╛рдЗрд▓реЛрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдХрднреА рд╕реНрдкрд░реНрд╢ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реА рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд╣рдореЗрд╢рд╛ рд╕реНрдкрд░реНрд╢ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рдмрд╣реБрдд рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдЕрднреА рднреА рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕рд╕реЗ рдореБрдЭреЗ рдкреНрд░рддрд┐ рдмрд┐рд▓реНрдб 5 рдорд┐рдирдЯ рдмрдЪрд╛рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рдЕрдЧрд░ рдореИрдВ рдХреИрд╢ рдХреЛ рдЕрдорд╛рдиреНрдп рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред

рдмрд┐рд▓реНрдбрдХрд┐рдЯ рдХреЗ рд╕рд╛рде рдХреИрд╢ рдореВрд▓ рдЫрд╡рд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдкреНрд░реА-рдмрд┐рд▓реНрдбрдХрд┐рдЯ рд╣реИред
рддреЛ рд╣рд╛рдБ, рдЙрд▓реНрд▓рд┐рдЦрд┐рдд rsync рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдк рдЗрд╕рдореЗрдВ рдПрдХ рд╣рд┐рдЯ рд▓реЗрдВрдЧреЗ рдХрд┐ рдЖрдкрдХреЛ рд╣рд░ рдмрд╛рд░ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рд╣реЛрдиреЗ рдкрд░ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдмрд╛рдж рдХреЗ рдЪрд░рдгреЛрдВ рдХреЛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрджрд┐ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЛ рддрдм рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред .. рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рдкреВрд░реНрдг рдСрди рдж рд╕реНрдкреЙрдЯ рдереНрдпреЛрд░реА рдореЗрдВ рдЙрди рдЪрд░рдгреЛрдВ рдХреЛ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг --exclude рдзреНрд╡рдЬ рдХреЛ COPY рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЗрддрдирд╛ рдХрдард┐рди рдмрд┐рдХреНрд░реА рд╣реИред рдпрд╣ TOP30 рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╡реЛрдЯ рдкреНрд░рд╛рдкреНрдд рдЯрд┐рдХрдЯреЛрдВ рдореЗрдВ рд╣реИ, рдФрд░ рдЕрдиреНрдп TOP30 рдЯрд┐рдХрдЯреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди-рд╡рд╛рд░ рд╣реИред :(

рдпрд╣ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@cpuguy83 рдпрд╛рдпред рдпрд╣ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж/рдХреБрдЫ рд╣рдж рддрдХ рдЕрд╕реНрд╡реАрдХреГрдд рдЬреИрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ COPY --exclude рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдЪрд┐рдд рдкреАрдЖрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрдЧрд░ рдпрд╣ рдЧреБрдгрд╡рддреНрддрд╛ рдорд╛рдирдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ?

рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░рдХреНрд╖рдХ рдХреЗ рд▓рд┐рдП рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдпрд╛ рджреЛ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ @tonistiigi рд╕реЗ рдмрд╛рдд рдХреА рд╣реИ рдФрд░ IIRC рд╕рдмрд╕реЗ рдмрдбрд╝реА рдмрд╛рдзрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ dockerignore, рд╡рд╛рдХреНрдп рд░рдЪрдирд╛, рдЖрджрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ (рдФрд░ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ dockerignore рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИ)ред

рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдмрд┐рд▓реНрдбрдХрд┐рдЯ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

COPY --exclude=... --exclude=... рдЕрдкрд╡реЛрдЯ рдХрд░рдирд╛ - рдореЗрд░реЗ рдореЛрдиреЛрд▓рд┐рде рд░реЗрдкреЛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ

рдЕрдкрд╡реЛрдЯрд┐рдВрдЧ! рдореИрдВрдиреЗ COPY !(excludedfile) . рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬреЛ рдмреИрд╢ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рд▓реЗрдХрд┐рди рдпрд╣ рдбреЙрдХрд░ рдкрд░ рдирд╣реАрдВ рд╣реИ

рдореБрдЭреЗ Dockerfile рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ COPY рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП Dockerfile .dockerignore рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рд╕рдм рдХреБрдЫ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд╕реБрдЭрд╛рд╡ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИрдВред рдЫрд╡рд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде DRY рдмрдиреЗ рд░рд╣рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЗрдореНрд╣реЛред

#33923 рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╕рдВрдпреЛрдЧ рд╣реИ рдХрд┐ рдЖрдк рдмрд┐рд▓реНрдб рд╕рдВрджрд░реНрдн рд╕реЗ рдЬреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдареАрдХ рд╡рд╣реА рд╕рд╛рдорд╛рди рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк COPY рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛:

COPY --use-dockerignore <source> <target>

рдпрд╛ рд╢рд╛рдпрдж рдХреБрдЫ рдРрд╕рд╛ рднреА:

COPY --use-ignorefile=".gitignore" <source> <target>

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХреИрд╕реЗ .dockerignore рдЖрдорддреМрд░ рдкрд░ .gitignore рдХрд╛ 90% рдкреБрдирд░реБрддреНрдкрд╛рджрди рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ COPY рдХрдерди рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЕрдирджреЗрдЦрд╛ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╖реНрдЯрдкреНрд░рдж рд▓рдЧрддрд╛ рд╣реИред рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдЬрд╝рд░реВрд░ рд╣реЛрдЧрд╛ред

@asbjornu .gitignore рдФрд░ .dockerignore рдПрдХ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд▓реНрдЯреАрд╕реНрдЯреЗрдЬ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рдПрдХ рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдЬ рдкрд░ рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдЧрд┐рдЯ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рдлрд┐рд░ рднреА рдкрд░рд┐рдгрд╛рдореА рдЫрд╡рд┐ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдФрд░ рд╣рд╛рдБ, рдорд▓реНрдЯреАрд╕реНрдЯреЗрдЬ рдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХреА рдЧрдИ рд╣рд░ рдЪрд░рдг рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ .dockerignore рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП - рдмрд┐рд▓реНрдХреБрд▓ред

рдореИрдВ рдЕрдХреНрд╕рд░ "рдбреЙрдХрд░ рдмрд┐рд▓реНрдб" рдХреЗ рдмрд╛рд╣рд░ рдХреЙрдкреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, .dockerignore рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ "рдбреЙрдХрд░ рд╕реАрдкреА" рдореЗрдВ рд╕рдВрд╢реЛрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдордЭрджрд╛рд░ рд╕рдорд╛рдзрд╛рди рд╣реИ

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреЛрд▓реЗ рд╣реБрдП 5 рд╕рд╛рд▓ рд╣реЛ рдЧрдП рд╣реИрдВред рд╕рд┐рддрдВрдмрд░ 2020 рдореЗрдВ, рдореИрдВ рдЕрднреА рднреА рдпрд╣реА рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдиреЗ рд╣реИрдХ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рд▓рдЧрднрдЧ рд╕рднреА рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдиреЗ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рд░реВрдк рдореЗрдВ exclude рдзреНрд╡рдЬ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрднреА рдФрд░ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдЕрдирд╕реБрд▓рдЭреЗ рди рд░рд╣рдиреЗ рджреЗрдВред

рдпрджрд┐ рдЖрдк рдХреБрдЫ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдЙрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рдвреВрдВрдврдирд╛ рд╣реЛрдЧрд╛ред

рдпрджрд┐ рдЖрдк рдХреБрдЫ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдЙрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рдвреВрдВрдврдирд╛ рд╣реЛрдЧрд╛ред

рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдРрд╕рд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдХреЙрдкреА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП https://github.com/tonistiigi/fsutil/blob/master/copy/copy.go рд╕рдмрд╕реЗ рдкрд╣рд▓реЗред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо libsolver рдореЗрдВ backend.go рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА AST рдФрд░ рдмрд┐рд▓реНрдбрдХрд┐рдЯ рдХреЗ рдлреНрд░рдВрдЯрдПрдВрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред
рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рдмрд╛рдж, рдХреЙрдкреА рдпреВрдирд┐рдХреНрд╕ рд╕реАрдкреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ rsync рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдХреЗ рдХрд░реАрдм рд╣реЛрдЧреАред

рдЕрджреНрдпрддрди: рд╣рд╛рдБ, copy.go рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ https://github.com/moby/buildkit/pull/1492 рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдмрд╣рд┐рд╖реНрдХрд░рдгреЛрдВ рдХреА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реВрдЪреА рдХреЗ рдХрд░реАрдм рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

kunyan picture kunyan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

anshumanbh picture anshumanbh  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dbanck picture dbanck  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bhuvan picture bhuvan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Nurza picture Nurza  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ