[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


답변

.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'

전체 파일 이름을 갖거나 접두사 만 있으면 다른 파일이 없을 것입니다.


답변

필자의 경우 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 컨텍스트에 복사되므로 시간이 더 걸리기 때문에 이상적이지 않습니다 .


답변

.dockerignore를 추가하면 효과가 있습니다. 한 가지 추가 사항 Windows에서이 솔루션을 시도하는 사람들은 Windows 에서 .dockerignore 파일을 만들 수 없습니다 (기본적으로 .dockerignore 파일 은으로 시작하는 파일을 만들 수 없으므로).

로 시작하는 파일을 만들려면 Windows의 경우 : .dockerignore.와 같이 끝점을 포함하고 Enter 키를 누릅니다 (폴더 옵션에서보기 확장 옵션을 활성화 한 경우)


답변

현재 디렉토리에서 node_modules 제외

node_modules

직계 서브 디렉토리에서 node_modules 제외

*/node_modules

공식 문서 는 다음과 같습니다.


답변