1. 소개
Dockerfile을 생성할 때 호스트 시스템에서 Docker 이미지로 파일을 전송해야 하는 경우가 많습니다. 속성 파일, 기본 라이브러리 또는 애플리케이션이 런타임에 필요로 하는 기타 정적 콘텐츠가 될 수 있습니다.
Dockerfile 사양은 이미지에 소스 시스템에서 파일을 복사하는 방법은 두 가지 제공 : COPY 및 ADD 지시를.
이 기사에서는 이들의 차이점과 각각을 사용하는 것이 적절한 경우를 살펴보겠습니다.
2. COPY 와 ADD의 차이점
언뜻보기에 COPY 및 ADD 지시문은 동일하게 보입니다. 다음과 같은 구문이 있습니다.
COPY <source> <destination>
ADD <source> <destination>
그리고 둘 다 호스트 시스템에서 Docker 이미지 로 파일을 복사합니다 .
그래서 차이점은 무엇입니까? 요컨대, ADD 지시문은 COPY 보다 더 기능이 뛰어납니다 .
기능적으로 유사하지만 ADD 지시문은 두 가지 면에서 더 강력합니다.
이것들을 더 자세히 살펴보자.
첫째, ADD 지시문은 소스 인수에 대한 원격 URL을 허용할 수 있습니다 . 반면에 COPY 지시어는 로컬 파일만 받아들일 수 있습니다.
ADD 를 사용하여 원격 파일을 가져오고 복사하는 것은 일반적으로 이상적이지 않습니다 . 파일이 전체 Docker 이미지 크기를 증가시키기 때문입니다. 대신 curl 또는 wget 을 사용 하여 원격 파일을 가져와 더 이상 필요하지 않을 때 제거해야 합니다.
둘째, ADD의 지시어는 자동으로 이미지 파일 시스템에 파일을 타르 확장됩니다 . 이렇게 하면 이미지를 빌드하는 데 필요한 Dockerfile 단계 수를 줄일 수 있지만 모든 경우에 원하는 것은 아닙니다.
자동 확장은 소스 파일이 호스트 시스템에 로컬인 경우에만 발생합니다.
3. ADD 또는 COPY 를 사용하는 경우
에 따르면 Dockerfile 모범 사례 사용방법(예제) , 우리는 항상해야 선호 COPY를 통해 ADD 우리가 특별히의 두 개의 추가 기능 중 하나가 필요하지 않는 ADD .
위에서 언급했듯이 ADD 를 사용하여 원격 파일을 Docker 이미지로 복사하면 추가 계층이 생성되고 파일 크기가 늘어납니다. 우리가 사용하는 경우 wget을 하거나 컬을 대신, 우리는 이후에 파일을 제거 할 수 있습니다, 그들은 도커 이미지의 영구적 인 부분이 남아 있지 않습니다.
또한 ADD 명령은 tar 파일 및 특정 압축 형식을 자동으로 확장하므로 이미지의 파일 시스템에 예기치 않은 파일이 기록될 수 있습니다.
4. 결론
이 빠른 사용방법(예제)에서는 파일을 Docker 이미지로 복사하는 두 가지 기본 방법인 ADD 및 COPY를 보았습니다 . 기능적으로 유사하지만 대부분의 경우 COPY 지시문이 선호됩니다. 이는 ADD 지시문이 필요할 때만 주의해서 사용해야 하는 추가 기능을 제공 하기 때문 입니다.