- Dockerfile의 COPY 명령어와 .dockerignore 파일 활용 실습2025년 07월 15일 13시 12분 37초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
Dockerfile의 COPY 명령어와 .dockerignore 파일 활용 실습
1. 서론
본 글은 Dockerfile 내에서 파일을 이미지로 복사하는 핵심 명령어인
COPY의 다양한 활용 방법과, 빌드 컨텍스트에서 불필요한 파일을 제외하여 이미지 크기를 최적화하는.dockerignore파일의 중요성에 대한 실습 내용을 정리한 것이다.2. Dockerfile의 COPY 명령어 기본
2-1. COPY 명령어의 역할
COPY명령어는 Dockerfile에서 호스트 시스템(로컬 개발 환경)의 파일이나 디렉토리를 도커 이미지 내부의 컨테이너로 복사하는 데 사용된다. 이는 애플리케이션 코드, 설정 파일, 스크립트 등 컨테이너 실행에 필요한 리소스를 이미지에 포함시키는 기본적인 방법이다.2-2. 초기 오류 발생 사례 및 해결
오류 발생: 초기
docker build과정에서 다음과 같은 오류가 발생하였다.ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref d6bc7d01-5077-421f-a0c5-3605839f1ad2::uyiurteydb1szuz8j5kb2d9js: "/호스트": not found이 오류는
Dockerfile의 3번째 줄에 위치한COPY app.txt /app.txt # 앞 호스트 경로 파일을, 뒤 컨테이너에 app.txt 파일명으로 복사와 같이 한글 주석이COPY명령어 뒤에 붙어 있었기 때문에 발생한 것이다. Docker 빌드 시스템이 주석 내의 비-ASCII 문자를 파일 경로의 일부로 오인하여 유효하지 않은 경로로 인식한 것으로 판단된다.오류 해결: 해당 한글 주석을 제거함으로써 문제는 해결되었다.
FROM ubuntu COPY app.txt /app.txt ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]주석 사용 시 유의사항: Dockerfile 내에서
#문자를 사용하여 주석을 작성할 수 있으나, 특정 환경(특히 Windows 또는 유니코드 문자를 포함하는 시스템)에서는 비-ASCII 문자가 포함된 주석이 예상치 못한 빌드 문제를 야기할 수 있음을 인지하고 영문으로 작성하는 것이 안전하다.
3. COPY 명령어의 다양한 활용
COPY명령어는COPY <소스 경로> <대상 경로>의 기본 형식을 따른다. 여기서 소스 경로는 빌드 컨텍스트(일반적으로docker build명령이 실행되는 디렉토리)를 기준으로 하며, 대상 경로는 컨테이너 내부의 절대 경로이다.3-1. 특정 파일 복사
- 예시:
COPY app.txt /app.txt - 설명: 빌드 컨텍스트의 루트에 있는
app.txt파일을 컨테이너 이미지 내부의/app.txt경로로 복사한다.
3-2. 디렉토리 복사
- 예시:
COPY my-app /my-app/ - 설명: 빌드 컨텍스트 내의
my-app디렉토리와 그 하위의 모든 파일 및 서브 디렉토리를 컨테이너 이미지 내부의/my-app/경로로 복사한다. - 확인:
docker run -d my-server docker exec -it [컨테이너 ID] bash ls /my-app cat /my-app/config.txtdocker exec명령을 통해 컨테이너 내부에 접속하여my-app디렉토리와 그 안에 복사된 파일(예:config.txt)을 확인할 수 있다.
3-3. 와일드카드를 사용한 파일 복사
- 예시:
COPY *.txt /text-files/ - 설명: 빌드 컨텍스트 내의 현재 디렉토리에서
.txt확장자를 가진 모든 파일을 컨테이너 이미지 내부의/text-files/디렉토리로 복사한다. - 확인:
컨테이너 내부에서docker run -d my-server docker exec -it [컨테이너 ID] bash ls /text-filesls /text-files명령을 통해app.txt,readme.txt,text.txt와 같이 복사된 텍스트 파일들을 확인할 수 있다.
3-4. 현재 디렉토리 전체 복사
- 예시:
COPY ./ / - 설명: 빌드 컨텍스트의 모든 내용(현재 디렉토리와 그 하위의 모든 파일 및 서브 디렉토리)을 컨테이너 이미지의 루트 디렉토리
/로 복사한다. 이 명령은.dockerignore파일에 의해 제외된 항목을 제외하고 모든 것을 복사한다. - 확인:
컨테이너의 루트 디렉토리에서docker run -d my-server docker exec -it [컨테이너 ID] bash ls /Dockerfile,app.txt,my-app디렉토리 등 빌드 컨텍스트의 모든 파일과 디렉토리가 복사된 것을 확인할 수 있다.
4. .dockerignore 파일의 중요성
.dockerignore파일은 Docker 빌드 시 컨테이너 이미지에 포함되어서는 안 되는 파일이나 디렉토리를 지정하는 데 사용된다. 이는 빌드 컨텍스트에서 불필요한 데이터를 제외하여 빌드 속도를 최적화하고 최종 이미지의 크기를 줄이는 데 기여한다..dockerignore파일에 지정된 패턴과 일치하는 파일 및 디렉토리는 Docker 클라이언트가 Docker 데몬으로 빌드 컨텍스트를 전송할 때 제외된다. 일반적으로 이 파일은 빌드 컨텍스트의 루트에 위치하며, 그 안에 정의된 패턴은 재귀적으로 적용된다.본 실습 과정에서
readme.txt파일이.dockerignore에 명시되어 있었음에도 불구하고,COPY *.txt /text-files/명령을 통해 컨테이너 내의/text-files/경로에readme.txt가 복사된 사례가 관찰되었다. 이는.dockerignore파일의 적용 범위와COPY명령의 상호작용에 대한 깊이 있는 이해가 필요함을 시사한다.5. 결론
Dockerfile의COPY명령어는 컨테이너 이미지를 구성하는 데 있어 필수적인 기능이다. 파일 경로 지정, 와일드카드 사용, 디렉토리 복사 등 다양한 활용법을 숙지하는 것이 효율적인 이미지 빌드에 중요하며,.dockerignore파일을 적절히 활용하여 불필요한 파일을 빌드 컨텍스트에서 제외하고 이미지 크기를 최적화할 수 있다. 또한, Dockerfile 작성 시 주석 사용에 있어서 문자 인코딩과 관련된 잠재적 문제를 인지하고 주의하는 것이 권장된다.728x90반응형'DevOps > Docker' 카테고리의 다른 글
Spring Boot 애플리케이션 Docker 이미지 빌드 및 실행 가이드 (0) 2025.07.15 Docker 컨테이너의 시작점: ENTRYPOINT 명령어 완벽 이해 (0) 2025.07.15 도커(Docker) 기본 명령어 실습: 컨테이너 생성 및 관리 (3) 2025.07.14 Docker 볼륨을 이용한 데이터 영속성 확보 실습(PostgreSQL, MongoDB) (5) 2025.07.11 Docker를 이용한 MySQL 컨테이너 실행(볼륨 마운트) 및 문제 해결 (1) 2025.07.10 다음글이 없습니다.이전글이 없습니다.댓글