рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг:
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
рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо
рдкрд░рд┐рдгрд╛рдореА рдЫрд╡рд┐ рдореЗрдВ рд╕рдВрджрд░реНрдн рд╕реЗ рд╕рдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
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
рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдХреЙрдкреА рдХрд░реЗрдВред /рдЧрдВрддрд╡реНрдп рдЙрдк-рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддрд╛ рд╣реИред
рддреАрди рд╕рд╛рд▓ рдФрд░ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ: - /
рдХреНрдпрд╛ рд╣рдореЗрдВ рдИрдЯреАрдП рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдХрдм рддрдп рд╣реЛрдЧрд╛
рдореБрджреНрджрд╛ рдирд╣реАрдВ...
рдКрдкрд░ рд╕реЗ...
рдХреЙрдкреА рдХрд░реЗрдВред
рд╕рдЪ рд╣реИ, рдЖрдзреЗ рджрд┐рди рддрдХ рдзреВрдореНрд░рдкрд╛рди рдХрд░рдиреЗ рдФрд░ рдпрд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЕрдм рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЬрд╝рд░реВрд░ :)
рдЖрдЗрдП рд░рдЪрдирд╛рддреНрдордХ рдмрдиреЗрдВ,
рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ _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
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдХрдорд╛рдВрдб CP рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рдмрд╛рд░ рдареАрдХ рдХрд░реЗрдВред