์ปจํ ์คํธ ๋๋ ํ ๋ฆฌ์ _part_๋ฅผ ์ปจํ ์ด๋์ ๋ณต์ฌํด์ผ ํฉ๋๋ค(๋ค๋ฅธ ๋ถ๋ถ์ ๋ค๋ฅธ COPY์ ๋์์ด ๋จ). ๋ถํํ๋ ์ด์ ๋ํ ํ์ฌ ๊ฐ๋ฅ์ฑ์ ์ฐจ์ ์ฑ ์ ๋๋ค.
https://docs.docker.com/reference/builder/#dockerignore -file ์ฐธ์กฐ
ํ๋ก์ ํธ ๋ฃจํธ์ .dockerignore ํ์ผ์ ํญ๋ชฉ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
.dockerignore๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ์์ต๋๋ค. ๋ด๊ฐ ์ด ๊ฒ์ฒ๋ผ "๋ค๋ฅธ ๋ถ๋ถ์ ๋ค๋ฅธ COPY์ ๋์์ ๋๋ค".
๋ค๋ฅธ ์ฌ๋ณธ์ ๊ธฐ๋ฐ์ผ๋ก ์กฐ๊ฑด๋ถ๋ก ๋ณต์ฌํ์๊ฒ ์ต๋๊น?
์ปจํ ์คํธ์๋ ๋ง์ ๋๋ ํฐ๋ฆฌ A1...A10๊ณผ ๋๋ ํฐ๋ฆฌ B๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. A1...A10์๋ ํ๋์ ๋์์ด ์๊ณ B์๋ ๋ค๋ฅธ ๋์์ด ์์ต๋๋ค.
COPY A1 /some/where/A1/
COPY A2 /some/where/A2/
...
COPY A10 /some/where/A10/
COPY B some/where/else/B/
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ด์ํฉ๋๋ค.
์ด๋ค ๋ถ๋ถ์ด ์ด์ํฉ๋๊น? ๋ชจ๋ ๊ฐ๋ณ์ ์ผ๋ก ๋์ดํ์๊ฒ ์ต๋๊น?
COPY A* /some/where/
COPY B /some/where/else/
์๋ํฉ๋๊น?
A1..A10, B๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง์์ต๋๋ค. ๊ฒ๋ค๊ฐ COPY A* ...
๋ ๋๋ ํ ๋ฆฌ์ _contents_๋ฅผ ํจ๊ป ๋์ง๋๋ค.
๋ด๊ฐ ์ธ์ ํ๋ ๋ช ๊ฐ์ง ์ต์ ์ด ์์ง๋ง ๋ชจ๋ ์ด์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์๋ ๊ฒ์๋ฌผ์์ ์ธ ๊ฐ์ง๋ฅผ ์ธ๊ธํ์ต๋๋ค. ๋ค ๋ฒ์งธ ์ต์ ์ ์์ค ์ฝ๋๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ฌ๋ฐฐ์ดํ์ฌ A1..A10์ด ์ ๋๋ ํ ๋ฆฌ A๋ก ์ด๋๋๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ์ถ๊ฐ ์ค์ฒฉ ์์ค์ด ์ํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ํ์ํ์ง ์๊ธฐ๋ฅผ ๋ฐ๋๊ณ ํ์ฌ ๋๊ตฌ๊ฐ ํ์ํ์ต๋๋ค. ํน๋ณํ ๊ฒฝ์ฐ ๋ด ๋ํน ๋ ํ๋ก์ ํธ.
(BTW, #6094(๋ค์ ์ฌ๋ณผ๋ฆญ ๋งํฌ)๊ฐ ์ด ๊ฒฝ์ฐ์ ๋์์ด ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ถ๋ช ํ ์ด๊ฒ์ ์ต์ ๋ ์๋๋๋ค.)
@bronger if COPY
๊ฐ cp
์ ๋๊ฐ์ด ์๋ํ๋ฉด ์ฌ์ฉ ์ฌ๋ก๊ฐ ํด๊ฒฐ๋ฉ๋๊น?
์ ๊ฐ 100% ์ดํดํ๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
@duglin ์ด ๋ณผ ์ ์์ต๋๋ค.
@bronger @cpuguy83 ์ด ์ฌ๋ฐ๋ฅธ ์ง๋ฌธ์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. 'cp'๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ด๋ป๊ฒ ํด๊ฒฐํ์๊ฒ ์ต๋๊น? ๋๋ 'cp'์์ ์ด๋ค ์ข ๋ฅ์ ์ ์ธ ์ต์ ์ ๋ณด์์ง๋ง ์์์ฐจ๋ฆฌ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ '๋์ปค ๋น๋' ๋ฐ์์๋ ์ด๊ฒ์ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
cp ๋์์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ํฉ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
COPY ["A1", ... "A10", "/some/where/"]
"A11" ๋๋ ํ ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ฉด ๊ทธ ์ค์ ์๊ฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ๊ฐ๋ฒผ์ด ์ ์ง ๊ด๋ฆฌ ๋ฌธ์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋ฐ์ ๋ค์ผ ์ ์์ต๋๋ค.
๊ฒ๋ค๊ฐ cp๋ ์ ์ธํ ํ์๊ฐ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ๋ณต์ฌํ๊ณ ์ํ์ง ์๋ ๋ถ๋ถ์ ์ ๊ฑฐํ๋ ๊ฒ์ ๋ณต์ฌ ์์ฒด ์ธ์๋ ์ฑ๋ฅ์ ๊ฑฐ์ ์ํฅ์ ๋ฏธ์น์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. docker์ COPY๋ฅผ ์ฌ์ฉํ๋ฉด B๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์บ์๊ฐ ์๋ชป ๋ฌดํจํ๋๊ณ ์ด๋ฏธ์ง๊ฐ ๋ ์ปค์ง๋๋ค.
@bronger ๋น์ ์ด ํ ์ ์๋ ์ผ:
COPY a b c d /some/where
๋น์ ์ด ์ ์ํ ๊ฒ์ฒ๋ผ.
$ COPY ...
RUN rm ...
๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ ์ถ๊ฐ ๋ ์ด์ด๊ฐ ์์ง๋ง ์ฌ์ ํ ์บ์๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. ์ด๋ก ์ธํด ์บ์ ๋๋ฝ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์๋ ค์ฃผ์๋ฉด ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ์ง๋ง
COPY a b c d /some/where/
/some/where/{a,b,c,d} ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋๋ ๋์ abcd ๋๋ ํ ๋ฆฌ์ ๋ด์ฉ์ ํจ๊ป ๋ณต์ฌํฉ๋๋ค. src ๋๋ ํ ๋ฆฌ์ ์ฌ๋์๊ฐ ์ถ๊ฐ๋ rsync์ฒ๋ผ ์๋ํฉ๋๋ค. ๋ฐ๋ผ์ _four_ ์ง์นจ
COPY a /some/where/a/
COPY b /some/where/b/
COPY c /some/where/c/
COPY d /some/where/d/
ํ์ํฉ๋๋ค.
์บ์๋ ... ๋ผ๊ณ ํ๋ฉด
COPY . /some/where/
RUN rm -Rf /some/where/e
e๊ฐ ์์ ์ ํจ๊ณผ์ ์ผ๋ก ํฌํจ๋์ง๋ ์์ง๋ง e๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์บ์๊ฐ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
@bronger ๋ค, ์ฌํ๊ฒ๋ ๋น์ ์ด ๋ง์ต๋๋ค. --exclude zzz
ํ๋๊ทธ ์ ํ์ ์ถ๊ฐํ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง https://github.com/docker/docker/blob/master/ROADMAP.md#22 -dockerfile-syntax์ ๋ฐ๋ผ ๋ง์ ๊ฒ์ ์ป์ง ๋ชปํ ์ ์์ต๋๋ค. ์ง๊ธ ๊ฒฌ์ธ.
๊ทธ๋ด ์ ์์ง. ๊ทธ๋ฐ ๋ค์ ๋น๋ถ๊ฐ COPY+rm์ ์ฌ์ฉํ๊ณ FixMe ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค. ์๊ฐ ๋ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
๊ทธ๋ฅ :+1: ์ด ๋ฌธ์ . ๋๋ COPY๊ฐ rsync์ ํํ ์ฌ๋์ ์๋ฏธ ์ฒด๊ณ๋ฅผ ๋ฐ์ํ์ง ์๋ ๊ฒ์ ์ ๊ธฐ์ ์ผ๋ก ์ ๊ฐ์ค๋ฝ๊ฒ ์๊ฐํฉ๋๋ค. ์ด๋ ๋จ์ผ ๋ช ๋ น๋ฌธ์์ ์ฌ๋ฌ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณต์ฌํ ์ ์์์ ์๋ฏธํ๋ฉฐ, ์ด๋ ๊ณ์ธต ํ์ฐ์ผ๋ก ์ด์ด์ง๋๋ค.
๋๋ ํ๋๋ฅผ ์ ์ธํ๊ณ ๋ง์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณต์ฌํ๋ ค๋ ๊ฒฝ์ฐ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ ํฉ๋๋ค(๋ค๋ฅธ ๋ ์ด์ด ๋ฌดํจํ ํจ๊ณผ๋ฅผ ์ํ๊ธฐ ๋๋ฌธ์ ๋์ค์ ๋ณต์ฌํ ์์ ). ๋ฐ๋ผ์ --exclude
๋ ์ ์ฉํ ๊ฒ์
๋๋ค.
๋ํ man rsync
๋ถํฐ:
A trailing slash on the source changes this behavior to avoid creating
an additional directory level at the destination. You can think of a
trailing / on a source as meaning "copy the contents of this directory"
as opposed to "copy the directory by name", but in both cases the
attributes of the containing directory are transferred to the containโ
ing directory on the destination. In other words, each of the followโ
ing commands copies the files in the same way, including their setting
of the attributes of /dest/foo:
rsync -av /src/foo /dest
rsync -av /src/foo/ /dest/foo
๋๋ ๋ง์ ์ผ์ Dockerfile
s๋ฅผ ๊นจ๋จ๋ฆฌ์ง ์๊ณ ๋ ๋ณ๊ฒฝํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ตฌ์ฒด์ ์ธ ์๋ก ๋ค์๊ณผ ๊ฐ์ ๋๋ ํ ๋ฆฌ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
/vendor
/part1
/part2
/part3
/...
/partN
๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ์ํฉ๋๋ค.
COPY /vendor /docker/vendor
RUN /vendor/build
COPY /part1 /part2 ... /partN /docker/ # copy directories part1-N to /docker/part{1..N}/
RUN /docker/build1-N.sh
๋ฐ๋ผ์ part1-N์ /vendor
๋น๋๋ฅผ ๋ฌดํจํํ์ง ์์ต๋๋ค. (/vendor๋ part1-N์ ๋นํด ๊ฑฐ์ ์
๋ฐ์ดํธ๋์ง ์๊ธฐ ๋๋ฌธ์).
์ด์ ์ part1-N์ ์์ฒด ๋๋ ํ ๋ฆฌ์ ๋ฃ์ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์ด ์์ต๋๋ค.
/vendor
/src/part1-N
๊ทธ๋ฌ๋ ๋๋ ๋ํ ๊ทธ๋ ๊ฒ ์ฝ๊ฒ ์ฌ๋ฐฐ์ดํ ์์ ๊ฐ ์๋ ํ๋ก์ ํธ์์ ์ด ๋ฌธ์ ์ ์ง๋ฉดํ์ต๋๋ค.
@praller์ ์ข์ ์์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํด ์์ต๋๋ค. ์ฃผ์ ๋ฌธ์ ๋ Go์ filepath.Match๊ฐ ์ ๊ท ํํ์์ ๋นํด ๋ง์ ์ฐฝ์์ฑ์ ํ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค(์ฆ, ์ํฐ ํจํด ์์).
๋๋ ์ด๊ฒ์ ๋ํ ์ฝ๊ฐ์ ๊ท ์ด ๋ธ๋ ์ธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๊ฐํด ๋์ต๋๋ค. COPY๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ ์ธํ ์ ์์ง๋ง ADD _can_ tgz๋ฅผ ํ์ฅํฉ๋๋ค.
ํ๋์ ์ถ๊ฐ ๋น๋ ๋จ๊ณ์
๋๋ค.
tar --exclude='./deferred_copy' -czf all_but_deferred.tgz .
๋์ปค ๋น๋ ...
๊ทธ๋ฐ ๋ค์ Dockerfile์์:
์ถ๊ฐ ./all_but_deferred.tgz /application_dir/
.. ๊ฑฐ์ ๋ณ๊ฒฝ๋์ง ์๋ ๋ ์ด์ด์ ๋ด์ฉ ..
์ถ๊ฐํ๋ค . /์์ฉ ํ๋ก๊ทธ๋จ ๋๋ ํ ๋ฆฌ/
.. ์์ฃผ ๋ณ๊ฒฝ๋๋ ๋ ์ด์ด์ ๋ด์ฉ
์ด๋ ํฌํจ/์ ์ธ๋ฅผ ์๋ํ๋ ๋ญ๋น๋๋ ๋ ์ด์ด ์์ด ํฌํจ/์ ์ธ/๋ฌด์์ด๋ tar์ ์ ์ฒด ๊ตฌ๋ฌธ์ ์ ๊ณตํฉ๋๋ค.
@jason-kane ์ด๊ฒ์ ์ข์ ํธ๋ฆญ์
๋๋ค. ๊ณต์ ํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ํ ๊ฐ์ง ์์ ์ : z
(gzip) ํ๋๊ทธ๋ฅผ tar
์ ์ถ๊ฐํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. sha256 ์ฒดํฌ์ฌ ๊ฐ์ ๋ณ๊ฒฝํ์ฌ Docker ์บ์๋ฅผ ๋ฌดํจํํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ด ์ ๊ทผ ๋ฐฉ์์ด ์ ์๊ฒ ํจ๊ณผ์ ์
๋๋ค.
์ด ๋ฌธ์ ์ ๋ํด +1, ๋ง์ glob ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ง์ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ง์๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ค์์ node_modules
๋ฅผ ์ ์ธํ ๋ชจ๋ ํญ๋ชฉ์ ๋ณต์ฌํ๋ ์ ์์
๋๋ค.
COPY . /app -node_modules/
์ ๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฒช์๋๋ฐ Java ์น ์ ํ๋ฆฌ์ผ์ด์
์ด ์ฝ 900MB์ด์ง๋ง ๊ทธ ์ค ๊ฑฐ์ 80%๊ฐ ๊ฑฐ์ ๋ณ๊ฒฝ๋์ง ์์ ๋ ๊ณ ํต์ค๋ฝ์ต๋๋ค.
๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ ์ด๊ธฐ ์ํ์ด๊ณ ํด๋ ๊ตฌ์กฐ๊ฐ ๋ค์ ์์ ์ ์ด๋ฏ๋ก ์บ์๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก 6-7 COPY ๋ ์ด์ด๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ์ ๊ฒฝ ์ฐ์ง ์์ง๋ง ์ ์ ๋ ๋ง์ ํ์ผ๊ณผ ๋๋ ํฐ๋ฆฌ๊ฐ ์ถ๊ฐ๋๋ค
๐
docker cp
์ ์ฌ์ฉํ๋๋ผ๋ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ํ ํด๋๋ฅผ ์ ์ธํ ํด๋์ ๋ชจ๋ ํ์ผ์ ๋ณต์ฌํ๊ณ ์ถ์ต๋๋ค.
์ฌ๊ธฐ์ ๋๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. git repo๋ฅผ ๋ณต์ฌํ๊ณ .git ๋๋ ํ ๋ฆฌ๋ฅผ ์ ์ธํ๊ณ ์ถ์ต๋๋ค.
@oaxlin ์ด๋ฅผ ์ํด .dockerignore ํ์ผ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
@antoineco ์ ๋ง ํจ๊ณผ ๊ฐ ์์๊น์? ์๋ํ ์ง ์ค๋๋์์ง๋ง ์ ์ด๋ ๋น์์๋ .dockerignore
๊ฐ docker cp
์ ํจ๊ป ์๋ํ์ง ์์๋ค๊ณ ํ์ ํฉ๋๋ค.
@kkozmic-seek ์ ๋์ ์ผ๋ก ํ์คํฉ๋๋ค :) ํ์ง๋ง ์ธ๊ธํ์ docker cp
CLI ํ์ ๋ช
๋ น์ Dockerfile์์ ๋ฐ๊ฒฌ๋ COPY
๋ช
๋ น๋ฌธ๊ณผ ๋ค๋ฅด๋ฉฐ, ์ด๋ ์ด ๋ฌธ์ ์ ๋ฒ์์
๋๋ค.
docker cp
๋ ์ค์ ๋ก Dockerfile ๋ฐ . dockerignore ํ์ง๋ง ๋ค๋ฅธ ํํธ์ผ๋ก๋ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๋ฐ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
์ด๊ฒ๋ ์ ๋ง ์ํฉ๋๋ค - ๋น๋ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ๋น๋์ ์ด์ ๋ถ๋ถ์์ ์ผ๋ถ ํด๋๋ฅผ ๋ณต์ฌํ ๋ค์ ์บ์๊ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค ...
์ ์ค ์ผ์ด์ค๊ฐ ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง COPY๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ ์ ์ ์ธํ ํ์ผ์ ๋ง์ง์ง ์์ต๋๊น?
RUN touch /app/node_modules
COPY . /app
RUN rm /app/node_modules
AFAIK COPY
๋ ํ์ผ์ ๋ฎ์ด์ฐ์ง ์์ผ๋ฏ๋ก ์ด๊ฒ์ด ์๋ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฃ์กํฉ๋๋ค. COPY
๊ฐ ์ค์ ๋ก ํ์ผ์ ๋ฎ์ด์ฐ๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. ์ ๋ ์ด์ npm์ด ์ค์นํ ๋ค์ COPY . /usr/src/app
ํ๋ https://nodejs.org/en/docs/guides/nodejs-docker-webapp/ ์ ์ฝ๊ฐ ์์ํดํฉ๋๋ค. node_modules
๋์ปค๊ฐ ๋ฌด์๋๋ค๊ณ ๊ฐ์ ํฉ๋๊น? ๋ฐ๋ฉด์ COPY_NO_OVERWRITE
(๋ ๋์ ์ด๋ฆ ํ์) ๋ช
๋ น์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณต์ฌํ๋ ๋์ ํ์ผ์ ๋ฌด์ํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค(๋ฌด์ํ๋ ค๋ ํญ๋ชฉ์ ๋ํด ๋น ํ์ผ/๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ผ ํจ).
FWIW, ๋๋ ์ด๊ฒ์ด ๋งค์ฐ ์ถ์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ค๋ฅธ ํดํน ์๋ฃจ์ ์ ์ฐพ์์ต๋๋ค.
ํ๋ก์ ํธ ๊ตฌ์กฐ ์์:
์ฑ/
๊ตฌ์ฑ/
์คํฌ๋ฆฝํธ/
ํฌ๊ธฐ/
๊ณต์ /
...
์ฐ๋ฆฌ๋ ๋ค์์ ์ํฉ๋๋ค:
ํดํน ์๋ฃจ์
:
ADD ./static /home/app
ADD ["./[^s^a]*", "./s[^t]*", "/home/app/"]
ADD ./app /home/app
๋ ๋ฒ์งธ ADD๋ "./st " ๋ฐ "./a"๋ฅผ ์ ์ธํ๊ณ ๋ชจ๋ ๋ณต์ฌ์ ๋์ผํฉ๋๋ค.
๊ฐ์ ์ ์ํ ์์ด๋์ด๊ฐ ์์ต๋๊น?
๋๊ธ ์ํ๋?
๐
๐
๐
๐
.gitignore์ ๊ฐ์ ๋ฐฉ์์ผ๋ก .dockerignore ํ์ผ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
@mirestrepo ์ด ๋ฌธ์ ์ ๋ํ ์ฒ์ ๋ ๊ฐ์ง ํ์ ์กฐ์น๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
ํ์ฌ ์ด๊ฒ์ C#/dotnet ๊ฐ๋ฐ์ ๋ํ ์์ฒญ๋ ์ฑ๋ฅ ์ ํ์ ๋๋ค.
๋ด๊ฐ ์ํ๋ ๊ฒ:
์ด์ ๋ด๊ฐ ์ ์ธํ๊ณ ๋ชจ๋ ๊ฒ์ ๋ณต์ฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ (์ฝ๊ฒ) ๊ฐ๋ฅํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐ๋ผ์ dll์ด ์ด์ค์ผ๋ก ๋ณต์ฌ๋์ด ๋์ปค ํ์ผ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํ๊ฑฐ๋ ๋ชจ๋ ๊ฒ์ด ํ๋์ ๋ ์ด์ด์ ๋ณต์ฌ๋ฉ๋๋ค.
์ธ๋ถ dll์ด ์บ์๋๋ ๋์ ๋งค๋ฒ ๋ณต์ฌ๋๊ธฐ ๋๋ฌธ์ ๋์ค์ ๋ฉ๊ฐ ๋ํ๊ฐ ๋ฉ๋๋ค.
@adresdvila ๋ด๊ฐ ๊ทธ๊ฒ์ ๋๋ ์ ์์๋ solutoin์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค:
COPY ["[^M][^y]*","/app/"]
COPY ./My* /app/
์ด๊ฒ์ ์ฌ์ ํ โโ.json ํ์ผ์ด ์ฒซ ๋ฒ์งธ ๋ช ๋ น์์ ๋ณต์ฌ๋๋ค๋ ๋ฌธ์ ๋ฅผ ๋จ๊น๋๋ค.
@antoineco ๋๋ถ์ ์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค. ๋ ์ด์ .git ๋๋ ํ ๋ฆฌ๋ฅผ ๋์ปค ์ด๋ฏธ์ง์ ๋ณต์ฌํ์ง ์์ต๋๋ค.
์ด๊ฒ์ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ๊ทน์ ์ผ๋ก ๊ฐ์ ํ๊ณ ๋ด ์ด๋ฏธ์ง๋ฅผ ๋์ปค ์บ์ฑ ์์คํ ์ ํจ์ฌ ๋ ์น์ํ๊ฒ ๋ง๋ญ๋๋ค.
๋๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋๋จธ์ง ํ์ผ๋ณด๋ค ๋จผ์ ๋ณต์ฌํ๋ ค๋ ํฐ ํ์ผ์ด ์์ผ๋ฏ๋ก ๋ณต์ฌํ๋ ๋ฐ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฏ๋ก ์ปจํ ์คํธ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ๋ณต๋์ง ์์ต๋๋ค(7GB bin ํ์ผ). ์๋ก์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
COPY ๋ฐ ํ๋ฃจ๋ ์ ๊ทผ ๋ฐฉ์์ ๋ฌธ์ ๋ ํ๋ฃจ๋ ์ ๋ ์ด์ด์ ์ฌ์ ํ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์๋ค๋ ๊ฒ์ ๋๋ค.
COPY . --exclude=a --exclude=b
๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. @cpuguy83 ์ด๋ป๊ฒ ์๊ฐํ์ธ์?
@๋
ธ์จ์ปค ์ข์์. ์ด์จ๋ tar
๋ฐ rsync
์ ์ผ์นํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
dockerignore์ ๋์ผํ ํ์์ ์ง์ํด์ผ ํฉ๋๊น?
@tonistiigi @dnephin
์ด ์ฌ๊ฑด์ #32507์ ์ํด ์ฒ๋ฆฌ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@cpuguy83 ๋ค. ํนํ COPY --chown=uid:gid
์ ๋ฐ๋ผ
@dnephin RUN --mount
๋ ์ถ๋ ฅ์ด ์์ฑ๋ ํ ํ์ํ์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ์์ฑํ๋ ๋ฐ ์ค์ ์ ๋ ์์ ํ ๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. (์: Go๋ก ์ปดํ์ผ, Markdown ํ์ผ์์ HTML ์์ฑ ๋ฑ). RUN --mount
๋ ๋ง์ฝ์ด๊ณ ํ์ฌ ์์
์ค์ธ ํ๋ก์ ํธ(Sphinx๋ฅผ ์ฌ์ฉํ์ฌ API ๋ฌธ์ ์์ฑ)์์ ํ์คํ ์ฌ์ฉํ ๊ฒ์
๋๋ค.
COPY somedir --exclude=excludeddir1 --exclude=excludeddir2
๋ ์ด๋ฏธ์ง์์ ๋๋์ผ ํ์ง๋ง ํ๋๊ฐ ์๋ ์ฌ๋ฌ COPY ๋ฌธ์ ํฉ์ด์ ธ ์๋ ๋ฐ์ดํฐ ๋ณต์ฌ๋ฅผ ์ค์ฌ์ผ๋ก ํฉ๋๋ค. ๋ชฉํ๋ ํ๋ก์ ํธ์ ๋ฃจํธ์ ๋ง์ ๋๋ ํ ๋ฆฌ๊ฐ ์๊ณ ๋ณ๊ฒฝ/์ฆ๊ฐํ ์ ์๋ ๊ฒฝ์ฐ ๋ช
์์ ์ธ COPY first second third .... eleventh destination/
๋ฅผ ํผํ๋ ๊ฒ์
๋๋ค.
์ ๊ฒฝ์ฐ์๋ ์์ค ํ์ผ์ด ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ ์บ์๊ฐ ์ฌ์ฉ๋๋์ง ํ์ธํ๊ธฐ ์ํด ๋จผ์ ๋ถํ์ํ ํ์ผ์ ์ ์ธํ ๋๋ถ๋ถ ์ ํ์ผ์ ๋ณต์ฌํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ปดํ์ผ/์์ฑ - ๋ณต์ฌํ ํ์ผ์ด ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ ์บ์๋ฅผ ์ฌ์ฉํฉ๋๋ค(์). ๋งจ ์ฒ์์๋ ์ด์ ๋น๋ ์ดํ ๋ณ๊ฒฝ๋์์ ์ ์์ง๋ง ๋ณ๊ฒฝ ์ฌํญ์ด ์ปดํ์ผ/์์ฑ์ ์ํฅ์ ๋ฏธ์น์ง ์๋ ์ด์ ์ ์ ์ธ๋ ํ์ผ์ ๋ณต์ฌํฉ๋๋ค. ๋ถ๋ช ํ, ๋๋ ton ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ด๊ฐ ๋จผ์ COPYํ๊ณ ์ถ์ ๊ฒ, ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ ์ด๋๊ฐ์ COPYํ๊ณ ์ถ์ ์ปคํ.
์์ด๋์ด๋ RUN --mount
๊ฐ ๋ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. COPY --exclude
๋ ํ๋์ ๋ฌธ์ ๋ง ํด๊ฒฐํฉ๋๋ค.
๊ฐ๋ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง์ ๊ตฌ๋ฌธ์ ์ถ๊ฐํ๋ ๊ฒ๋ณด๋ค ๋ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ์ถ๊ฐํ๊ณ ์ถ์ต๋๋ค. RUN --mount... rsync --exclude ...
(๋๋ ๊ฐ๋ณ ํญ๋ชฉ์ ๋ณต์ฌํ๋ ์ผ๋ถ ์คํฌ๋ฆฝํธ)๋ฅผ ์ฌ์ฉํ๊ณ COPY --exclude
์ ๋์ผํฉ๋๋ค.
@dnephin ์, RUN --mount rsync
์๊ฐ์ ๋ชปํ๋ค์! ํ๋ฅญํ! ๐
์ ๋ง ํ๋ฅญํฉ๋๋ค. ๊ทธ๋ฌ๋ ์บ์ฑ์ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์์ต๋๋ค @Nowaker . ์ฌ๋๊ธฐํํ๋ ค๋ ํญ๋ชฉ ๋ฟ๋ง ์๋๋ผ ๋ง์ดํธ๋ ๋๋ ํ ๋ฆฌ์์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ผ๋ฉด ์บ์๊ฐ ๋ฌดํจํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํด๋น rsync์ ์ถ๋ ฅ์ ๋ค๋ฅธ ๊ฒ์ ๋ํ ์
๋ ฅ์ผ๋ก ์ฌ์ฉํ๊ณ ์ค์ ๋ก ๋ณ๊ฒฝ๋ ํ์ผ์ด ์์ผ๋ฉด ์บ์๊ฐ ๋ค์ ์ ํ๋ฉ๋๋ค. ๋น์ ์ด ์ ๋ง๋ก ๊ทธ๊ฒ์ ์ํด ์ค๋น๋์ด ์๋ค๋ฉด https://gist.github.com/tonistiigi/38ead7a4ed60565996d207a7d589d9c4#file -gistfile1-txt-L130-L140 ๊ณผ ๊ฐ์ ๊ฒ์ผ๋ก ํ์ฌ ์ด๊ฒ์ ํ ์ ์์ต๋๋ค. RUN --mount
(๋๋ buildkit์ LLB)์ ๋ณ๊ฒฝ ์ฌํญ์ ์ค์ ๋ก ๋จ๊ณ ๊ฐ์ ํ์ผ์ ๋ณต์ฌํ ํ์๊ฐ ์์ง๋ง ํ์ผ์ ์ง์ ์ก์ธ์คํ ์ ์์ผ๋ฏ๋ก ํจ์ฌ ๋น ๋ฆ
๋๋ค.
FROM php:7.2-apache as source
COPY ./src/ /var/www/html/
RUN rm -rf /var/www/html/vendor/
RUN rm -rf /var/www/html/tests/
FROM php:7.2-apache
COPY --from=source /var/www/html/ /var/www/html/
@antoineco Welp, ๋ ์ด์ ์ฐ์ํ์ง ์์ต๋๋ค. ์ง์ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค..
@MartijnHols ์ด๊ฒ์ ์ข์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ฒ์ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ ์ง ๊ด๋ฆฌ์์๊ฒ: ์ฆ, "COPY์์ --chown์ ๊ตฌํํ๋ ์ด์ ๋ ๋ค๋จ๊ณ ๋น๋์์ RUN chown์ ์ฌ์ฉํ ์ ์์ต๋๋ค"๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค. ์จ์ ํ ์ํ๋ฅผ ์ ์งํ๋ ค๋ฉด --exclude
๊ฐ ํ์ํฉ๋๋ค. ์์ฆ Dockerfiles์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋๋ฌด ๋ง์ต๋๋ค.
COPY --exclude
์ ์ด์ ์ ์ป์ ์ ์๋ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๋ค. ์ปจํ
์ด๋์ ์ ์ฒด๋ฅผ ๋ณต์ฌํด์ผ ํ๋ ๋น
๋ฐ์ดํฐ ํด๋๊ฐ ์์ต๋๋ค. ํด๋น ๋๋ ํ ๋ฆฌ์ ๋ด์ฉ์ ์์ฃผ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์บ์ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๋๋ ํ ๋ฆฌ์ ํ๋์ ํฐ ํ์ผ์ด ์๋๋ฐ ๋๋จธ์ง๋ ๋ณต์ฌํ๊ธฐ ์ ์ ์์ฒด ๋ ์ด์ด์ ๋ณต์ฌํฉ๋๋ค. ํ์ฌ๋ก์๋ ์ด๋ฌํ ์ ํ์ ์ปจํ
์ด๋๋ฅผ ์ค๋ช
ํ๋ ๊ฒ์ด ๋ถํ์ํ๊ฒ ์ฅํฉํฉ๋๋ค.
requirements.txt๋ฅผ ์ค์ฌ์ผ๋ก ๊ณ์ธตํ๋ ์บ์ฑ์ ์ฌ์ฉํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๋ด๊ฐ ์ด๊ฑฐ ๊ฐ์ง๊ณ ์์ด:
/root-app
- /Dockerfile
- /requirements.txt
- /LICENSE
- /helloworld.py
- /app-1
-/app-1/script1
-/app-1/script2
-/app-1/script3
- /app-2
-/app-2/script1
๊ทธ๋ฆฌ๊ณ ๋์ปคํ์ผ:
FROM python:slim
COPY ./requirements.txt /
RUN pip install --trusted-host pypi.python.org -r /requirements.txt
WORKDIR /root-app
COPY . /helloworld
CMD ["python", "helloworld.py"]
์๊ตฌ ์ฌํญ ๋น๋ ์บ์๋ฅผ ์ ์ธํ๊ธฐ ์ํด ๋ ๋ฒ์งธ COPY ๋ช ๋ น์ ์ฌ์ฉํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ ๋ฌด์์ด๋ฉฐ ... ๋ง์ด ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด ๋ด app-1 ๋ฐ app-2๋ฅผ ์ ์ฌํ๊ฒ ๊ณ์ธตํํฉ๋๊น?
@axehayz ์ด๊ฒ์ด ๋น์ ์ด ๋ฌป๋ ๊ฒ์ธ์ง ํ์คํ์ง ์์ง๋ง https://medium.com/@guillaumejacquart/node -js-docker-workflow-12febcc0eed8์ ๋ ธ๋ ์ํฌํ๋ก์ ์ ์ฌํ ์์ ์ ์ํํ ๊ฒ์ ๋๋ค.
์ฆ, ๋ ๋ฒ์งธ ์ฌ๋ณธ์ด COPY .
์ด์ด๋ ๋ฉ๋๋ค. pip install
์ด์ ์ ์ค๋ ํ ์ค์น๋ ํจํค์ง์ ๋ํด ์บ์๋ ๋ด์ฉ์ ๋ฌดํจํํ์ง ์์ต๋๋ค.
๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ์ต๋๋ค. ํ์ฌ๋ก์๋ ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ์ ์๋ ํ์ผ์ ํ์ฅํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
COPY --exclude=... --exclude=...์ ๋ํ ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด COPY --from=oldimage๋ฅผ ์ํํ๋ ค๊ณ ํ๊ณ ๋๋ถ๋ถ์ ํ์ผ์ ๋ณต์ฌํด์ผ ํ์ง๋ง ์ผ๋ถ๋ ๋ณต์ฌํ์ง ์์ต๋๋ค. ๋๋ ํ ๋ฆฌ๋ณ๋ก ํ ์ ๋ ์์ง๋ง ์๋ํฉ๋๋ค... ๊ทธ๋ฌ๋ ๋๋ ํ ๋ฆฌ/ํ์ผ ๋ชฉ๋ก์ --excludeํ๊ฑฐ๋ ์ฌ๋ฌ --exclude ์ต์ ์ ์ ๊ณตํ ์ ์์ผ๋ฉด ํจ์ฌ ๋ ์ข๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฝ์ต๋๋ค.
๊ทธ๋์ 3๋ ๋ฐ์ด ์ง๋๋ ์ ํ ์ธ์ ์ด ์๋ ๊ฑด๊ฐ์?
@asimonf ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ดํดํ๊ธฐ ์ํด ์๋ง์ ์น์ธ๊ณผ ์๋ค๊ฐ ์์ต๋๋ค. ์๋ฌด๋ ์ด ์ผ์ ํ์ง ์์๋ค๋ ๋ป์ธ๊ฐ์? ๋ง์์. ์ฐ๋ฆฌ ๋ชจ๋๋ ์ฐ๋ฆฌ๊ฐ ํ๋ ์ผ์ ๋ํด ์ ํ์ ํด์ผ ํฉ๋๋ค.
์์งํ ์ด๊ฒ์ Dockerfile์ ์ถ๊ฐ๋ก ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋งค์ฐ ์ฝ๊ฒ ์ํํ ์ ์์ต๋๋ค.
# haven't tested exact syntax, but this is the general idea
FROM myRsync AS files
COPY . /foo
RUN mkdir /result && rsync -r --exclude=<pattern> /foo/ /result/
FROM scratch
COPY --from=files /result/* /
๋น๋ํท์ ์ฌ์ฉํ๋ฉด ์ถ๊ฐ ๋จ๊ณ๊ฐ ํ์ํ์ง ์์ต๋๋ค.
#syntax=docker/dockerfile:experimental
..
RUN --mount=target=/ctx rsync ... /ctx/ /src/
๋ค๋จ๊ณ ๋น๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌด์ธ๊ฐ๋ฅผ ๋์น๊ณ ์์ง ์๋ ํ ์ฌ๊ธฐ์์ ์๋ฃจ์ ์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค. ์บ์๋ COPY ๋จ๊ณ์์ ์ฌ์ ํ ๋ฌดํจํ๋ฉ๋๋ค.
๋ด๊ฐ ๋ค๋จ๊ณ ๋น๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌด์ธ๊ฐ๋ฅผ ๋์น๊ณ ์์ง ์๋ ํ ์ฌ๊ธฐ์์ ์๋ฃจ์ ์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค. ์บ์๋ COPY ๋จ๊ณ์์ ์ฌ์ ํ ๋ฌดํจํ๋ฉ๋๋ค.
์ด๊ฒ์ ๋ง์ต๋๋ค. ์ ๊ฐ ์ง๊ธ ๊ฒช๊ณ ์๋ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ค๋จ๊ณ๋ ์ ์๊ฒ ํจ๊ณผ์ ์ ๋๋ค.
์บ์๋ฅผ ์ต๋ํ ํ์ฉํ๊ธฐ ์ํด ๋น๋๋ฅผ ๋ค๋จ๊ณ๋ก ๋๋๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
FROM alpine as source
WORKDIR /app
COPY . ./
RUN scripts/stagify-files
FROM node:12.4.0
WORKDIR /app
# Step 0: Setup environments
COPY --from=source /app/stage0 ./
RUN stage0-build.sh
# Step 1: Install npm packages
COPY --from=source /app/stage1 ./
RUN stage1-build.sh
# Step 2: Build project
COPY --from=source /app/stage2 ./
RUN stage2-build.sh
@zenozen ํด๋น ํ๋ก์ธ์ค์ ๋ฌธ์ ๋ ๋ง์ ์ฌ๋๋ค์ด ํ๊ณ ์ถ์ง ์์ ๋์ปค ๋น๋๋ฅผ ์ํด ํน๋ณํ ์ ํ๋ฆฌ์ผ์ด์
๋ ์ด์์์ ์ ๋ ฌํด์ผ ํ๋ค๋ ๊ฒ์
๋๋ค.
๋์ปค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์์ฉ ํ๋ก๊ทธ๋จ ํ์ผ์ ๋ ์ด์์ํ๋ ๋ฐฉ๋ฒ(์: ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅ์ฑ, ์ ์
์ง์์ ์ํ ์ฌ์ฉ ์ฉ์ด์ฑ, ๊ต์ฐจ ํ๋ก์ ํธ ํ์ค, ํ๋ ์์ํฌ ์๊ตฌ ์ฌํญ ๋ฑ)์ ๊ฒฐ์ ํ ๋ ๊ท ํ์ ๋ง์ถฐ์ผ ํ๋ ๋ง์ ๊ณ ๋ ค ์ฌํญ ์ค ํ๋์
๋๋ค.
@cfletcher ๋ฌด์จ ๋ง์ธ์ง ์์ ํ ์ดํดํ์ง ๋ชปํ์ต๋๋ค.
์์์ ์ธ๊ธํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด ์ค์ ๋ก Dockerfile์ ํ์ ํ์ ๋๋ ํฐ๋ฆฌ๋ก ์ฎ๊ฒผ์ต๋๋ค(์ด๋ก ์ธํด rsync๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ํ์ผ์ ๋จ๊ณํํ๋ ค๊ณ ํ ๋ ๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํจ). ์ฆ, Dockerfile์ ์จ๊ธฐ๋ ค๊ณ ํ์ต๋๋ค.
๋ด๊ฐ ์ ์ํ ์ ๊ทผ ๋ฐฉ์์ ๋ด๊ฐ ์์ํ๋ ์ผ๋ฐ์ ์ธ ๊ฒ์ ๋๋ค. ํ๋ก์ ํธ์ 100๊ฐ์ ํ์ผ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ ์ค 1๊ฐ๋ฅผ ์ ํํ์ฌ stage0์ ๋ง๋ ๋ค์ ๊ทธ ์ค 1+10์ ์ ํํ์ฌ stage 1์ ๋ง๋ ๋ค์ 100๊ฐ๋ฅผ ๋ชจ๋ ์ ํํ์ฌ stage 2๋ฅผ ๋ง๋ญ๋๋ค. ๊ฐ ๋จ๊ณ๋ ์ด์ ๋จ๊ณ ์์ ์์ด๊ณ ๋ค๋ฅธ ๋น๋ ๋ช ๋ น์ ๊ฐ์ต๋๋ค. ๋ณต์กํ ํ๋ก์ ํธ ๊ตฌ์กฐ์ ๊ฒฝ์ฐ stagify-files ๋ ผ๋ฆฌ๊ฐ ๋ณต์กํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋์๊ฒ ๊ฐ์ฅ ํฐ ์ด์ ๋ ์ฝ๋๋ฅผ ๋ชจ๋๋ก ๋ถํ ํ๊ณ npm install
๋ฅผ ์คํํ๊ธฐ ์ ์ ๋ชจ๋ package.json
ํ์ผ์ ๋ณต์ฌํด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ํ ๋ณต์ฌ์ ๋ํ ์ผ์ข ์ ์ ์ธ ์ธ์๋ฅผ ์ํฉ๋๋ค. ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ 20๊ฐ ์ด์์ ํ์ผ๊ณผ 10๊ฐ ์ด์์ ๋๋ ํ ๋ฆฌ๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ 2๊ฐ์ ๋๋ ํ ๋ฆฌ์ ๋ช ๊ฐ์ ํ์ผ์ ๋ง์ด ์ฝ๋ฉํฉ๋๋ค. ์ด๊ฒ์ ๋ ๊ฐ์ COPY ๋ ์ด์ด๋ก ๋๋๊ณ ์ถ์ต๋๋ค. ํ๋๋ ์ ๋ ๊ฑด๋๋ฆฌ์ง ์๋ ์ ์ ํ์ผ ๋ฐ ๋๋ ํ ๋ฆฌ์ฉ์ด๊ณ ๋ค๋ฅธ ํ๋๋ ํญ์ ๋ง์ง๋ ํ์ผ ๋ฐ ๋๋ ํ ๋ฆฌ์ฉ์ ๋๋ค.
์ด๊ฒ์ด ์ฌ์ ํ ๋ฌด์๋๊ณ ์๋ค๋ ๊ฒ์ ๋งค์ฐ ์ฌํ ์ผ์ ๋๋ค. ์บ์๋ฅผ ๋ฌดํจํํ์ง ์๊ธฐ ์ํด ํ๋์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ ์ธํ ์ ์๋ค๋ฉด ๋น๋๋น 5๋ถ์ ์ ์ฝํ๋ ๋ฐ ๋์์ด ๋์์ ๊ฒ์ ๋๋ค.
๋น๋ํท์ ์ฌ์ฉํ๋ฉด ์ฌ์ ๋น๋ํท๊ณผ ๊ฐ์ด ์บ์๊ฐ ์์ ์ด๋ฏธ์ง์ ์ข
์๋์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ์ธ๊ธํ rsync ์๋ฃจ์
์ ์ฌ์ฉํ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ๋๋ง๋ค ๋๊ธฐํํด์ผ ํ๋ค๋ ์ ์์ ์ฑ๊ณตํ ์ ์์ง๋ง ํ์ ๋จ๊ณ๋ ์ฝํ
์ธ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์บ์๋๋ฉฐ ์ ์ก๋๋ ์ฝํ
์ธ ์ ์ฝํ
์ธ ๊ฐ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. .. ์ ์ด๋ ํ์ฅ ์ด๋ก ์์ ์ด๋ฌํ ๋จ๊ณ๋ ์บ์๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
COPY
์ ๊ฐ๋จํ --exclude
ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ค์ด ์ผ์
๋๋ค. ๊ฐ์ฅ ๋ง์ด ํฌํ๋ ํฐ์ผ TOP30์ ์์ผ๋ฉฐ ๋ค๋ฅธ TOP30 ํฐ์ผ์ ๋นํด ๊ตฌํ ๋ฉด์์ ์๋์ ์ผ๋ก ์ฝ์ต๋๋ค. :(
๊ทธ๊ฒ์ ๋ ผ์์ ์ฌ์ง๊ฐ ์์ผ๋ฉฐ ์์ ์ด ํ์ํฉ๋๋ค.
@cpuguy83 ์. ๊ทธ๊ฒ์ ๋
ผ๋์ ์ฌ์ง๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค / ๋ค์ ๊ฑฐ๋ถ๋์์ต๋๋ค. COPY --exclude
๊ฐ ์๋ ์ ์ ํ PR์ด ํ์ง ํ์ค์ ํต๊ณผํ๋ฉด ๋ฐ์๋ค์ฌ์ง ์ ์๋ค๋ ์๋ฏธ์
๋๊น?
๋ชจ๋ ์ ์ง ๊ด๋ฆฌ์์ ๋ํด ๋งํ ์๋ ์์ง๋ง ํ ๋ฌ ์ ๋ ์ ์ @tonistiigi ์ ์ด๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ์ผ๋ฉฐ IIRC๊ฐ ์ด๊ฒ์ด dockerignore, ๊ตฌ๋ฌธ ๋ฑ๊ณผ ๊ด๋ จ๋๋ ๊ฐ์ฅ ํฐ ์ฅ์ ๋ฌผ์ ๋ํด ์ด์ผ๊ธฐํ์ต๋๋ค(๊ทธ๋ฆฌ๊ณ dockerignore๊ฐ ๊ตฌ๋ฌธ์ ์ผ๋ก ์ถฉ๋ถํ์ง ์๋ค๋ ์ฌ์ค).
๋ณ๊ฒฝ ์ฌํญ์ ๋น๋ํท์ผ๋ก ์ด๋ํด์ผ ํฉ๋๋ค.
COPY --exclude=... --exclude=...
์ฐฌ์ฑ - ๋ชจ๋๋ฆฌ์ค ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ฒฝ์ฐ์๋ ํ์ํฉ๋๋ค.
์ฐฌ์ฑ! Bash์์ ์๋ํด์ผ ํ์ง๋ง Docker์์๋ ์๋ํ์ง ์๋ COPY !(excludedfile) .
๋ก ์๋ํ์ต๋๋ค.
Dockerfile ์ ๋ชจ๋ COPY
๋ฌธ์ ๋ํด Dockerfile
.dockerignore
ํ์ผ ๋ด์ ๋ชจ๋ ๊ฒ์ ๋ฐ๋ณตํด์ผ ํ๋ค๋ ์ ์์ด ๋ง์์ ๋ค์ง ์์ต๋๋ค. ์ด๋ฏธ์ง์ ์ผ๋ถ๊ฐ ๋ ๊ฒ์ด๊ณ ์ฐ์ ์์๊ฐ ๋์ด์๋ ์ ๋ ๋ถ๋ถ์ผ๋ก DRY๋ฅผ ์ ์งํ ์ ์๋ ๊ฒ, imho.
#33923์ ๋ณด๋ฉด ๋น๋ ์ปจํ
์คํธ์์ ์ ์ธํ๋ ค๋ ๊ฒ์ด COPY
๋ฌธ์์ ์ ์ธํ๋ ค๋ ๊ฒ๊ณผ ์ ํํ ๊ฐ์ ๊ฒ์ด ์ฐ์ฐ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด ์ข์ ํด๊ฒฐ์ฑ
์ด ๋ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค.
COPY --use-dockerignore <source> <target>
๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ผ ์๋ ์์ต๋๋ค.
COPY --use-ignorefile=".gitignore" <source> <target>
.dockerignore
๊ฐ ์ด๋ฏธ .gitignore
์ 90% ์ฌ์์ฐ์ธ ๊ฒ์ ๋ณผ ๋ ๋ฌด์๋ ๋ชจ๋ ํ์ผ๊ณผ ํด๋๋ฅผ ๊ฐ๊ฐ์ ๋ชจ๋ COPY
๋ฌธ์ ๋ํด ๋ค์ ๋ฐ๋ณตํด์ผ ํ๋ ๊ฒ์ ๋งค์ฐ ์ฑ๊ฐ์ ์ผ์
๋๋ค. ๋ ๋์ ๋ฐฉ๋ฒ์ด ์์ด์ผ ํฉ๋๋ค.
@asbjornu .gitignore์ .dockerignore๋ ์ ํ ๊ฐ์ ๊ฒ์ด ์๋๋๋ค. ํนํ ๋น๋ ๋จ๊ณ์์ ์ํฐํฉํธ๊ฐ ์์ฑ๋๊ณ git์๋ ์ ํ ์๋ ๋ค๋จ๊ณ ๋น๋์ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง์ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์, ๋ค๋จ๊ณ ๋น๋๊ฐ ๋์
๋๋ฉด ๋จ๊ณ๋ง๋ค ๋ค๋ฅธ .dockerignore ํ์ผ์ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. ์ ๋์ ์ผ๋ก.
๋๋ ์ข ์ข "๋์ปค ๋น๋" ์ธ๋ถ์์ ๋ณต์ฌํ๊ณ ์ถ์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ .dockerignore๋ ์๋ฌด ์์ ๋ ์ํํ์ง ์์ต๋๋ค. ์ ์ผํ ํฉ๋ฆฌ์ ์ธ ์๋ฃจ์ ์ธ "docker cp"์ ๋ํ ์์ ์ด ํ์ํฉ๋๋ค.
์ด ๋ฌธ์ ๊ฐ ๊ณต๊ฐ๋ ์ง 5๋
์ด ๋์์ต๋๋ค. 2020๋
9์์๋ ๋๋ ์ด๊ฒ์ ์ํ๋ค. ๋ง์ ์ฌ๋๋ค์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํ ํดํน์ ์ ์ํ์ง๋ง ๊ฑฐ์ ๋ชจ๋ ์ฌ๋๋ค๊ณผ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด๋ค ํํ๋ก๋ exclude
ํ๋๊ทธ๋ฅผ ์์ฒญํ์ต๋๋ค. ์ง๊ธ ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ ์ํ๋ก ๋ ์ด์ ๋ฐฉ์นํ์ง ๋ง์ญ์์ค.
์ํ๋ ๊ฒ์ด ์์ผ๋ฉด ์์ ํ๊ฑฐ๋ ์์ ํ ์ฌ๋์ ์ฐพ์์ผ ํฉ๋๋ค.
์ํ๋ ๊ฒ์ด ์์ผ๋ฉด ์์ ํ๊ฑฐ๋ ์์ ํ ์ฌ๋์ ์ฐพ์์ผ ํฉ๋๋ค.
๋จผ์ ์ ์คํธ๋ฆผ์ด ์ด๊ฒ์ ์ํ๋์ง ์ฌ๋ถ๋ฅผ ์์์ผ ํฉ๋๋ค.
์์ค ์ฝ๋ ๊ฒํ ํ https://github.com/tonistiigi/fsutil/blob/master/copy/copy.go ์์ ๋ณต์ฌ ๊ธฐ๋ฅ์ ๋จผ์ ํ์ฅํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ ํ, ์ฐ๋ฆฌ๋ libsolver์์ backend.go๋ฅผ ํ์ฅํ ์ ์์ผ๋ฉฐ, ๊ทธ ํ์์ผ ๋น๋ํท์ AST์ ํ๋ก ํธ์๋๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ ํ์๋ ๋ณต์ฌ๋ณธ์ด ์ ๋์ค cp๋ณด๋ค ์๋ฏธ๋ก ์ ์ผ๋ก rsync์ ๊ฐ๊น์ต๋๋ค.
์ ๋ฐ์ดํธ: ์, copy.go๋ฅผ ํ์ฅํ ํ ๋ชจ๋ ๊ฒ์ด https://github.com/moby/buildkit/pull/1492 ์ ๊ฐ๊น๊ณ ์ ์ธ ๋ชฉ๋ก์ ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด ๋ฌธ์ ์ ๋ํด +1, ๋ง์ glob ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ง์ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ง์๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ค์์
node_modules
๋ฅผ ์ ์ธํ ๋ชจ๋ ํญ๋ชฉ์ ๋ณต์ฌํ๋ ์ ์์ ๋๋ค.