Dockerfile을 작성할 때 파일 / 디렉토리를 복사하는 데 사용할 수있는 두 가지 명령이 있습니다 – ADD
및 COPY
. 기능 범위에 약간의 차이가 있지만 본질적으로 동일한 작업을 수행합니다.
그렇다면 왜 우리는 두 가지 명령을 가지고 있으며, 언제 하나를 사용할지 어떻게 알 수 있습니까?
의사 ADD
명령
ADD
명령이보다 오래 되었다는 점에 주목하여 시작하겠습니다 COPY
. Docker 플랫폼이 시작된 이후 ADD
명령은 명령 목록의 일부였습니다.
이 명령은 파일 / 디렉토리를 지정된 컨테이너의 파일 시스템으로 복사합니다.
이 ADD
명령 의 기본 구문 은 다음과 같습니다.
ADD <src> … <dest>
복사 할 소스 ( <src>
)와 저장하려는 대상 ( <dest>
)이 포함됩니다. 소스가 디렉토리 인 경우 ADD
파일 시스템 메타 데이터를 포함하여 내부의 모든 것을 복사합니다.
예를 들어, 파일이 로컬에서 사용 가능하고 이미지의 디렉토리에 추가하려는 경우 다음을 입력하십시오.
ADD /source/file/path /destination/path
ADD
URL에서 파일을 복사 할 수도 있습니다. 외부 파일을 다운로드하여 원하는 대상으로 복사 할 수 있습니다. 예를 들면 다음과 같습니다.
ADD http://source.file/url /destination/path
추가 기능은 압축 파일을 복사하여 지정된 대상에서 컨텐츠를 자동으로 추출한다는 것입니다. 이 기능은 로컬로 저장된 압축 파일 / 디렉토리에만 적용됩니다.
ADD source.file.tar.gz /temp
URL에서 압축 파일 / 디렉토리를 다운로드하고 추출 할 수는 없습니다. 이 명령은 외부 패키지를 로컬 파일 시스템에 복사 할 때 외부 패키지의 압축을 풀지 않습니다.
의사 COPY
명령
일부 기능 문제로 인해 Docker는 콘텐츠 복제를위한 추가 명령을 도입해야했습니다 COPY
.
밀접하게 관련된 ADD
명령 과 달리 COPY
할당 된 기능은 하나만 있습니다. 그 역할은 지정된 형식으로 파일 / 디렉토리를 기존 형식으로 복제하는 것입니다. 이는 압축 파일 추출을 처리하지 않고 그대로 복사하는 것을 의미합니다.
이 명령은 로컬로 저장된 파일에만 사용할 수 있습니다. 따라서 URL과 함께 사용하여 외부 파일을 컨테이너에 복사 할 수 없습니다.
COPY
명령 을 사용하려면 기본 명령 형식을 따르십시오.
소스를 입력하고 명령이 다음과 같이 컨텐츠를 추출 할 위치를 입력하십시오.
COPY <src> … <dest>
예를 들면 다음과 같습니다.
COPY /source/file/path /destination/path
어떤 명령을 사용해야합니까? (모범 사례)
COPY
명령이 도입 된 상황을 고려할 때 , 유지 ADD
는 필수적인 문제임 이 분명합니다 . Docker는 Dockerfile 작성에 대한 모범 사례를 설명하는 공식 문서를 발표했으며 ADD
명령 사용에 대해 명시 적으로 조언합니다 .
Docker의 공식 문서 메모 COPY
는보다 투명하므로 항상 안내해야합니다 ADD
.
로컬 빌드 컨텍스트에서 컨테이너로 복사해야하는 경우를 사용하십시오 COPY
.
Docker 팀 ADD
은 URL에서 패키지를 다운로드하고 복사하는 데 사용하지 않는 것이 좋습니다 . 대신 RUN
명령 내에서 wget 또는 curl을 사용하는 것이 더 안전하고 효율적 입니다. 이렇게하면 추가 이미지 레이어를 만들지 않고 공간을 절약 할 수 있습니다.