åé¡ã®èª¬æïŒ
Dockerfile
COPY
$ã䜿çšããã°ããã䜿çšããŠãã¡ã€ã«ãšãã©ã«ããŒãã³ããŒããå Žåã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
ç°å¢ã®è©³çŽ°ïŒ
docker-machineã§æ§ç¯ãããOSX / wboot2dockerã§ã®ããŒã«ã«ã»ããã¢ãã
åçŸæ¹æ³ïŒ
ç°å¢
$ tree
.
âââ Dockerfile
âââ files
âââ dir
â  âââ dirfile1
â  âââ dirfile2
â  âââ dirfile3
âââ file1
âââ file2
âââ file3
Dockerfile
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第2ã¬ãã«ã®ãã£ã¬ã¯ããªã¯ãäœããã®çç±ã§ç¬¬1ã¬ãã«ã®ãã£ã¬ã¯ããªãšããŠæ±ãããå¿
èŠããããŸããïŒ
ã°ãŒã°ã«ã®å ŽåïŒCOPY * / srcã§åé¡ãçºçããå Žåã¯ãCOPY / / srcãè©ŠããŠãã ããã
@jfchevretteç§ã¯ããããªãèµ·ãã£ãŠããã®ãç¥ã£ãŠãããšæããŸãã
COPY files/* /test/
ãããããã¯COPY files/dir files/file1 files/file2 files/file /test/
ãŸãã ãããåã
ã®COPYã³ãã³ãïŒããšãã°ã COPY files/dir /test/
ïŒã«åå²ãããšãïŒè¯ããæªããïŒCOPYãåargdirã®å
容ãå®å
dirã«ã³ããŒããããšãããããŸãã arg dirèªäœã§ã¯ãªããå
容ã§ãã ããªãã第3ã¬ãã«ã®dirsãè¿œå ããå Žåãç§ã¯ããããåºå·ããã«éããªãã
COPYããããã¬ãã«ã®ãã£ã¬ã¯ããªãä¿æããªããšããäºå®ã«ç§ã¯ããããããŠããŸããããããã¯ãã°ããã®éãã®ããã«ãªã£ãŠããŸãã
å¯èœã§ããã°ãsrcããªãŒã®1ã€äžã®ã¬ãã«ãã³ããŒããããšã§ããããããã»ã©èŠçã«ããªãããã«ããããšãã§ããŸãã
@duglinãæ£ãããšç¢ºä¿¡ããŠããããã®åäœãå€æŽããããšã¯éåžžã«å±éºã§ãã å€ãã®dockerfileã¯ãæå³ããªããã®ãå£ããããåã«ã³ããŒãããããå¯èœæ§ããããŸãã
ãã ããé·æçã«ã¯ãã³ããŒãcpãrsyncãªã©ã®ããŒã«ããã©ã«ããŒã®ã°ãããšæ«å°Ÿã®ã¹ã©ãã·ã¥ãåŠçããæ¹æ³ã«åŸã£ãŠããæ¹ããããšç§ã¯äž»åŒµããŸãã COPYãdir / *ã«äžèŽãããµããã©ã«ããŒããå®å IMOã«ãã¡ã€ã«ãã³ããŒããããšã¯çµ¶å¯Ÿã«æåŸ ãããŠããŸããã
@jfchevretteãã-ããããä¿®æ£ãããå¿
èŠãããæåã®ãã£ã³ã¹ã
ä»ã®ãšãããããéããŸã...
@duglinã ãããéãããšããããšã¯ä¿®æ£ãããªããšããããšã§ããïŒ
@tugberkugurluãããå°ãªããšãä»ã®ãšããã¯ã ãã«ãã€ã³ãã©ã¹ãã©ã¯ãã£å šäœãããçŽãäœæ¥ãé²è¡äžã§ããããããè¡ããšãã¯ãCOPYïŒãŸãã¯ãã®æ°ããåçã®ãã®ïŒãé©åã«åäœãããããšãã§ããŸãã
@duglinããããšãã ãã®åé¡ãéãããŸãŸã«ããŠãããã§ã¹ããŒã¿ã¹ãæŽæ°ããããšã¯å¯èœã§ããïŒ ãããšããç§ã賌èªã§ããä»ã®åé¡ã¯ãããŸããïŒ
@tugberkugurlu ãã¯ã©ã€ã¢ã³ãåŽãã«ããŒã®ãµããŒããã«åé¡ããããšæããŸããããèŠã€ãããªãããã§ãã ã€ãŸããROADMAPïŒhttps://github.com/docker/docker/blob/master/ROADMAP.md#22-dockerfile-syntaxïŒãèšãããšã ãã§ãã
åé¡ãæªè§£æ±ºã®ãŸãŸã«ããŠããããšã«é¢ããŠã¯ãç§ãã¡ã¯ãããã§ããªããšæããŸãã DockerãåŸã£ãŠããäžè¬çãªã«ãŒã«ã¯ãããã«å®è¡ã§ããªãåé¡ããã¹ãŠéããããšã§ãã å°æ¥ã®äœæ¥ã®ããã®åé¡ã¯ãéåžžãåé¡ã«å¯ŸããŠäœããã®ã¢ã¯ã·ã§ã³ïŒPRïŒãå®è¡ã§ããããã«ç¶æ³ãå€åãããšãéããããåéãããŸãã
@duglinããã¯éåžžã«æ·±å»ãªåé¡ã§ãããã®åé¡ã¯ã0.1ãªãªãŒã¹ã§çºçãããããåã«éããå¿ èŠã¯ãããŸããã ããã2.0ãªãªãŒã¹ã®ã¿ãŒã²ããã«ããæ¹ãé©åã§ãïŒãã€ã«ã¹ããŒã³ã¯githubã«ããããŸãïŒã
ç§ã¯ã»ãšãã©ã®äººã䜿çšãããšæããŸãïŒ
COPY . /app
.gitignore
å
ã®ä»ã®ãã¹ãŠã®ãã©ã«ãããã©ãã¯ãªã¹ãã«ç»é²ããããåäžã¬ãã«ã®ãã£ã¬ã¯ããªæ§é ãæã¡ãå®éã«ã¯mv
ã»ãã³ãã£ã¯ã¹ãæã€$ COPY
ã䜿çšããŸãã
COPY src /myapp
誰ããå®éã«ãã£ã¬ã¯ããªæ§é ããã©ããåããããã«COPY
ã䜿çšããããšãæ³åããã®ã¯éåžžã«é£ããã§ãã ããã«å¯Ÿããä»ã®åé¿çã¯ã tar -cf .. & ADD tarfile.tar.gz
ã䜿çšããããšã§ãã å°ãªããšããããå€æŽããããšã¯æ¬åœã«åœ¹ã«ç«ã¡ãŸãã ãã1ã€ã¯ããã£ã¬ã¯ããªåCOPY src /src
ãšCOPY src/ /src
ïŒçŸåšã¯å®å
šã«ç¡èŠãããŠããŸãïŒã®ã¹ã©ãã·ã¥ãå°éããããšã§ãã
ãã°ãªã³ã¯2015幎9æ1æ¥ã«ãããéããŸãã
@duglinããã¯ã°ãããŠè
¹ç«ãããåé¡ã§ãããéããã¹ãã§ã¯ãããŸããã COPY
ã³ãã³ãã¯ãææžåããã䜿çšæ³ãšäŸãšã¯ç¹ã«äžèŽããªãåäœãããŸãã
@tjwebbæªè§£æ±ºã®åé¡https://github.com/docker/docker/issues/29211ããŸã ãããŸãã ããã¯ãå®å
šã«äžäœäºææ§ã®ãããããä¿®æ£ããæ¹æ³ãããå Žåã«ã®ã¿èª¿ã¹ãããšãã§ããŸãã ãããã©ã®ããã«å®è£
ã§ããããšããææ¡ãããã°ãç§ãã¡ã¯ææ¡ãåãå
¥ããŸãïŒããããªãããããããªãããããèªç±ã«æžããŠããã®åé¡ã«ãªã³ã¯ããææ¡ãéããŠãã ããïŒã 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
OS XïŒ
.
âââ 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
Ubuntuã®å ŽåïŒ/ bin / shïŒ
.
|-- 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ã ããã¯æ¬åœã«ã°ãããæ¯ãèãã§ãããCOPYãæã€ã¹ãæ¹æ³ãå®è¡ããCPã³ãã³ããè¿œå ããã ãã§ç°¡åã«ä¿®æ£ã§ããŸãã
ãäžäœäºææ§ãã¯èŠå®ã§ã
TL; DRããŒãžã§ã³ïŒ
COPY * /app
ã䜿çšããªãã§ãã ãããæåŸ
ã©ããã®åäœãããŸããã
ãã£ã¬ã¯ããªããªãŒãä¿æããã«ã¯ã代ããã«COPY . /app
ã䜿çšããŠãã ããã
COPYã¯ããã®ãµããã©ã«ããŒã®ã¿ãã³ããŒã§ããŸãã
ããã«æ°ãåããªãã»ã©ã®æéãè²»ãããã ãã§ã...ãªãããããã®ããã«æ©èœããã®ã§ããïŒ
ç§ã¯Paketã䜿çšããŠãããæ£ããæ§é ã§ä»¥äžãã³ããŒããããšæããŸãã
.
âââ .paket/
â âââ paket.exe
â âââ paket.bootstrapper.exe
âââ paket.dependencies
âââ paket.lock
âââ projectN/
ãããŠã COPY *paket* ./
ãå®è¡ãããšãã³ã³ããå
ã§æ¬¡ã®ããã«ãªããŸãã
.
âââ paket.dependencies
âââ paket.lock
COPY
ãšADD
ã«--glob
ãŸãã¯--recursive
ãã©ã°ãè¿œå ããã®ã¯ã©ãã§ããïŒ
ã³ã㌠ã / destinationã¯ãµããã©ã«ããŒãä¿æããŸãã
3幎ãšããã¯ãŸã åé¡ã§ãïŒ-/
ãããä¿®æ£ããããšãã«ãETAãååŸã§ããŸããïŒ
åé¡ãªã...
äžãã...
ã³ã㌠ã
確ãã«ãåæ¥çºç
ããŠããã«ãã©ãçããåŸã¯ããã¯ãåé¡ã§ã¯ãããŸããã ãã¡ãã ïŒïŒ
建èšçã«ãªããŸãããã
_COPY_ãžã®æ°ãã_CP_ã³ãã³ããŸãã¯--recursive
ãã©ã°ãæ¬åœã«å¿
èŠãªã®ã§ãäžäœäºææ§ãç¶æãããŸãã
次ã®ããã«ãã€ã¡ãŒãžãã«ãã«é¢ããèŠåã衚瀺ããå Žåã®ãã€ã³ãïŒ
誀çšã®å¯èœæ§ãæ€åºããå Žåã¯Directory structure not preserved with COPY *, use CP or COPY . More here <link>.
ã
ãµããã£ã¬ã¯ããªå
ã®ãã¹ããããlernapackage.jsonãã¡ã€ã«ãã³ããŒããŠãäŸåé¢ä¿ãå€æŽãããå Žåã«ã®ã¿ããªã¬ãŒããnpm install
ãã£ãã·ã¥ãããæå¹ã«æŽ»çšããããã«ããããæ¢ããŠããŸãã çŸåšãå€æŽããããã¹ãŠã®ãã¡ã€ã«ã«ãããäŸåé¢ä¿ãåã€ã³ã¹ããŒã«ãããŸãã
ãã®ãããªãã®ã¯çŽ æŽãããã§ãããïŒ
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
COPYã³ãã³ãã¯ããã£ãã·ã¥ãç¡å¹ã«ãã¹ãã§ã¯ãªããã¡ã€ã«ãç°ãªãå Žåã«ãã£ãã·ã¥ãç Žæ£ããããã @ instabledesignã§ã¯æ©èœããŸããïŒããšãã°ãnpmäŸåé¢ä¿ã®ã€ã³ã¹ããŒã«ã«é¢é£ãããã¡ã€ã«ã®ã¿ãã³ããŒãããã®ã§ãé »ç¹ã«ã¯å€æŽãããŸããïŒ
ãŸãããã¡ã€ã«ã®ã»ããïŒç§ã®å Žåã¯ãdotnetcoreã®* .slnãã¡ã€ã«ãš* .csprojãã¡ã€ã«ïŒã ããéãã£ãã·ã¥ã«ã³ããŒããå¿ èŠããããŸããã åé¿çã®1ã€ã¯ãå¿ èŠãªãã¡ã€ã«ã ãã®tarããŒã«ãäœæããŠãããDockerãã¡ã€ã«ã«tarããŒã«ãè¿œå ããããšã§ãã ãããDockerãã¡ã€ã«ã«å ããŠã·ã§ã«ã¹ã¯ãªãããå¿ èŠã§ã...
build.sh
#!/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 ..
Dockerãã¡ã€ã«
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
ã³ãã³ãã䜿çšããŠãããè¡ãããšãã§ããŸãããè€æ°ã®ç»åã¬ã€ã€ãŒãäœæããæçµçãªç»åãµã€ãºãè¥å€§åããããšããæ¬ ç¹ããããŸãã
äžèšã®kayjteaã®ããã«ã docker build
ã³ãã³ãããã«ããŒãã«ãã¹ã¯ãªããã§ã©ããããŠããã£ã¬ã¯ããªæ§é ãä¿æããtarballãäœæããããããADD
ã§äœæããããšãã§ããŸãããããã«ããè€éããå¢ãã docker-compose build
ã®ãããªãã®ãå£ããŸãã
å®éã COPY
ã¯POSIXæºæ ã®/bin/cp -r
ã³ãã³ããšåãããã«æ©èœããã¯ãã§ãããçŸåšã®åäœã¯çµéšã®ãã人ã«ãšã£ãŠã¯å®å
šã«çŽæçã§ã¯ãããŸãããããäžäœäºææ§ãã§ã¯èµ·ãããªãããã§ãã * nixã·ã¹ãã ã§ã
ç§ãèŠã€ããæåã®åŠ¥åç¹ã¯ãããã¯ãšããŠå€æ®µéãã«ãã䜿çšããããšã§ãã
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"]
ããã¯1ã€ã®Dockerfileå
ã«èªå·±å®çµããŠããã ADD project.tar
ãæ©èœããã®ãšåãããã«ãæçµçãªã€ã¡ãŒãžã«1ã€ã®ã¬ã€ã€ãŒã®ã¿ãäœæããŸãã
å®å
šãªCOPY
ã³ãã³ãããããšãDockerãã«ããã£ãã·ã¥ãä¿æããããšãããšãã«éåžžã«åœ¹ç«ã¡ãŸãã ROSã³ãã¥ããã£ã¯ãããã±ãŒãžã®ãã¹ããããã¯ãŒã¯ã¹ããŒã¹ã䜿çšããŠéçºãããåããã±ãŒãžã¯ç¬èªã®package.xml
ãã¡ã€ã«ã§äŸåé¢ä¿ã宣èšããŸãã ãããã®ãã¡ã€ã«ã¯ãäŸåé¢ä¿ãããŒãžã£ãŒãã¢ããã¹ããªãŒã ã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããããã«äœ¿çšããŸãã ãããã®package.xml
ãã¡ã€ã«ã¯ãåºç€ãèšå®ããããšãããã±ãŒãžèªäœã®ã³ãŒãã«æ¯èŒçãŸãã«ããå€æŽãããŸããã ã³ããŒäžã«ãã£ã¬ã¯ããªããªãŒæ§é ãä¿æãããŠããå Žåã¯ãDockerã®ãã«ãäžã«ã¯ãŒã¯ã¹ããŒã¹ã2段éã§ã³ããŒããã ãã§ããã£ãã·ã¥ãæ倧åã§ããŸãã
# 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ã³ãã³ãããglobã®ãããªå®éã«åºãæ¡çšãããŠããæšæºã§ã¯ãªãããã¹ãããã³ã°ã«golangå éšé¢æ°ã䜿çšããã®ã¯éåžžã«é¢åãªåäœã§ãã
å®éšçãªãã«ããããæ§æã®åé¿çã䜿çšããŠã°ããã³ãä»ããŠã³ããŒãããå Žåã¯ããã£ãã·ã¥ãããã»ã©æ£ç¢ºãŸãã¯å ç¢ã§ãªããŠããããã®ã³ã¡ã³ããåç §ããŠãã ããïŒ https ïŒ//github.com/moby/moby/issues
éžæçãªã°ããã¹ã¿ã€ã«ã®ã³ããŒããã£ãã·ã¥ã§ããããã«ããã®åé¡ãå床éããŠã»ãããšæããŸãã
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
ãµããã£ã¬ã¯ããªå ã®ãã¹ããããlernapackage.jsonãã¡ã€ã«ãã³ããŒããŠãäŸåé¢ä¿ãå€æŽãããå Žåã«ã®ã¿ããªã¬ãŒãã
npm install
ãã£ãã·ã¥ãããæå¹ã«æŽ»çšããããã«ããããæ¢ããŠããŸãã çŸåšãå€æŽããããã¹ãŠã®ãã¡ã€ã«ã«ãããäŸåé¢ä¿ãåã€ã³ã¹ããŒã«ãããŸãããã®ãããªãã®ã¯çŽ æŽãããã§ãããïŒ
COPY ["package.json", "packages/*/package.json", "/app/"]
ãŸã£ããåããŠãŒã¹ã±ãŒã¹ãæã£ãŠããimã
ãµããã£ã¬ã¯ããªå ã®ãã¹ããããlernapackage.jsonãã¡ã€ã«ãã³ããŒããŠãäŸåé¢ä¿ãå€æŽãããå Žåã«ã®ã¿ããªã¬ãŒãã
npm install
ãã£ãã·ã¥ãããæå¹ã«æŽ»çšããããã«ããããæ¢ããŠããŸãã çŸåšãå€æŽããããã¹ãŠã®ãã¡ã€ã«ã«ãããäŸåé¢ä¿ãåã€ã³ã¹ããŒã«ãããŸãããã®ãããªãã®ã¯çŽ æŽãããã§ãããïŒ
COPY ["package.json", "packages/*/package.json", "/app/"]
ãã®å Žåã§ãããYarnã¯ãŒã¯ã¹ããŒã¹çšã§ãã
2020幎ã§ãããããã¯ãŸã ä¿®æ£ãããŠããŸããã
誰ããdotnetèšå®ã§ããã«èŠåŽããŠããå Žåã¯ã*ãcsprojãã¡ã€ã«ã®ãã£ã¬ã¯ããªæ§é ã埩å ããŠåŸ©å ãå®è¡ã§ããdotnetã³ã¢ã°ããŒãã«ããŒã«ãäœæããããšã§è§£æ±ºããŸããã ããã§ãããè¡ãæ¹æ³ã«ã€ããŠã®ããã¥ã¡ã³ããåç §ããŠãã ããã
åèãŸã§ã«ãçè«çã«ã¯ä»ã®èšå®ã§ãåæ§ã®ã¢ãããŒãã䜿çšã§ããŸãããåºæ¬çã«ããŒã«ã¯ãã©ã«ããŒæ§é ããªããŒã¹ãšã³ãžãã¢ãªã³ã°ãããããããšãã°lernaãyarnã¯ãŒã¯ã¹ããŒã¹ã®ã»ããã¢ãããã©ãã»ã©ç°¡åãå¯èœãã¯ããããŸããã èå³ãããã°èª¿æ»ããŠãã ããã 人ã ãdotnetã³ã¢ã©ã³ã¿ã€ã ãã€ã³ã¹ããŒã«ããŠåäœãããããšãã§ããã°ãåãããŒã«ã§ãå¯èœã§ããå¯èœæ§ããããŸããããã§ãªãå Žåã¯ãããŒããªã©ãæ°ããäŸåé¢ä¿ãå¿ èŠãšããªãèšèªã§åãã¢ãããŒããæ§ç¯ããå¿ èŠããããŸããç§ã¯æšæž¬ããã
ã³ããŒã³ãã³ãã®å®è£ ãæåã®å¹Žã®åŠçã®ä»äºã§ãã£ãããšã¯é©ãã¹ãããšã§ãããä»ã§ã¯é·å¹Žã®çµéšãæã€çç·Žããããã°ã©ããŒã«ãšã£ãŠã¯è€éãããŸã...
ããã¯ãããããããŸã§ã§æãæ¥ãããããã°ã§ã¯ãããŸããããåºåãªãã§é·å¹Žã®è°è«ãç¶ããŠããããšãèæ ®ãããšã確ãã«ãããã«ãªããŸãã
@benmccallum
åèãŸã§ã«ãçè«çã«ã¯ä»ã®èšå®ã§ãåæ§ã®ã¢ãããŒãã䜿çšã§ããŸãããåºæ¬çã«ããŒã«ã¯ãã©ã«ãæ§é ããªããŒã¹ãšã³ãžãã¢ãªã³ã°ããŸãã
ã»ãšãã©ã®å Žåã 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.
ããã§ããDockerãCOPY
ã³ãã³ãã«ãéåžžã®æ£åžžãªåæã»ãã³ãã£ã¯ã¹ã«åŸã£ãé©åãªããªã¢ã³ããå®è£
ããããšããªããšããé©åãªèšãèš³ã«ã¯ãªããŸããã
ã€ãŸã; æ¥ãŠïŒ
@rjgotten ãç§ã¯ããã奜ãã§ãïŒ ç¢ºãã«ç§ããã£ãããšãããã¯ããã«ç°¡åã§ããªããããç§ã®ããŒãºã«åããªãã®ãããããŸããã ææ¥è©ŠããŠã¿ãŸãããããããŸããã£ãããããè¯ãã¢ãããŒããšããŠãããæšå¥šããããã«ããã¥ã¡ã³ããå€æŽããŸãã
ç§ã®æåã®åé¡ã¯ç§ãWindowsã䜿çšããŠããããšã ã£ããšæãã®ã§ããããããã®ææ¡ãåŽäžããŸããã ç§ã¯ããããŸããããå®å šãæãããã«åçã®WindowsããŒãžã§ã³ã¯ãããŸããïŒ PowerShellãdotnetã³ã¢ã€ã¡ãŒãžã«ããªã€ã³ã¹ããŒã«ãããŠããã®ã ããã...
è¿œå ã®/ç¹°ãè¿ãããFROMã®å¿ èŠæ§ã¯æ¬åœã«ãããŸãã...ãããïŒ RUNãå®è¡ãããã³ã«ããã£ãã·ã¥çšã®æ°ããã¬ã€ã€ãŒãäœæãããŸãããïŒ äœãã足ããªãã®ãããããŸããããããã«ã€ããŠèããªããã°ãªããªãã£ãã®ã¯ä¹ ãã¶ãã§ãïŒ
PowerShellãdotnetã³ã¢ã€ã¡ãŒãžã«ããªã€ã³ã¹ããŒã«ãããŠããã®ã ããã...
å®ã¯ããã ãšæããŸãã ããã«ãããã¯ãã¹ãã©ãããã©ãŒã ã®æ¹æ³ã§ãããè¡ãã®ãå°ãç°¡åã«ãªããŸãã
è¿œå ã®/ç¹°ãè¿ãããFROMã®å¿ èŠæ§ã¯æ¬åœã«ãããŸãã...ãããïŒ
åé¢ããããã«ãã¹ããŒãžã¯ãç¬ç«ããã¬ã€ã€ãŒãã£ãã·ã³ã°ãååŸããŸãã
æåã®æ®µéã§æºåäœæ¥ãè¡ããŸãã æåã¯ãã¹ãŠãã³ããŒããå¿
èŠãããããã_any_ãã¡ã€ã«ãå€æŽããããšãåžžã«æåã®ã¬ã€ã€ãŒã®ãã£ãã·ã¥ãç¡å¹ã«ãªãããã®åŸã®ã¬ã€ã€ãŒãç¡å¹ã«ãªããŸãã ããããããã¯_ãã®ãã«ãã¹ããŒãžå
ã®_ã¬ã€ã€ãŒã«ã®ã¿åœãŠã¯ãŸããŸãã
第2段éã¯ããããžã§ã¯ãé¢é£ã®ãã¡ã€ã«ã_ã®ã¿_ã³ããŒããããšããå§ãŸãããããã®ãã¡ã€ã«ãåãã§ããéããã€ãŸãåããã¡ã€ã«åã§ããéãã åãã³ã³ãã³ã; ãªã©-ãã«ãéã§ããã®ã¬ã€ã€ãŒã¯ç¡å¹ã«ãªããŸããã ã€ãŸãããããã®ãããžã§ã¯ããã¡ã€ã«ãå®éã«å€æŽãããªãéãã dotnet restore
ã¬ã€ã€ãŒãç¡å¹ã«ãªããŸããã
ãããšäžç·ã«åº§ãæéããããŸããããããŠç§ã¯ä»ç解ããŠããŸãïŒ Dockerã¯æ¥œãããã®ã§ããåžžã«æéãè²»ãããªãéãããã¹ãŠã®ã³ãã³ããã©ã®ããã«æ©èœããããå¿ããŠããŸãããã§ãã éèŠãªã®ã¯ãRUNã³ãã³ããDockerã€ã¡ãŒãžã®ãã¡ã€ã«ã·ã¹ãã ã§ã®ã¿æ©èœãããã«ãã³ã³ããã¹ããã¡ã€ã«ã§ã¯æ©èœããªãããšãå¿ããŠããããšã§ãã ãããã£ãŠãdirsãä¿æããè€éãªRUNã³ãã³ããå®è¡ããåã«ããã¹ãŠãã³ããŒããå¿ èŠããããŸãã ãããŠãããç§ãã¡ããŸãšããªCOPYã°ããã³ã°ãåå®ã«å¿ èŠãšããŠããçç±ã§ãïŒ
ãã®ã¢ãããŒã
æåã®COPYcmdã¯ããã£ãããããã«ã_everything_ãã³ããŒããŠããã.slnãã¡ã€ã«ãš.csprojãã¡ã€ã«ãå¥ã®/ projãã©ã«ããŒã«åŒãåºããŸãã ã³ãŒããå€æŽãããšããããã®æé ãç¡å¹ã«ãªããŸãã éèŠãªã®ã¯ããããåé¿ããŠããå¶éã¯ãçŽ æŽãããRUN
linux cmdãã以åã®è²ªæ¬²ãªCOPYã«ãã£ãŠãããããã_dockerã€ã¡ãŒãžäžã®_ãã¡ã€ã«ã«å¯ŸããŠã®ã¿æäœã§ããããšã§ãã
次ã«ãæ°ããã¹ããŒãžãéå§ããã/ projãã©ã«ããŒã®å
容ãã³ããŒããã dotnet restore
ã§äœ¿çšã§ããããã«ãªããŸãã ãã£ãã·ã¥ã®ãããŒãã¯æ¬è³ªçã«ãã¡ã€ã«ããã·ã¥ã§ãããããããã«ãã£ãŠãã®ãã£ãã·ã¥ã¬ã€ã€ãŒãç Žå£ãããããšã¯ãã£ãã«ãªããåŸç¶ã®dotnet restore
å±€ãç Žå£ãããªããããã³ã¹ãã®ããã埩å
ãåé¿ã§ããŸãã è¯ãïŒ
ç§ã®ã¢ãããŒã
ããããããã®åŸ©å
ã«åœ±é¿ãäžãããã¡ã€ã«ãåŒãç¶ãããã«ãããã«ããã€ãã®COPYã³ãã³ããç ç²ã«ããŠãããã«1ã€ã®ãã«ãã¹ããŒãžã®ã¿ã䜿çšããŸãã å
·äœçã«ã¯ããã¹ãŠã®.csprojãã¡ã€ã«ã1ã€ã®ãã£ã¬ã¯ããªã«ãã©ããåããã°ããŒãã«ããŒã«ã䜿çšããŠããšã³ããªã®.slnãã¡ã€ã«ããé©åãªãã£ã¬ã¯ããªæ§é ãåæ§ç¯ããŸãã ãã¹ãŠã®srcãã¡ã€ã«ãã³ããŒããã®ã¯ãã®åŸã ããªã®ã§ãåžžã«ãã¹ãŠã®srcãã¡ã€ã«ãåãã£ãŠã³ããŒããå¿
èŠã¯ãªãããããŸã§ã®ã¬ã€ã€ãŒãå®æçã«å¹æçã«ãã£ãã·ã¥ã§ããŸãã
èŠç¹
ããããã®ã¢ãããŒããã©ãã»ã©å¹æçãã¯ã人ã
ã®ã³ãŒãããŒã¹ã«äŸåãããšæããŸãã ç§ãã¡ã®å Žåãã¢ãã¬ããžããªã«ã¯ãããã¹ãŠã®srcoverãCOPYã§ã³ããŒãããå€ãã®å
±æã³ãŒãããããŸãã .dockerignoreã¯ããã§åœ¹ç«ã¡ãŸãããç¶æããã®ãé£ããã®ã§ããã®COPYã§ã¯ããªãã貪欲ãã§ãã ãšãŠãé
ãã§ãã ãã®ãããç§ã®ã¢ãããŒãã¯å°ãè€éã§ããããããããã®ä»£æ¿æ¡ãããé«éã§ãã
説æããŠãããŠããããšãã ãŸã ãã®äŒè©±ãããªããã°ãªããªããªããŠä¿¡ããããŸããã ãããä»ããç°¡åãã©ããã確èªããããã«ãæ°ããBuildKitã®ãã®ã調æ»ããå¿ èŠããããŸãã ä»ã®èª°ãããããããŸãããïŒ
BuildKitã®èª¿æ»
RUN --mount=type=bind
-ãã®ããã«èãããŸãããããã«ããããã«ãã³ã³ããã¹ãã«å¯ŸããŠæŽŸæãªLinux cmdãå®è¡ã§ããŸãïŒ RUN
ãã€ã¡ãŒãžã®ãã¡ã€ã«ã·ã¹ãã ã«éå®ãããã ãã§ã¯ãããŸããïŒã å®éãããã©ã«ãã§ãã«ãã³ã³ããã¹ãã«ãªã£ãŠããããã§ãã
RUN --mount=type=cache
-ä¿åãããŠããããçš®ã®åå©çšå¯èœãªãã£ãã·ã¥ãã£ã¬ã¯ããªïŒdockerãã«ãéïŒïŒã®ããã«èãããŸããïŒ ã€ãŸããæ¬è³ªçã«ã¯ãããã±ãŒãžã埩å
ããããã®ãã£ãã·ã¥ã¬ã€ã€ãŒã«ã€ããŠããŸãå¿é
ããå¿
èŠã¯ãããŸããã以åã«åŸ©å
ãããããã±ãŒãžã®åå©çšããããã£ãã·ã¥ã䜿çšãããšããã§ã«ã¯ããã«é«éã«ãªãããã§ãã
ãã®åé¡ã¯ãã¯ããŒãºããããŠãããåé¿çã«æ £ããŠããããããŸã ä¿®æ£ãããŠããªããšæããŸãã
ãªã人ã ãä»ã®çš®é¡ã®ã³ã³ããã«ç§»åããåŸåãããã®ãââç解ã§ããªããšãã
ä»ã«äœ¿ãã容åšã¿ã€ãã¯ãããŸããïŒ ãããäœå¹Žãçµã£ãŠããµããŒããããŠããªããªããŠä¿¡ããããŸãããïŒ dockerã¯ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ããïŒèª°ããä¿®æ£ããŠããããŸããïŒ
Earthlyã«ã¯COPY --dir
ãªãã·ã§ã³ããããã³ããŒãcp -r
ã®ããã«åäœãããããšãã§ããŸãã ãããããããã¯Dockerfileã«ã移æ€ã§ããŸããïŒ
.netã³ã¢ã¢ããªã±ãŒã·ã§ã³ã®ã€ã¡ãŒãžã®æ§ç¯ãé«éåããã«ã¯ã埩å ããããã¹ãŠã®nugetããã±ãŒãžãå«ãäžéã³ã³ãããŒãäœæããå¿ èŠããããŸãã ãã«ããããžã§ã¯ããœãªã¥ãŒã·ã§ã³ã§ã¯ããã®åé¿çã䜿çšããŸããã ãã¹ãŠã®ãããžã§ã¯ããã¡ã€ã«ã1ã€ã®ãã©ã«ããŒã«ã³ããŒããããããã«å¯ŸããŠdotnetrestoreãå®è¡ããŸããã ãã©ã«ãéå±€ãä¿æã§ããªãããããããžã§ã¯ãã®æ¬ èœã«ã€ããŠããã€ãã®èŠåããããŸãããããã§ã解決çã¯æ©èœããŠããŸãã
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 Coreã¯ãããã±ãŒãžã®ã¡ã¿æ
å ±ãåãããžã§ã¯ãã«é¢é£ä»ãããã./obj
ãµããã£ã¬ã¯ããªã«æ ŒçŽããŸãã ãã®æ
å ±ãååšããªãå Žåãããã±ãŒãžã¯ã€ã³ã¹ããŒã«ãããŠäœ¿çšã§ããç¶æ
ã§ãããšã¯èŠãªãããŸããã ïŒç§ãä¿¡ããŠã¯ãããŸãããïŒæ¬¡ã«ã ./obj
ãã©ã«ããŒãç Žæ£ããŠãããããšãã°VSCodeã§ãããžã§ã¯ããéããããã±ãŒãžã®åŸ©å
ãåå®è¡ããããã«æ±ããããã®ã確èªããŠãã ãããã©ãããè©ŠããŠã¿ãŠãã ãããïŒ
ããã±ãŒãžã®åŸ©å
ãå®è¡ãããããžã§ã¯ããã¡ã€ã«ã次ã®dotnet build
ãŸãã¯dotnet publish
ãšã¯ç°ãªããã£ã¬ã¯ããªæ§é ã«ããå Žåããããã®ã³ãã³ãã¯ããã±ãŒãžã埩å
ããããšã¯èŠãªããŸããã
ãœãªã¥ãŒã·ã§ã³ãå®å
šã«å€±æããªãçç±ã¯ã dotnet publish
ãšdotnet build
ã®äž¡æ¹ãdotnet restore
ãæå³ããããã§ãã 埩å
ãããŠããªãããã±ãŒãžãç©æ¥µçã«ãã§ãã¯ãããªã³ã¶ãã©ã€ã§åŸ©å
ããŸãã 圌ãããããè¡ãã®ãé¿ããããã«ãããªãã¯ç©æ¥µçã«ããªããããŠããªã--no-restore
ãã©ã°ãæž¡ãå¿
èŠããããŸãã
ã€ãŸããå®éã«ã¯ããœãªã¥ãŒã·ã§ã³ãå®è¡ããŠããã®ã¯ãããã±ãŒãž_TWICE_ã埩å
ããããšã§ãã ååã¯ãåå©çšããããã®æ£ãããã£ã¬ã¯ããªæ§é ã«å
¥ããªããããæ¬è³ªçã«æéãšã¹ããŒã¹ã®å€§ããªæµªè²»ã§ãã 2åç®ã¯ã publish
ã³ãã³ãã®äžéšãšããŠæé»çã«æ©èœããŸãã ãã ããããã¯ãã«ããšå
¬éã®æäœãšåãã¬ã€ã€ãŒã®äžéšã§ãããããã³ãŒãã®å€æŽãšã¯å¥ã«ããã±ãŒãžãå®éã«ãã£ãã·ã¥ãããããšã¯ãããŸããã
@rjgotten ã
ãè¿ä¿¡ãšã説æããããšãããããŸãã
å®éããã¹ãŠã®nugetããã±ãŒãžã¯ããbuildãdockerã³ã³ãããŒã®global-packages
ãã©ã«ããŒã«ãã£ãã·ã¥ãããŸãã ç§ã®å Žåãããã¯/root/.nuget/packages/
ãã©ã«ããŒã§ããã obj
ãã©ã«ããŒã«ã¯ããã®ã°ããŒãã«ã¹ãã¬ãŒãžãžã®åç
§ãå«ãå°ããªãã¡ã€ã«ãå«ãŸããŠããã ããªã®ã§ãïŒãã£ãããããã«ïŒã¹ãã¬ãŒãžãç¡é§ã«ããããšã¯ãããŸããã
ãã¹ãŠã®nugetãã³ã³ããã«ãã£ãã·ã¥ããããããå
¬éäžã®2åç®ã®åŸ©å
ã¯å°ãªããšãx10åéããªããŸãïŒç§ã®å ŽåïŒã
@ zatuliveter @ rjgottenããã®æåŸã«ããæ
å ±ã«æè¬ããŸãã ç§ã¯åæ§ã®åé¡ã«ééããããªããäžããäŸãæ¹åããããã«æ¬¡ã®dockerfileãæãã€ããã ããã·ã¥ã¯ç¢ºãã«ç§ã®åŒ·ãã¹ãŒãã§ã¯ãªãã®ã§ãç§ã«æ°æ¥œã«è¡ã£ãŠãã ããïŒ ç§ãã¡ã®æ§é ã¯ããã¹ãŠã®ãããžã§ã¯ãã§Project/Project.csproj
ã§ãã ããã«ããããã¹ãŠã®projãã¡ã€ã«ãã³ããŒãããæ£ããå Žæã«ç§»åãããŠããã埩å
/ãã¹ãŠã®ã³ããŒ/å
¬éãå®è¡ãããŸãã
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ãäœæããä»åºŠã¯æ£ããååŸããŠãã ããã