Dockerfile의 복사 및 추가 명령의 차이점

Isaac Tony 2024년2월15일
Dockerfile의 복사 및 추가 명령의 차이점

Dockerfile은 Docker 이미지를 빌드하는 데 사용되는 모든 명령이 포함된 텍스트 문서입니다. 우리는 최근 과거에 구성 관리 및 배포 자동화를 위한 기본 도구로 Docker가 광범위하게 채택되는 것을 보았습니다.

자동 빌드와 같은 Dockerfile 사용의 고급 기능은 개발자가 Docker를 채택하는 이유입니다. 기타에는 애플리케이션을 실행 환경에서 격리하고 신속하게 보안하는 것이 포함됩니다.

Docker 컨테이너를 만들 때 호스트에서 Docker 이미지로 파일을 전송해야 하는 경우가 많습니다. 이러한 파일에는 애플리케이션을 실행하는 데 필요한 라이브러리 또는 속성 파일이 포함될 수 있습니다.

Dockerfile의 COPYADD 명령의 차이점

Dockerfile에서 COPY 또는 ADD 명령을 사용하여 이러한 파일을 복사할 수 있습니다. 이러한 명령은 기능적으로 동일합니다. 그러나 몇 가지 차이점이 있습니다.

COPYADD 명령은 아래 구문을 따릅니다.

COPY <src> <dest>
ADD <src> <dest>

두 명령 모두 localhost의 <src>에 있는 파일 또는 디렉토리를 복사하고 컨테이너 파일 시스템의 <dest> 위치에 추가합니다. 예를 들어 아래 Dockerfile에서는 현재 디렉터리에서 Docker 이미지의 /var/www 디렉터리로 파일을 복사합니다.

#  base image
FROM python

# Set your working directory
WORKDIR /var/www/
# Copy the necessary files
COPY ./app.py /var/www/app.py
ADD./requirements.txt /var/www/requirements.txt

# Install the necessary packages
RUN pip install -r /var/www/requirements.txt
ADD mkdir -p /var/www/new_directory
# Run the app
CMD ["echo", "Hello, Developer"]

app.pyrequirements.txt 파일을 복사하려고 합니다. 이제 이 Docker 이미지를 빌드하고 이를 사용하여 Docker 컨테이너를 생성하면 확실히 Docker 컨테이너의 파일 시스템에서 두 파일을 찾을 수 있습니다.

아래 예제는 위의 Dockerfile을 기반으로 Docker 이미지를 빌드합니다.

~/my-app$ Docker build -t new-image .

Dockerfile을 기반으로 Docker 이미지 빌드

이미지가 있으면 docker run 명령을 사용하여 Docker 컨테이너를 만듭니다. 이 외에도 컨테이너 내에서 bash를 시작할 것입니다.

암호:

~/my-app$ Docker run -it new-image bash

/var/www 디렉토리에 파일을 나열하면 app.pyrequirements.txt 파일이 모두 표시되어야 합니다.

암호:

root@841d1e8d8c25:/var/www# ls
app.py  new_directory  requirements.txt

위의 Docker 컨테이너에서 ADDCOPY 명령을 사용하면 호스트 디렉터리에서 Docker 디렉터리로 파일을 복사할 수 있습니다.

그러나 이러한 기본적인 파일 복사를 Docker 컨테이너로 수행할 때는 COPY 명령을 사용하는 것이 좋습니다.

docker-file 모범 사례에 따르면 COPY 명령은 로컬 파일을 복사하는 것보다 더 많은 기능이 필요하지 않을 때 더 적합합니다.

반면 ADD 명령에는 더 많은 기능이 있습니다. 예를 들어 이 명령을 사용하여 로컬 tar 파일을 Docker 이미지로 추출할 수 있습니다.

이 외에도 ADD 명령은 원격 URL을 지원하며 COPY 명령으로는 이 두 가지 작업을 수행할 수 없습니다. 빌드 중인 Docker 이미지의 크기를 줄이려는 경우 이전 명령이 적합하지 않을 수 있습니다.

이는 ADD 명령이 특히 원격 URL에서 패키지를 가져오는 경우 Docker 이미지의 크기를 상당히 부풀릴 수 있기 때문입니다.

ADD 명령을 사용하여 호스트에서 파일을 복사하기만 하면 Docker 이미지의 파일 시스템에 예기치 않게 파일이 복사될 수 있습니다.

결론적으로, 이 두 명령은 유사성을 공유하고 상호 교환적으로 사용할 수 있지만 COPY 명령을 사용해야 합니다. 반면 ADD 명령은 필요할 때만 최대한 주의해서 사용해야 합니다.

작가: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

관련 문장 - Docker Command