Docker

Docker 컨테이너 내부의 파일 복사하기: cp 명령어 사용법

Developer88 2024. 4. 12. 11:57
반응형

오늘은 Docker 컨테이너 내부에서 특정한 파일을 복사하는 방법에 대해서 정리해 보겠습니다.

 

1. cp 명령어 이용한 복사

Docker에는 이러한 파일 복사를 위한 명령어가 존재합니다.

복사를 하기 위해서는 아래의 사항들을 알고 있어야 합니다.

  • 복사할 파일과 저장할 파일의 위치
  • 컨테이너 이름 or 컨테이너 id

 

A. 컨테이너 이름을 이용한 복사

컨테이너 이름을 이용한 cp 명령어 사용방법은 아래와 같습니다.

이 때 명령어 실행은 컨테이너 내부가 아니라, 바깥에서 실행해 주어야 합니다.

 

docker cp <컨테이너 이름>:/usr/src/app/db/app-db.db ~/Downloads/

 

 

컨테이너의 이름은 아래 명령어로 현재 실행중인 모든 컨테이너를 확인해서 알아낼 수 있습니다.

 

docker ps -a

 

이 중 원하는 서비스의 이름이 나올텐데요.

일반적으로 프로젝트이름, 서비스 이름, 그리고 번호의 조합으로 생성됩니다. 

저는 실행해 보니, NAMES에 아래와 같이 2개의 서비스가 보입니다.

 

 

이 중 원하는 서비스의 이름을 위의 docker cp 명령어 다음에 넣어주면 됩니다.

예를 들면, 아래와 같습니다.

 

docker cp app-nodejs-1:/usr/src/app/data/mydb.db ~/Downloads/

 

위에서 언급한데로, 컨테이너의 이름에는 서비스이름도 포함되어 있는데요.

그렇기 때문에 아래와 같이 스크립트를 작성해서, 동작시킬 수 있습니다.

 

B.  컨테이너 ID를 이용한 복사

컨테이너 id를 이용한 복사도 크게 다르지 않습니다.

컨테이너 이름을 썻던 곳에, id를 넣어주기만 하면 됩니다.

 

docker cp <컨테이너 id>:/usr/src/app/db/app-db.db ~/Downloads/

 

 

id를 쉽게 알아낼 수 있는 방법이 있는데요.

다음 명령어를 사용해 주면 됩니다.

 

docker ps -aqf "name=nodejs"

 

위의 명령어는 각각 다음의 의미를 가집니다.

  • docker ps -a 는 현재 실행중인 컨테이너들의 목록을 보여줍니다.
  • -q: 이 옵션은 "quiet"를 의미하며, 출력 결과에서 컨테이너 ID만을 보여주도록 합니다.
  • -f: 이 옵션은 "filter"를 의미하며, 특정 조건을 만족하는 컨테이너들만을 출력합니다.
    • -f "name=nodejs": 이름이 "nodejs"인 컨테이너를 찾기 위한 필터를 적용하고 있습니다. 

필터가 잘 적용되었다면, 해당 컨테이너의 id를 알 수 있습니다.

예를 들면 아래와 같이 할 수 있겠지요.

 

docker cp c2423e32106d:/usr/src/app/data/mydb.db ~/Downloads/

 

이상으로 Docker 컨테이너 내부에서 파일을 복사하는 방법에 대해서 정리해 보았습니다.

728x90