Moby: рдлрд╝рд╛рдЗрд▓ рдЧреНрд▓реЛрдм рдХреЗ рд╕рд╛рде Dockerfile COPY рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рд╕реЗ рдЧрдВрддрд╡реНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдЧрд╛

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

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг:
COPY рдореЗрдВ Dockerfile рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреНрд▓рдмреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, docker (рдХрднреА-рдХрднреА?) рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдЧрдВрддрд╡реНрдп рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рднреА рдХрд░реЗрдЧрд╛ред

$ docker version
Client:
 Version:      1.8.1
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   d12ea79
 Built:        Thu Aug 13 19:47:52 UTC 2015
 OS/Arch:      darwin/amd64

Server:
 Version:      1.8.0
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   0d03096
 Built:        Tue Aug 11 17:17:40 UTC 2015
 OS/Arch:      linux/amd64

$ docker info
Containers: 26
Images: 152
Storage Driver: aufs
 Root Dir: /mnt/sda1/var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 204
 Dirperm1 Supported: true
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 4.0.9-boot2docker
Operating System: Boot2Docker 1.8.0 (TCL 6.3); master : 7f12e95 - Tue Aug 11 17:55:16 UTC 2015
CPUs: 4
Total Memory: 3.858 GiB
Name: dev
ID: 7EON:IEHP:Z5QW:KG4Z:PG5J:DV4W:77S4:MJPX:2C5P:Z5UY:O22A:SYNK
Debug mode (server): true
File Descriptors: 42
Goroutines: 95
System Time: 2015-08-26T17:17:34.772268259Z
EventsListeners: 1
Init SHA1:
Init Path: /usr/local/bin/docker
Docker Root Dir: /mnt/sda1/var/lib/docker
Username: jfchevrette
Registry: https://index.docker.io/v1/
Labels:
 provider=vmwarefusion

$ uname -a
Darwin cerberus.local 14.5.0 Darwin Kernel Version 14.5.0: Wed Jul 29 02:26:53 PDT 2015; root:xnu-2782.40.9~1/RELEASE_X86_64 x86_64

рдкрд░реНрдпрд╛рд╡рд░рдг рд╡рд┐рд╡рд░рдг:
OSX /w boot2docker рдкрд░ рд╕реНрдерд╛рдиреАрдп рд╕реЗрдЯрдЕрдк docker-рдорд╢реАрди рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдкреНрд░рдЬрдирди рдХреИрд╕реЗ рдХрд░реЗрдВ:

рд╕рдВрджрд░реНрдн

$ tree
.
тФЬтФАтФА Dockerfile
тФФтФАтФА files
    тФЬтФАтФА dir
    тФВ┬а┬а тФЬтФАтФА dirfile1
    тФВ┬а┬а тФЬтФАтФА dirfile2
    тФВ┬а┬а тФФтФАтФА dirfile3
    тФЬтФАтФА file1
    тФЬтФАтФА file2
    тФФтФАтФА file3

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

FROM busybox

RUN mkdir /test
COPY files/* /test/

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо

$ docker run -it copybug ls -1 /test/
dirfile1
dirfile2
dirfile3
file1
file2
file3

рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо
рдкрд░рд┐рдгрд╛рдореА рдЫрд╡рд┐ рдореЗрдВ рд╕рдВрджрд░реНрдн рд╕реЗ рд╕рдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП

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

рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдХрдорд╛рдВрдб CP рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рдмрд╛рд░ рдареАрдХ рдХрд░реЗрдВред

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

docker info рдФрд░ uname -a рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдореВрд▓ рд╕рдВрджреЗрд╢ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЗрд╕реЗ рд╕рдорд╕реНрдпрд╛ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреБрди: рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ 1.6.2 рдФрд░ 1.8 . рдкрд░ рд╣реИ
https://gist.github.com/jrabbit/e4f864ca1664ec0dd288 рджреВрд╕рд░реЗ рд╕реНрддрд░ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдкреНрд░рдердо рд╕реНрддрд░ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП?

рдЙрди рдЧреБрдЧреНрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП: рдпрджрд┐ рдЖрдкрдХреЛ COPY * /src рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ рддреЛ COPY //src рдЖрдЬрд╝рдорд╛рдПрдВ

@jfchevrette рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдЖрдкрдХреЗ рдкрд╛рд╕ COPY files/* /test/ рд╣реИ рдЬреЛ COPY files/dir files/file1 files/file2 files/file /test/ рддрдХ рдлреИрд▓рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ COPY рдХрдорд╛рдВрдб рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ COPY files/dir /test/ ) рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ (рдмреЗрд╣рддрд░ рдпрд╛ рдмрджрддрд░ рдХреЗ рд▓рд┐рдП) COPY рдкреНрд░рддреНрдпреЗрдХ arg dir рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЧрдВрддрд╡реНрдп dir рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдЧрд╛ред рддрд░реНрдХ рдбреАрдЖрдИрдЖрд░ рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕рд╛рдордЧреНрд░реАред рдпрджрд┐ рдЖрдкрдиреЗ рддреАрд╕рд░реЗ рд╕реНрддрд░ рдХреЗ рдбреАрдЖрдИрдЖрд░ рдЬреЛрдбрд╝реЗ рд╣реИрдВ рддреЛ рдореИрдВ рд╢рд░реНрдд рд▓рдЧрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд░рд╣реЗрдВрдЧреЗред

рдореИрдВ рдЗрд╕ рддрдереНрдп рд╕реЗ рд░реЛрдорд╛рдВрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ COPY рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп dir рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рд╕рдордп рд╕реЗ рдРрд╕рд╛ рд╣реА рд╣реИред

рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЖрдк рд╕реНрд░реЛрдд рдкреЗрдбрд╝ рдореЗрдВ рдПрдХ рд╕реНрддрд░ рдКрдВрдЪрд╛ рдХреЙрдкреА рдХрд░рдХреЗ рдЗрд╕реЗ рдХрдо рджрд░реНрджрдирд╛рдХ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдкреВрд░рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ @duglin рд╕рд╣реА рд╣реИ рдФрд░ рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рдмрд╣реБрдд рдЬреЛрдЦрд┐рдо рднрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХрдИ dockerfiles рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд╕рд╛рдорд╛рди рдХреЛ рддреЛрдбрд╝ рдпрд╛ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореЗрд░рд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдпрджрд┐ COPY cp рдпрд╛ rsync рд╣реИрдВрдбрд▓ рдЧреНрд▓рдмреНрд╕ рдФрд░ рдлреЛрд▓реНрдбрд░ рдкрд░ рдЯреНрд░реЗрд▓рд┐рдВрдЧ рд╕реНрд▓реИрд╢ рдЬреИрд╕реЗ рдЯреВрд▓ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣рд╛ рд╣реЛред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ COPY рдПрдХ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ dir/* рд╕реЗ рдЧрдВрддрд╡реНрдп IMO рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ

@jfchevrette рд╣рд╛рдБ - рдкрд╣рд▓рд╛ рдореМрдХрд╛ рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ рд╣рдореЗрдВ рдЗрд╕реЗ "рдареАрдХ" рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ...

@duglin рддреЛ, рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛?

@tugberkugurlu рд╣рд╛рдБ, рдХрдо рд╕реЗ рдХрдо рдЕрднреА рдХреЗ рд▓рд┐рдПред рд╕рдВрдкреВрд░реНрдг рдмрд┐рд▓реНрдб рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЬрдм рд╣рдо рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдХреЙрдкреА (рдпрд╛ рдЗрд╕рдХреЗ рдирдП рд╕рдордХрдХреНрд╖) рдХреЛ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@ рдбрдЧрд▓рд┐рди рдзрдиреНрдпрд╡рд╛рджред рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреБрд▓рд╛ рд░рдЦрдирд╛ рдФрд░ рдпрд╣рд╛рдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдпрд╛ рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рдореБрджреНрджрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдореИрдВ рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддрд╛ рд╣реВрдВ?

@tugberkugurlu рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд╣рдореЗрдВ "рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдмрд┐рд▓реНрдбрд░ рд╕рдкреЛрд░реНрдЯ" рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд░реЛрдбрдореИрдк (https://github.com/docker/docker/blob/master/ROADMAP.md#22-dockerfile-syntax) рдХрд╣рддрд╛ рд╣реИред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрджреНрджреЗ рдХреЛ рдЦреБрд▓рд╛ рд░рдЦрдиреЗ рдХрд╛ рд╕рдВрдмрдВрдз рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбреЙрдХрд░ рдЬрд┐рд╕ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рдХрд┐рд╕реА рднреА рдРрд╕реЗ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рд╣реИ рдЬреЛ рддреБрд░рдВрдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред рднрд╡рд┐рд╖реНрдп рдХреЗ рдХрд╛рдо рдХреЗ рдореБрджреНрджреЗ рдЖрдо рддреМрд░ рдкрд░ рдмрдВрдж рдХрд░ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЪреАрдЬреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ (рдкреАрдЖрд░) рдХреА рдЬрд╛ рд╕рдХреЗред

@duglin рдпрд╣ рдмрд╣реБрдд рдЧрдВрднреАрд░ рдореБрджреНрджрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕реЗ рдмрдВрдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╕рдорд╕реНрдпрд╛ 0.1 рд░рд┐рд▓реАрдЬ рдореЗрдВ рдкреЗрд╢ рдХреА рдЧрдИ рдереАред 2.0 рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд▓рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛ (рдореАрд▓ рдХреЗ рдкрддреНрдерд░ рдЬреАрдердм рдкрд░ рднреА рд╣реИрдВ)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ:

COPY . /app

рдФрд░ рдЕрдиреНрдп рд╕рднреА рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ .gitignore рдореЗрдВ рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ рдХрд░реЗрдВ рдпрд╛ рдПрдХрд▓ рд╕реНрддрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдФрд░ COPY рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ mv рд╢рдмреНрджрд╛рд░реНрде рд╣реИ:

COPY src /myapp

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИ рдХрд┐ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдорддрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП COPY рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рд╕рдорд╛рдзрд╛рди tar -cf .. & ADD tarfile.tar.gz рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рдмрджрд▓рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред рджреВрд╕рд░реА рдмрд╛рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдореЛрдВ рдореЗрдВ рд╕реНрд▓реИрд╢ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░ рд░рд╣реА рд╣реИ COPY src /src рдмрдирд╛рдо COPY src/ /src (рдЬрд┐рд╕реЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред

рдбрдЧрд▓рд┐рди рдиреЗ рдЗрд╕реЗ 1 рд╕рд┐рддрдВрдмрд░, 2015 рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛

@duglin рдпрд╣ рдПрдХ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рдФрд░ рдХреНрд░реБрджреНрдз рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдореБрджреНрджрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред COPY рдХрдорд╛рдВрдб рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдЙрдкрдпреЛрдЧ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд╕рд╣рдорддрд┐ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред

@tjwebb рдЕрднреА рднреА рдПрдХ рдЦреБрд▓рд╛ рдореБрджреНрджрд╛ рд╣реИ https://github.com/docker/docker/issues/29211 ред рдЗрд╕реЗ рдХреЗрд╡рд▓ рддрднреА рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрдд рд╣реЛред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рддреЛ рд╣рдо рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд╣реИрдВ _how_ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрджрд┐ рдЖрдк _do_, рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдЦреЛрд▓рддреЗ рд╣реИрдВ)ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ cp рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП), OS X рдФрд░ Linux рдХреЗ рдмреАрдЪ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдВрддрд░ рд╣реИ;

mkdir -p repro-15858 \
  && cd repro-15858 \
  && mkdir -p source/dir1 source/dir2 \
  && touch source/file1 source/dir1/dir1-file1 \
  && mkdir -p target1 target2 target3 target4 target5 target6

cp -r source target1 \
&& cp -r source/ target2 \
&& cp -r source/ target3/ \
&& cp -r source/* target4/ \
&& cp -r source/dir* target5/ \
&& cp -r source/dir*/ target6/ \
&& tree

рдУрдПрд╕ рдПрдХреНрд╕:

.
тФЬтФАтФА source
тФВ┬а┬а тФЬтФАтФА dir1
тФВ┬а┬а тФВ┬а┬а тФФтФАтФА dir1-file1
тФВ┬а┬а тФЬтФАтФА dir2
тФВ┬а┬а тФФтФАтФА file1
тФЬтФАтФА target1
тФВ┬а┬а тФФтФАтФА source
тФВ┬а┬а     тФЬтФАтФА dir1
тФВ┬а┬а     тФВ┬а┬а тФФтФАтФА dir1-file1
тФВ┬а┬а     тФЬтФАтФА dir2
тФВ┬а┬а     тФФтФАтФА file1
тФЬтФАтФА target2
тФВ┬а┬а тФЬтФАтФА dir1
тФВ┬а┬а тФВ┬а┬а тФФтФАтФА dir1-file1
тФВ┬а┬а тФЬтФАтФА dir2
тФВ┬а┬а тФФтФАтФА file1
тФЬтФАтФА target3
тФВ┬а┬а тФЬтФАтФА dir1
тФВ┬а┬а тФВ┬а┬а тФФтФАтФА dir1-file1
тФВ┬а┬а тФЬтФАтФА dir2
тФВ┬а┬а тФФтФАтФА file1
тФЬтФАтФА target4
тФВ┬а┬а тФЬтФАтФА dir1
тФВ┬а┬а тФВ┬а┬а тФФтФАтФА dir1-file1
тФВ┬а┬а тФЬтФАтФА dir2
тФВ┬а┬а тФФтФАтФА file1
тФЬтФАтФА target5
тФВ┬а┬а тФЬтФАтФА dir1
тФВ┬а┬а тФВ┬а┬а тФФтФАтФА dir1-file1
тФВ┬а┬а тФФтФАтФА dir2
тФФтФАтФА target6
    тФФтФАтФА dir1-file1

20 directories, 12 files

рдЙрдмрдВрдЯреВ рдкрд░ (/ рдмрд┐рди/рд╢)

.
|-- source
|   |-- dir1
|   |   `-- dir1-file1
|   |-- dir2
|   `-- file1
|-- target1
|   `-- source
|       |-- dir1
|       |   `-- dir1-file1
|       |-- dir2
|       `-- file1
|-- target2
|   `-- source
|       |-- dir1
|       |   `-- dir1-file1
|       |-- dir2
|       `-- file1
|-- target3
|   `-- source
|       |-- dir1
|       |   `-- dir1-file1
|       |-- dir2
|       `-- file1
|-- target4
|   |-- dir1
|   |   `-- dir1-file1
|   |-- dir2
|   `-- file1
|-- target5
|   |-- dir1
|   |   `-- dir1-file1
|   `-- dir2
`-- target6
    |-- dir1
    |   `-- dir1-file1
    `-- dir2

24 directories, 12 files
diff --git a/macos.txt b/ubuntu.txt
index 188d2c3..d776f19 100644
--- a/macos.txt
+++ b/ubuntu.txt
@@ -11,15 +11,17 @@
 тФВ       тФЬтФАтФА dir2
 тФВ       тФФтФАтФА file1
 тФЬтФАтФА target2
-тФВ   тФЬтФАтФА dir1
-тФВ   тФВ   тФФтФАтФА dir1-file1
-тФВ   тФЬтФАтФА dir2
-тФВ   тФФтФАтФА file1
+тФВ   тФФтФАтФА source
+тФВ       тФЬтФАтФА dir1
+тФВ       тФВ   тФФтФАтФА dir1-file1
+тФВ       тФЬтФАтФА dir2
+тФВ       тФФтФАтФА file1
 тФЬтФАтФА target3
-тФВ   тФЬтФАтФА dir1
-тФВ   тФВ   тФФтФАтФА dir1-file1
-тФВ   тФЬтФАтФА dir2
-тФВ   тФФтФАтФА file1
+тФВ   тФФтФАтФА source
+тФВ       тФЬтФАтФА dir1
+тФВ       тФВ   тФФтФАтФА dir1-file1
+тФВ       тФЬтФАтФА dir2
+тФВ       тФФтФАтФА file1
 тФЬтФАтФА target4
 тФВ   тФЬтФАтФА dir1
 тФВ   тФВ   тФФтФАтФА dir1-file1
@@ -30,6 +32,8 @@
 тФВ   тФВ   тФФтФАтФА dir1-file1
 тФВ   тФФтФАтФА dir2
 тФФтФАтФА target6
-    тФФтФАтФА dir1-file1
+    тФЬтФАтФА dir1
+    тФВ   тФФтФАтФА dir1-file1
+    тФФтФАтФА dir2

-20 directories, 12 files
+24 directories, 12 files

рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдХрдорд╛рдВрдб CP рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рдмрд╛рд░ рдареАрдХ рдХрд░реЗрдВред

рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рдХреЛ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рдХрд░реВрдВрдЧрд╛, рдЗрд╕рдиреЗ рдЕрдирдЧрд┐рдирдд рд╡рд┐рдХрд╛рд╕ рдШрдВрдЯреЗ рдмрд░реНрдмрд╛рдж рдХрд┐рдП рд╣реЛрдВрдЧреЗ, рдпрд╣ рдЕрддреНрдпрдВрдд рдЧреИрд░-рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рд╣реИред

рдореБрдЭрд╕реЗ +1ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрд╡рдХреВрдлреА рднрд░рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ CP рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рдХрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдХрд░рддрд╛ рд╣реИ рдХрд┐ COPY рдХреИрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

"рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрддрддрд╛" рдПрдХ рдкреБрд▓рд┐рд╕ рдЕрдзрд┐рдХрд╛рд░реА рд╣реИ

рдЯреАрдПрд▓; рдбреАрдЖрд░ рд╕рдВрд╕реНрдХрд░рдг:

COPY * /app рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рдЬреЛ рдЖрдк рдЙрд╕рд╕реЗ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЯреНрд░реА рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп COPY . /app рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдХреЙрдкреА рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред

рдмрд╕ рдЗрд╕ рдкрд░ рдЕрдирдЧрд┐рдирдд рдШрдВрдЯреЗ рдмрд┐рддрд╛рдП... рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рднреА рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдореИрдВ Paket рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рд╕рд╣реА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

.
тФЬтФАтФА .paket/
тФВ   тФЬтФАтФА paket.exe
тФВ   тФЬтФАтФА paket.bootstrapper.exe
тФЬтФАтФА paket.dependencies
тФЬтФАтФА paket.lock
тФЬтФАтФА projectN/

рдФрд░ COPY *paket* ./ рдХрд░рдиреЗ рд╕реЗ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИ:

.
тФЬтФАтФА paket.dependencies
тФЬтФАтФА paket.lock

--glob рдпрд╛ --recursive рдзреНрд╡рдЬ рдХреЛ COPY рдФрд░ ADD рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдХреЙрдкреА рдХрд░реЗрдВред /рдЧрдВрддрд╡реНрдп рдЙрдк-рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддрд╛ рд╣реИред

рддреАрди рд╕рд╛рд▓ рдФрд░ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ: - /

рдХреНрдпрд╛ рд╣рдореЗрдВ рдИрдЯреАрдП рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдХрдм рддрдп рд╣реЛрдЧрд╛

рдореБрджреНрджрд╛ рдирд╣реАрдВ...
рдКрдкрд░ рд╕реЗ...
рдХреЙрдкреА рдХрд░реЗрдВред

рд╕рдЪ рд╣реИ, рдЖрдзреЗ рджрд┐рди рддрдХ рдзреВрдореНрд░рдкрд╛рди рдХрд░рдиреЗ рдФрд░ рдпрд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЕрдм рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЬрд╝рд░реВрд░ :)
рдЖрдЗрдП рд░рдЪрдирд╛рддреНрдордХ рдмрдиреЗрдВ,

image

рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ _COPY_ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП _CP_ рдХрдорд╛рдВрдб рдпрд╛ --recursive рдзреНрд╡рдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкрд╢реНрдЪ рд╕рдВрдЧрддрддрд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рд░рд╣реЗред

рд╢реАрд░реНрд╖ рдмрд┐рдВрджреБ рдпрджрд┐ рд╣рдо рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рднреА рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
Directory structure not preserved with COPY *, use CP or COPY . More here <link>. рдЕрдЧрд░ рд╣рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рджреБрд░реБрдкрдпреЛрдЧ рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИред

рдореИрдВ npm install рдХреИрд╢ рдХрд╛ рдмреЗрд╣рддрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб lerna package.json рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрдм рдирд┐рд░реНрднрд░рддрд╛ рдмрджрд▓рддреА рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдмрджрд▓реА рдЧрдИ рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИрдВред

рдРрд╕рд╛ рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛:

COPY ["package.json", "packages/*/package.json", "/app/"]

#29211 рд▓реЛрдЧреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рдХреЛ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИред

@zentby рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдпрд╣рд╛рдБ рд╣реИ, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╡рд╣рд╛рдБ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЪреВрдВрдХрд┐ рдпрд╣ рдмрдВрдж рд╣реИ) ... рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

COPY рдлрд╛рдЗрд▓реЛрдВ рдФрд░ RUN cp -R рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ

COPY files /tmp/
RUN cp -R /tmp/etc/* /etc/ && rm -rf /tmp/etc

рдпрд╣ @instabledesign рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ COPY рдХрдорд╛рдВрдб рдХреИрд╢ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдЕрд▓рдЧ рд╣реЛрддреА рд╣реИ рдЬреЛ рдХреИрд╢ рдХреЛ рдЕрдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВ рдХреЗрд╡рд▓ npm рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрдирд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдХреНрд╕рд░ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ)

рдХреИрд╢ рдХреЛ рд╡рд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреЗрд╡рд▓ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, *.sln рдФрд░ *.csproj рдлрд╝рд╛рдЗрд▓реЗрдВ рдбреЙрдЯрдиреЗрдЯ рдХреЛрд░ рдХреЗ рд▓рд┐рдП) рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдПрдХ рдХрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рдлрд╛рдЗрд▓реЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрдирдХреА рдЯрд╛рд░ рдмреЙрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдлрд┐рд░ рдбреЙрдХрд░ рдлрд╛рдЗрд▓ рдореЗрдВ рдЯрд╛рд░рдмреЙрд▓ рдЬреЛрдбрд╝реЗрдВред рд╣рд╛рдБ, рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдбреЙрдХрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдПрдХ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП...

рдмрд┐рд▓реНрдб.рд╢реЛ

#!/bin/bash

# unfortunately there's no easy way to copy just the *.sln and *.csproj (see https://github.com/moby/moby/issues/15858)
# so we generate a tar file containing the required files for the layer

find .. -name '*.csproj' -o -name 'Finomial.InternalServicesCore.sln' -o -name 'nuget.config' | sort | tar cf dotnet-restore.tar -T - 2> /dev/null

docker build -t finomial/iscore-build -f Dockerfile ..

рдбреЙрдХрд░ рдлрд╝рд╛рдЗрд▓

FROM microsoft/aspnetcore-build:2.0
WORKDIR /src

# set up a layer for dotnet restore 

ADD docker/dotnet-restore.tar ./

RUN dotnet restore

# now copy all the source and do the dotnet buld
COPY . ./

RUN dotnet publish --no-restore -c Release -o bin Finomial.InternalServicesCore.sln

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХрдИ COPY рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХрдИ рдЫрд╡рд┐ рдкрд░рддреЗрдВ рдмрдирд╛рдиреЗ рдФрд░ рдЖрдкрдХреЗ рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдЖрдХрд╛рд░ рдХреЛ рдлреВрд▓рдиреЗ рдХрд╛ рдиреБрдХрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЯреИрд░рдмреЙрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ docker build рдХрдорд╛рдВрдб рдХреЛ рднреА рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ ADD рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрдЯрд┐рд▓рддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ docker-compose build рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, COPY рдХреЛ POSIX рдЕрдиреБрд░реВрдк /bin/cp -r рдХрдорд╛рдВрдб рдХреА рддрд░рд╣ рд╣реА рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 'рдмреИрдХрд╡рд░реНрдб рд╕рдВрдЧрддрддрд╛' рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдиреБрднрд╡ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирдЬрд╛рди рд╣реИ * рдирд┐рдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВред


рдореБрдЭреЗ рдЬреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдордЭреМрддрд╛ рдорд┐рд▓рд╛ рд╣реИ, рд╡рд╣ рд╣реИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдорд▓реНрдЯреА-рд╕реНрдЯреЗрдЬ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:

FROM scratch as project_root
# Use COPY to move individual directories
# and WORKDIR to change directory
WORKDIR /
COPY ./file1 .
COPY ./dir1/ ./dir1/
COPY ./dir2/ .
WORKDIR /newDir
COPY ./file2 .

# The actual final build you end up using/pushing
# Node.js app as example
FROM node
WORKDIR /opt/app

COPY package.json .
RUN npm install

COPY --from=project_root / .
CMD ["npm", "start"]

рдпрд╣ рдПрдХ Dockerfile рдХреЗ рднреАрддрд░ рд╕реНрд╡рдпрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИ, рдФрд░ рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкрд░рдд рдмрдирд╛рддрд╛ рд╣реИ, рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ ADD project.tar рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдбреЙрдХрд░ рдмрд┐рд▓реНрдб рдХреИрд╢ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдкреВрд░реНрдг COPY рдХрдорд╛рдВрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред ROS рд╕рдореБрджрд╛рдп рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдиреЗрд╕реНрдЯреЗрдб рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА package.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИред рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдЕрдкрд╕реНрдЯреНрд░реАрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдХ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ package.xml рдлрд╝рд╛рдЗрд▓ рдЖрдзрд╛рд░рднреВрдд рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдкреИрдХреЗрдЬ рдореЗрдВ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдмрд╛рд░-рдмрд╛рд░ wrt рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЯреНрд░реА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рджреМрд░рд╛рди рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╣рдо рдХреИрд╢рд┐рдВрдЧ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рдбреЙрдХрдЯрд░ рдмрд┐рд▓реНрдб рдХреЗ рджреМрд░рд╛рди рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ:

# copy project dependency metadata
COPY ./**/package.xml /opt/ws/

# install step that fetches unsatisfied dependency
RUN dependency_manager install --workspace /opt/ws/

# copy the rest of the project's code
COPY ./ /opt/ws/

# compile code with cached dependencies
RUN build_tool build --workspace /opt/ws/

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдКрдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдкрд░рдд рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдХреЗрд╡рд▓ рддрднреА рдмрд╕реНрдЯ рд╣реЛрдЧрд╛ рдпрджрд┐ рдбреЗрд╡рд▓рдкрд░ рдШреЛрд╖рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдкреИрдХреЗрдЬ рдХреЗ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗрд╡рд▓ рд╕рдВрдХрд▓рди рдкрд░рдд рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрдЧрд╛ред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рд╕рднреА рдорд┐рд▓рд╛рди рдХреА рдЧрдИ package.xml рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдКрдкрд░ рдЧрдВрддрд╡реНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдореВрд▓ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдВрддрд┐рдо рдЧреНрд▓реЛрдм рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдХреЗрд╡рд▓ package.xml рд╣реИ рдЬреЛ рдЫрд╡рд┐ рдореЗрдВ рдмрдиреА рд╣реБрдИ рд╣реИред рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ! рдХреЙрдкреА рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдКрдкрд░ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреЛ рдЕрдВрддрддрдГ рдЫрд╡рд┐ рдореЗрдВ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИред

рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╣рд░ рд╕реНрдЯреИрдХ рдореЗрдВ рдПрдХ рдРрд╕рд╛ рджрд░реНрдж рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣рдо рдореЗрдВ рд╕реЗ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рд╢реАрд╢ред рдпрд╣ 2015 рд╕реЗ рдПрдХ рдореБрджреНрджрд╛ рд╣реИ! CP рдХреА рдПрдХ рдирдИ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рдмрд╣реБрдд рдХрдард┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдХрд┐ COPY рдХрдорд╛рдВрдб рдкрде рдорд┐рд▓рд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреЛрд▓рдВрдЧ рдЖрдВрддрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╛рдкрдХ-рдЕрдкрдирд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рдирдХ, рдЬреИрд╕реЗ рдЧреНрд▓реЛрдм

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдмрд┐рд▓реНрдбрдХрд┐рдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреНрд▓реЛрдмрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдкреА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдХреИрд╢рд┐рдВрдЧ рд╕рдЯреАрдХ рдпрд╛ рдордЬрдмреВрдд рди рд╣реЛ, рдпрд╣рд╛рдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/moby/moby/issues /39530#рдореБрджреНрджрд╛ рдЯрд┐рдкреНрдкрдгреА -530606189

рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд╣рдо рдЪреБрдирд┐рдВрджрд╛ рдЧреНрд▓реЛрдм рд╢реИрд▓реА рдкреНрд░рддрд┐рдпреЛрдВ рдкрд░ рдХреИрд╢ рдХрд░ рд╕рдХреЗрдВред

рдореБрдЭреЗ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП https://github.com/moby/moby/issues/15858#issuecomment -462017830 рдорд▓реНрдЯреА-рд╕реНрдЯреЗрдЬ рдмрд┐рд▓реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ, рдФрд░ рд╕реЛрдЪрд╛ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХрдИ рд╕рдорд╛рди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдХреИрд╢рд┐рдВрдЧ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдирд┐рд░реНрдорд╛рдг рд╕рдВрджрд░реНрдн рд╕реЗ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВред рдорд▓реНрдЯреА-рд╕реНрдЯреЗрдЬ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░/рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:

# Add prior stage to cache/copy from
FROM ubuntu AS package_cache

# Copy from build context
WORKDIR /tmp
COPY ./ ./src

# Filter or glob files to cache upon
RUN mkdir ./cache && cd ./src && \
    find ./ -name "package.xml" | \
      xargs cp --parents -t ../cache

# Continue with primary stage
FROM ubuntu

# copy project dependency metadata
COPY --from=package_cache /tmp/cache /opt/ws/

# install step that fetches unsatisfied dependency
RUN dependency_manager install --workspace /opt/ws/

# copy the rest of the project's code
COPY ./ /opt/ws/

# compile code with cached dependencies
RUN build_tool build --workspace /opt/ws/

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣рд╛рдВ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/ros-planning/navigation2/pull/1122

рдореИрдВ npm install рдХреИрд╢ рдХрд╛ рдмреЗрд╣рддрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб lerna package.json рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрдм рдирд┐рд░реНрднрд░рддрд╛ рдмрджрд▓рддреА рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдмрджрд▓реА рдЧрдИ рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИрдВред

рдРрд╕рд╛ рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛:

COPY ["package.json", "packages/*/package.json", "/app/"]

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред

рдореИрдВ npm install рдХреИрд╢ рдХрд╛ рдмреЗрд╣рддрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб lerna package.json рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрдм рдирд┐рд░реНрднрд░рддрд╛ рдмрджрд▓рддреА рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдмрджрд▓реА рдЧрдИ рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИрдВред

рдРрд╕рд╛ рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛:

COPY ["package.json", "packages/*/package.json", "/app/"]

рдпрд╣ рдорд╛рдорд▓рд╛ рд▓реЗрдХрд┐рди рдпрд╛рд░реНрди рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдПред

рдпрд╣ 2020 рд╣реИ рдФрд░ рдпрд╣ рдЕрднреА рднреА рддрдп рдирд╣реАрдВ рд╣реИред

рдЕрдЧрд░ рдХреЛрдИ рдбреЙрдЯрдиреЗрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдЗрд╕рд╕реЗ рдЬреВрдЭ рд░рд╣рд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдЗрд╕реЗ рдбреЙрдЯрдиреЗрдЯ рдХреЛрд░ рдЧреНрд▓реЛрдмрд▓ рдЯреВрд▓ рд▓рд┐рдЦрдХрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ *.csproj рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдпрд╣рд╛рдВ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЗрд╕ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рджреЗрдЦреЗрдВред

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

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

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

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

рдХреНрдпрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╡рд╣реА рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдЬреЛ https://github.com/moby/moby/issues/15858#issuecomment -532016362 рдиреЗ рд╕реБрдЭрд╛рдпрд╛ рд╣реИ рдФрд░ рдкреНрд░реАрдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд▓реНрдЯреА-рд╕реНрдЯреЗрдЬ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ dotnet restore рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рдкреИрдЯрд░реНрди рд╣реИ:

# Prefiltering stage using find -exec and cp --parents to copy out
# the project files in their proper directory structure.
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS dotnet-prep
COPY . ./src/
RUN mkdir ./proj && cd ./src && \
  find . -type f -a \( -iname "*.sln" -o -iname "*.csproj" \) \
    -exec cp --parents "{}" ../proj/ \;

# New build stage, independent cache
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS dotnet-build

# Copy only the project files with correct directory structure
# then restore packages
COPY --from=dotnet-prep ./proj ./src/
RUN dotnet restore

# Copy everything else
COPY --from=dotnet-prep ./src ./src/
# etc.

рдЕрднреА рднреА рдбреЙрдХрд░ рдХреЗ рд▓рд┐рдП COPY рдХрдорд╛рдВрдб рдкрд░ рдПрдХ рд╕рднреНрдп рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдмрд╣рд╛рдирд╛ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп, рд╕рдордЭрджрд╛рд░ рд╕рд┐рдВрдХрд┐рдВрдЧ рд╕реЗрдореЗрдиреНрдЯрд┐рдХреНрд╕ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред
рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ; рдкрд░ рдЖрдирд╛!

@rjgotten , рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ! рдореИрдВрдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рдЙрд╕рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдореИрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ рдореЗрд░реА рдЬрд╝рд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдореИрдВ рдЗрд╕реЗ рдХрд▓ рдЬрд╛рдиреЗ рджреВрдВрдЧрд╛ рдФрд░ рдЕрдЧрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдбреЙрдХреНрдЯрд░ рдХреЛ рдмрджрд▓ рджреВрдВрдЧрд╛ред

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

рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд/рджреЛрд╣рд░рд╛рдП рдЧрдП рд╕реЗ ... рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рд░рди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдкрд░рдд рдмрдирд╛рддрд╛ рд╣реИ, рд╣реИ рдирд╛? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реЛ, рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдХреБрдЫ рд╕рдордп рд╣реЛ рдЧрдпрд╛ рд╣реИ!

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрд╛рд╡рд░рд╢реЗрд▓ рдбреЙрдЯрдиреЗрдЯ рдХреЛрд░ рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рдкреВрд░реНрд╡-рд╕реНрдерд╛рдкрд┐рдд рд╣реИ ...

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИред рдЬреЛ рдЗрд╕реЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ред

рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд/рджреЛрд╣рд░рд╛рдП рдЧрдП рд╕реЗ ... рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

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

рджреВрд╕рд░рд╛ рдЪрд░рдг _only_ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХреЙрдкреА рдХрд░рдХреЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЬрдм рддрдХ рд╡реЗ рдлрд╛рдЗрд▓реЗрдВ рд╕рдорд╛рди рд╣реЛрддреА рд╣реИрдВ - рдпрд╛рдиреА рд╕рдорд╛рди рдлрд╛рдЗрд▓ рдирд╛рдо; рд╕рдорд╛рди рд╕рд╛рдордЧреНрд░реА; рдЖрджрд┐ - рдЙрд╕ рдкрд░рдд рдХреЛ рдмрдирд╛рддрд╛ рд╣реИ _рд╡реЛрдВрдЯ_ рдЕрдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ dotnet restore рдкрд░рдд _also_ рддрдм рддрдХ рдЕрдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛрдЧреА рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреАрдВред

рдЗрд╕рдХреЗ рд╕рд╛рде рдмреИрдардиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдерд╛ рдФрд░ рдЕрдм рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ! рдбреЙрдХрд░ рдордЬреЗрджрд╛рд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рддрдХ рдЖрдк рд╣рдореЗрд╢рд╛ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдордп рдирд╣реАрдВ рдмрд┐рддрд╛рддреЗ рд╣реИрдВ, рдЖрдк рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рдХрдорд╛рдВрдб рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ, рдореИрдВ рднреВрд▓ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд░рди cmd рдХреЗрд╡рд▓ рдбреЙрдХрд░ рдЫрд╡рд┐ рдХреЗ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рди рдХрд┐ рдирд┐рд░реНрдорд╛рдг рд╕рдВрджрд░реНрдн рдлрд╛рдЗрд▓реЛрдВ рдкрд░ред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдПрдХ рдЬрдЯрд┐рд▓ RUN cmd рдХрд░ рд╕рдХреЗрдВ, рдЬреЛ dirs рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рд╕рдм рдХреБрдЫ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдФрд░ рдЗрд╕реАрд▓рд┐рдП рд╣рдореЗрдВ рд╕рднреНрдп COPY рдЧреНрд▓реЛрдмрд┐рдВрдЧ рдХреА рд╕рдЦреНрдд рдЬрд░реВрд░рдд рд╣реИ!

рд╡рд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рд╛рд░рдВрднрд┐рдХ COPY cmd рд╣реИ, _everything_ рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдпрд╣ .sln рдФрд░ .csproj рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ /proj рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓ рд░рд╣рд╛ рд╣реИред рдХреЛрдИ рднреА рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдЗрди рдЪрд░рдгреЛрдВ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░ рджреЗрдЧрд╛ред рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ, рдпрд╣ рдЬрд┐рд╕ рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рднрдпрд╛рдирдХ RUN linux cmd рдХреЗрд╡рд▓ рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ _on docker image рдкрд╣рд▓реЗ рд╕реЗ рд╣реА, рд▓рд╛рд▓рдЪреА COPY рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд▓рд╛рдпрд╛ рдЧрдпрд╛ред

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

рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдбреЙрдЯрдиреЗрдЯ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ COPY рдЖрджреЗрд╢реЛрдВ рдХреА рдХреАрдордд рдкрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдмрд┐рд▓реНрдб рдЪрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рднреА .csproj рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдбреАрдЖрдИрдЖрд░ рдореЗрдВ рд╕рдорддрд▓ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдлрд┐рд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ .sln рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рд╣реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдмрд╛рдж рд╣реА рдореИрдВ рд╕рднреА src рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рднреА src рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдкрд░рддреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХреИрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдЯреЗрдХрдЕрд╡реЗ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЗ рдХреЛрдбрдмреЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд┐рддрдирд╛ рдкреНрд░рднрд╛рд╡реА рд╣реИред рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдПрдХ рдореЛрдиреЛ рд░реЗрдкреЛ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд╛рдЭрд╛ рдХреЛрдб рд╣реИрдВ рдЬреЛ "рд╕рднреА рд╕реНрд░реЛрдд рдУрд╡рд░" рдХреЙрдкреА рдореЗрдВ рдХреЙрдкреА рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред .dockerignore рдпрд╣рд╛рдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрд╕ рдХреЙрдкреА рдореЗрдВ рдмрд╣реБрдд "рд▓рд╛рд▓рдЪреА" рд╣реИрдВ; рддреЛ рдпрд╣ рдХрд╛рдлреА рдзреАрдорд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рд╢рд╛рдпрдж рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рддреЗрдЬрд╝ рд╣реЛрдЧрд╛ред

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЕрднреА рднреА рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣ рдмрд╛рддрдЪреАрдд рд╣рд╛рд╣рд╛ рднреА рдХрд░рдиреА рд╣реИред рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрдм рдЖрд╕рд╛рди рд╣реИ, рдореБрдЭреЗ рдЕрднреА рднреА рдирдИ рдмрд┐рд▓реНрдбрдХрд┐рдЯ рд╕рд╛рдордЧреНрд░реА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдФрд░ рдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ рд╣реИ?

рдмрд┐рд▓реНрдбрдХрд┐рдЯ рдЬрд╛рдВрдЪ
RUN --mount=type=bind - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдлреИрдВрд╕реА linux cmd рдХреЛ рдмрд┐рд▓реНрдб рд╕рдВрджрд░реНрдн рдХреЗ рд╡рд┐рд░реБрджреНрдз рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ ( RUN рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдЫрд╡рд┐ рдХреЗ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рддрдХ рд╕реАрдорд┐рдд рд╣реИ)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪреВрдХ рдХрд░рддрд╛ рд╣реИред

RUN --mount=type=cache - рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреИрд╢ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ (рдбреЙрдХрд░ рдмрд┐рд▓реНрдб рдХреЗ рдмреАрдЪ?) рдЬреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИ? рддреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╣рдореЗрдВ рдкреИрдХреЗрдЬ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдкрд░рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХреИрд╢ рдХреЗ рд╕рд╛рде рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реЛ рдЬрд╛рдПрдЧрд╛ !?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рддрдХ рдареАрдХ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ "рдмрдВрдж" рд╣реИ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдХрд╛рдордХрд╛рдЬ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬрдм рдЖрдк рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд▓реЛрдЧ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреНрдпреЛрдВ рдЬрд╛рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдХрдВрдЯреЗрдирд░ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрддрдиреЗ рд╕рд╛рд▓реЛрдВ рдХреЗ рдмрд╛рдж рднреА рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ? рдХреНрдпрд╛ рдбреЙрдХрд░ рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ, рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдХреЙрдкреА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ cp -r рдЬреИрд╕рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрд░реНрдерд▓реА рдореЗрдВ рдПрдХ COPY --dir рд╡рд┐рдХрд▓реНрдк рд╣реИред рд╢рд╛рдпрдж рдЗрд╕реЗ Dockerfile рдореЗрдВ рднреА рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

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

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build

# Nugets restore
WORKDIR /src/allprojects          # just temporary storage for .csproj files
COPY */*.csproj ./
RUN for file in $(ls *.csproj); do dotnet restore ${file}; done

# Build/Publish
WORKDIR /src/solution             # actual folder with source code and full hierarchy 
COPY . .
RUN dotnet publish "MyProject/MyProject.csproj" -c Release -o /bublish/myproject

# Run Application
FROM mcr.microsoft.com/dotnet/core/runtime:3.1 AS base
WORKDIR /app
COPY --from=build /bublish/myproject .
ENTRYPOINT ["dotnet", "MyProject.dll"]

@zatuliveter
рдЫреВрдЯреА рд╣реБрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдлрд╝реЛрд▓реНрдбрд░ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдирд╣реАрдВ; рдХрд┐ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ред рдФрд░ рдпрд╣рд╛рдБ рдХреНрдпреЛрдВ рд╣реИ:

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

рдпрджрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬрд┐рди рдкрд░ рдЖрдк рдкреИрдХреЗрдЬ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдирд┐рдореНрди dotnet build рдпрд╛ dotnet publish рд╕реЗ рднрд┐рдиреНрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╣реИрдВ, рддреЛ рд╡реЗ рдЖрджреЗрд╢ рдкреИрдХреЗрдЬ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗред

рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреВрд░реА рддрд░рд╣ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ dotnet publish рдФрд░ dotnet build рджреЛрдиреЛрдВ рдХрд╛ рдЕрд░реНрде рд╣реИ dotnet restore ред рд╡реЗ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЕрдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдкреИрдХреЗрдЬреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдСрди-рдж-рдлреНрд▓рд╛рдИ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ --no-restore рдзреНрд╡рдЬ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдЖрдк рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдЬреЛ рдХрд░ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рд╕рдВрдХреБрд▓ _TWICE_ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдкрд╣рд▓реА рдмрд╛рд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рдордп рдФрд░ рд╕реНрдерд╛рди рдХреА рдПрдХ рдмрдбрд╝реА рдмрд░реНрдмрд╛рджреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реА рдмрд╛рд░, publish рдХрдорд╛рдВрдб рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╣рд┐рдд, рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ; рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕реА рдкрд░рдд рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬреЛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкреНрд░рдХрд╛рд╢рди рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ, рдЖрдкрдХреЗ рдкреИрдХреЗрдЬ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХреИрд╢ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

@rjgotten ,
рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рднреА рдирдЧреЗрдЯ рдкреИрдХреЗрдЬ 'рдмрд┐рд▓реНрдб' рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ global-packages рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреИрд╢ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ /root/.nuget/packages/ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ, рдФрд░ obj рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЗрд╕ рд╡реИрд╢реНрд╡рд┐рдХ рднрдВрдбрд╛рд░рдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЫреЛрдЯреА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рднрдВрдбрд╛рд░рдг рдХреА рдХреЛрдИ рдмрд░реНрдмрд╛рджреА рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ)ред
рджреВрд╕рд░рд╛ рдХрдо рд╕реЗ рдХрдо x10 рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдирдЧреЗрдЯреНрд╕ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреИрд╢ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

@zatuliveter @rjgotten рдпрд╣рд╛рдБ рдЕрдВрдд рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ рдореЗрдВ рднрд╛рдЧ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд dockerfile рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ред рдмреИрд╢ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЗрд░рд╛ рдордЬрдмреВрдд рд╕реВрдЯ рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭ рдкрд░ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдУ! рд╣рдорд╛рд░реА рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рд╕рдВрд░рдЪрдирд╛ Project/Project.csproj рд╣реИред рдпрд╣ рд╕рднреА рдкреНрд░реЛрдЬ рдлрд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд/рдкреНрд░рддрд┐рд▓рд┐рдкрд┐/рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ./*/*.csproj ./proj/
RUN for file in $(ls ./proj); do mkdir /src/${file%.*} && mv ./proj/${file} /src/${file%.*}/${file}; done
RUN dotnet restore "MyProject/MyProject.csproj"
COPY . .
WORKDIR "/src/MyProject"
RUN dotnet publish "MyProject.csproj" -c Release -o /app --no-restore
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

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