Docker 컨테이너 내 파일을 로컬로 복사

fana·2021년 4월 2일
1

Rails 어플리케이션을 로컬에서도 도커로 올리고 난 후 Axlsx를 통해 엑셀파일을 만들면 결과파일이 도커 컨테이너 내 생성되게 된다.

이때 결과파일을 로컬로 복사하는 방법을 새롭게 알게돼서 기록

방법

$ docker cp ${DOCKER_CONTAINER_NAME}:${DOCKER_FILE_PATH} ${LOCAL_PATH}

를 통해서 도커 컨테이너 내부 파일을 로컬로 꺼낼 수 있다. 특정 파일 지정뿐만 아니라 디렉토리를 지정하면 해당 디렉토리 전체를 복사한다.

예시

# temp.rake

namespace :temp do
  desc "회원목록 xlsx 파일 추출 예시"
  task generate_member_list_to_xlsx: :environment do
  	members = Member.all
    
    Axlsx::Package.new do |p|
      p.workbook.add_worksheet(:name => "회원목록시트") do |sheet|
        # 제목행
        sheet.add_row ["ID", "이름", "나이", "회원가입일"]
        
        members.each do |m|
          # 한줄씩 회원정보 기록
          sheet.add_row [m.id, m.name, m.age, m.created_at]
        end
      end
      # 파일생성
      p.serialize("member_list.xlsx")
    end
  end
end

해당 스크립트를 실행하기 위해서 Docker 컨테이너 내부로 들어간다. 도커 컨테이너 이름이 api-server_1이라고 할 경우

$ docker exec -it api-server_1 bash

# 접속된 Docker 컨테이너 내부 쉘
root@b09cd8c83b7c:/app$ bundle exec rake temp:generate_member_list_to_xlsx

위 커맨드를 실행하면 컨테이너 내부 루트 디렉토리에 "member_list.xlsx"파일이 생성된다.

exit 명령어를 통해 컨테이너 내부에서 빠져나온 후

$ docker cp api-server_1:/app/member_list.xlsx .

명령어를 실행하면 컨테이너 내부 /app/member_list.xlsx 파일이 현재 디렉토리(.)로 복사된다.

0개의 댓글