Dockerfile에서 나는
COPY . .
필자의 경우 node_modules 디렉토리 전체 디렉토리를 제외하고 싶습니다.
이 같은:
COPY [all but **/node_modules/**] .
Docker에서 가능합니까?
Dockerfile에서 나는
COPY . .
필자의 경우 node_modules 디렉토리 전체 디렉토리를 제외하고 싶습니다.
이 같은:
COPY [all but **/node_modules/**] .
Docker에서 가능합니까?
답변:
파일 만들기 .dockerignore
거기에 하나 개의 라인 (node_modules에 부모이 경우에, 그래서 대부분의 디렉토리) 당신의 고정 표시기 빌드 컨텍스트 디렉토리를 :
**/node_modules
아마 당신은 아마 원하지만 :
node_modules
dockerignore에 대한 정보 : https://docs.docker.com/engine/reference/builder/#dockerignore-file
/config/nginx/ /config/logstash/
, 난 컨테이너 bash는이 찾기 :ls config/ gunicorn logs logstash nginx
ls /config/
선행없이 .dockerignore에 그 경로를 추가하려고 했 /
습니까?
node_modules
하위 디렉토리에서 작동하지 않습니다.
.dockerignore 파일을 사용할 수없는 사람 (예 : 한 사본에 파일이 필요하지만 다른 사본에는 필요하지 않은 경우) :
예, 그러나 여러 개의 COPY 지침이 필요합니다. 특히, 제외하려는 파일 이름의 각 문자마다 사본이 필요합니다.
COPY [^n]* # All files that don't start with 'n'
COPY n[^o]* # All files that start with 'n', but not 'no'
COPY no[^d]* # All files that start with 'no', but not 'nod'
전체 파일 이름을 갖거나 접두사 만 있으면 다른 파일이 없을 것입니다.
COPY failed: no source files were specified
'no'로 시작하지만 'nod'가 아닌 파일이 없을 때 a를 얻으므로 wort 하지 않습니다.
src/
로 이동합니다 /var/www
및 /conf/nginx.conf
에 이동 /etc/nginx/conf.d/default.conf
. 또한 모든 것을 복사하고 RUN rm -r conf
나중에 소스 트리를 그대로 유지하십시오. 누군가 다른 제안이 있으면 듣고 싶습니다.
COPY [^node_modules]*
최상위 파일을 모두 복사하는 디렉토리 만 있으면됩니다 .
필자의 경우 Dockerfile에는 설치 단계가 포함되어 vendor
디렉토리 를 생성했습니다 (PHP에 해당 node_modules
). 그런 다음 COPY
이 디렉토리를 최종 응용 프로그램 이미지로 가져갑니다. 그러므로 나는 vendor
내 안에 넣을 수 없었다 .dockerignore
. 내 솔루션은 단순히 수행하기 전에 디렉토리를 삭제하는 것이 었습니다 composer install
(PHP와 동등한 npm install
).
FROM composer AS composer
WORKDIR /app
COPY . .
RUN rm -rf vendor \
&& composer install
FROM richarvey/nginx-php-fpm
WORKDIR /var/www/html
COPY --from=composer /app .
이 솔루션은 작동하고 최종 이미지를 부 풀리지 않지만 vendor
, 빌드 프로세스 중에 호스트 의 디렉토리가 Docker 컨텍스트에 복사되므로 시간이 더 걸리기 때문에 이상적이지 않습니다 .
composer.lock
전에 제거해야하는지 확인하십시오 composer install
. 잠금 파일이 없으면 다음에 빌드 할 때 다른 종속성 세트 (공급 업체 폴더)가 설치 될 수 있습니다.
.dockerignore를 추가하면 효과가 있습니다. 한 가지 추가 사항 Windows에서이 솔루션을 시도하는 사람들은 Windows 에서 .dockerignore 파일을 만들 수 없습니다 (기본적으로 .dockerignore 파일 은으로 시작하는 파일을 만들 수 없으므로).
로 시작하는 파일을 만들려면 Windows의 경우 : .dockerignore.
와 같이 끝점을 포함하고 Enter 키를 누릅니다 (폴더 옵션에서보기 확장 옵션을 활성화 한 경우)
.dockerignore
?