본문 바로가기

가상 머신/Docker

[ Docker ] copy - Host 컴퓨터의 파일을 docker 내부로 복사하기

반응형

Docker에서 호스트 컴퓨터의 파일을 Docker 컨테이너 내부로 복사하려면 다음 두 가지 방법을 사용할 수 있습니다.


 

1. docker cp 명령어 사용

docker cp 명령어를 사용하면 호스트의 파일을 실행 중인 컨테이너로 복사할 수 있습니다.

명령어 형식

docker cp <호스트 파일 경로> <컨테이너 이름 또는 ID>:<컨테이너 내 경로>

예제

  • 호스트의 파일 /tmp/example.txt를 컨테이너 내부 /app 디렉토리로 복사:
  • docker cp /tmp/example.txt my_container:/app
  • 호스트의 디렉토리 /data를 컨테이너 내부 /backup으로 복사:
  • docker cp /data my_container:/backup

 

2. docker run 또는 docker create 시 볼륨 마운트

컨테이너 생성 시 호스트의 파일 또는 디렉토리를 볼륨으로 마운트하여 컨테이너 내부에서 접근할 수 있습니다.

명령어 형식

docker run -v <호스트 경로>:<컨테이너 경로> <이미지>

예제

  • 호스트의 /tmp/data 디렉토리를 컨테이너 내부 /app/data에 마운트:
  • docker run -v /tmp/data:/app/data my_image
  • -v로 마운트된 파일은 실시간으로 동기화되므로, 컨테이너 내에서 파일을 수정하면 호스트에도 영향을 미칩니다.

 

3. Dockerfile을 활용한 빌드

컨테이너를 빌드하면서 특정 파일을 복사하도록 Dockerfile에 지시할 수도 있습니다.

예제 Dockerfile

FROM ubuntu:20.04
WORKDIR /app
COPY ./example.txt /app/example.txt

사용 방법

  • Dockerfileexample.txt가 동일한 디렉토리에 있다면, 다음 명령어를 실행하여 이미지를 빌드:
  • docker build -t my_image .
  • 해당 이미지를 기반으로 컨테이너를 생성하면 /app/example.txt에 파일이 포함됩니다.

 

4. docker exec를 이용한 직접 복사

호스트에서 실행 중인 컨테이너에 파일을 복사하기 어려운 경우, docker exec로 컨테이너 내부에서 네트워크 명령이나 wget, curl을 활용해 파일을 다운로드할 수도 있습니다.

예제

  • 컨테이너 내부에 접속하여 파일 다운로드:
    docker exec -it my_container bash
    wget http://example.com/example.txt -O /app/example.txt

요약

  • 빠르고 간단한 복사: docker cp
  • 실시간 동기화: docker run -v로 볼륨 마운트
  • 이미지에 포함: DockerfileCOPY 지시어
  • 특수한 상황: 컨테이너 내부에서 wget이나 curl 사용

필요에 따라 위 방법 중 적합한 것을 선택하여 사용하세요!

반응형