Dockerfile을 작성하다 보면, 호스트 컴퓨터의 파일을 컨테이너 내부로 복사해야 할 때가 많습니다.
이때 사용하는 명령이 바로 **COPY**입니다.
이번 포스팅에서는 COPY 명령의 기본 문법부터 응용 사례까지 단계별로 살펴보겠습니다.
COPY의 의미
COPY는 호스트 컴퓨터에 있는 파일 또는 디렉터리를 컨테이너로 복사하는 명령어입니다.
즉, 우리가 로컬에서 만든 소스 코드나 설정 파일 등을 컨테이너 내부로 전달할 수 있습니다.
기본 사용법
# 문법
COPY [호스트 경로] [컨테이너 내부 경로]
# 예시
COPY app.txt /app.txt
위 예시는 현재 디렉터리에 있는 app.txt 파일을 컨테이너의 루트 디렉터리(/)에 복사하는 예시입니다.
파일 복사 실습
1️⃣ app.txt 파일 만들기
$ echo "Hello Docker!" > app.txt
2️⃣ Dockerfile 작성
FROM ubuntu
COPY app.txt /app.txt
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # 디버깅용
3️⃣ 이미지 빌드 및 컨테이너 실행
$ docker build -t my-server .
$ docker run -d my-server
$ docker exec -it [Container ID] bash
$ ls
결과적으로 / 경로에 app.txt 파일이 존재하는 것을 확인할 수 있습니다.\
폴더 단위 복사하기
여러 파일을 한 번에 복사하고 싶다면 폴더를 통째로 복사하면 됩니다.
1️⃣ 폴더 생성 및 파일 추가
$ mkdir my-app
$ echo "app1" > my-app/a.txt
$ echo "app2" > my-app/b.txt
2️⃣ Dockerfile 작성
FROM ubuntu
COPY my-app /my-app/
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
3️⃣ 컨테이너 내부 확인
$ docker exec -it [Container ID] bash
$ ls /my-app
a.txt b.txt
와일드카드 사용하기
여러 파일을 특정 패턴으로 복사할 수도 있습니다.
FROM ubuntu
COPY *.txt /text-files/
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
주의: text-files/ 처럼 디렉터리 경로 끝에 슬래시(/)를 붙여야 정상적으로 복사됩니다.
.dockerignore 사용하기
특정 파일은 복사 대상에서 제외할 수도 있습니다.
.dockerignore 파일을 만들어 관리하면 됩니다.
# .dockerignore
readme.txt
이제 readme.txt는 COPY 명령 시 컨테이너로 복사되지 않습니다.
전체 디렉터리 복사하기
가장 단순한 형태로, 현재 디렉터리의 모든 파일을 복사할 수도 있습니다.
FROM ubuntu
COPY ./ ./
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
정리하면
| 상황 | COPY 명령 |
| 단일 파일 복사 | COPY app.txt /app.txt |
| 폴더 전체 복사 | COPY my-app /my-app/ |
| 특정 패턴 복사 | COPY *.txt /text-files/ |
| 전체 디렉터리 복사 | COPY ./ ./ |
| 특정 파일 제외 | .dockerignore 사용 |
Dockerfile의 COPY 명령은 단순하지만, 이미지 빌드 효율성과 컨테이너 구조 관리에 중요한 역할을 합니다.
'컨테이너·워크플로우 자동화 > DocKer 기본 및 활용' 카테고리의 다른 글
| Dockerfile WORKDIR — 작업 디렉터리를 지정하는 명령어 (0) | 2025.10.12 |
|---|---|
| Dockerfile ENTRYPOINT 이해하기 (0) | 2025.10.12 |
| Dockerfile 이해하기 (0) | 2025.10.12 |
| Docker Volume(도커 볼륨) (0) | 2025.10.11 |
| Docker로 MySQL 실행시키기 (feat. 볼륨 Volume) (0) | 2025.10.11 |