728x90

개요

Docker를 사용하다 보면 로컬 시스템컨테이너 간파일을 주고받아야 하는 상황 이 발생합니다.

 

Docker는 이를 위해 docker cp 명령어를 제공하는데, 이 명령어를 통해 로컬 시스템과 컨테이너 간에 파일이나 디렉토리를 손쉽게 복사할 수 있습니다.

 

docker cp 명령어란❓

docker cp 명령어는 로컬 시스템Docker 컨테이너 간에 파일이나 디렉토리복사할 때 사용하는 명령어입니다.

사용법

# 로컬 -> 컨테이너로 복사
docker cp 로컬경로 컨테이너이름:컨테이너내부경로

# 컨테이너 -> 로컬로 복사
docker cp 컨테이너이름:컨테이너내부경로 로컬경로

 

1. 복사

 

  • 1. 먼저 로컬 시스템에 dummy -> test.txt 파일을 생성합니다.

 

  • 2. docker ps로 현재 실행중인 컨테이너의 ID(boring_vaughan)로컬dummy 폴더 자체를 복사해보겠습니다.
  • 3. 복사하려는 폴더파일 지정 :
    • 로컬의 dummy 폴더 전체복사하기 위해 "/" 를 경로 끝에 붙입니다.
    • 컨테이너 ID 뒤에 ":" 콜론을 붙이고 컨테이너 내부의 목적지 경로("test")를 지정합니다.
지정한 경로가 컨테이너 내부에 존재하지 않는 경우, 자동으로 새로 생성됩니다.

 

2. 복사 확인

  • 1. 복사가 정상적으로 되었는 지 확인해보기 위해 로컬 시스템의 "test.txt"파일을 삭제해보겠습니다.
docker cp boring_vaughan:/test dummy

  • 2. 위 명령어를 실행하면 컨테이너의 test 폴더 전체로컬 시스템 dummy 폴더로 복사됩니다.

docker cp boring_vaughan:/test/test.txt dummy

 

구체적으로 대상을 지정하고 싶다면 위와 같이 지정 또한 가능합니다.

 

실제 활용 사례

 

  1. 로그 파일 추출
    • 컨테이너 내부의 로그 파일을 로컬로 복사하여 분석
  2. 설정 파일 주입
    • 로컬에서 수정한 설정 파일을 컨테이너에 적용
  3. 개발 중 파일 테스트
    • 개발 중인 파일을 컨테이너에 복사하여 테스트

 

주의 사항 : 코드 변경 시 고려할 점 ❗️

소스 코드를 수정했을 때는 일반적으로 이미지를 다시 빌드하고 컨테이너를 재시작하는 것이 올바른 방법입니다.

 

물론 docker cp 명령어를 사용해 변경된 코드직접 컨테이너에 복사할 수도 있습니다. 하지만 이 방법은 권장되지 않습니다. 어떤 파일들이 변경되었는지 추적하기 어렵고, 예기치 않은 문제가 발생할 수 있기 때문입니다.

 

따라서 docker cp 명령어는 일회성 작업(테스트, 디버깅)에서만 사용하고, 코드나 설정 파일 변경 시 이미지를 다시 빌드하는 방식이 권장됩니다.