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
파일이 현재 디렉토리(.)로 복사된다.