Dockerコンテナ内のファイルをローカルにコピー



RailsアプリケーションをローカルからDockerにアップロードすると、AxlsxでExcelファイルが作成され、結果ファイルはDockerコンテナで生成されます.
結果ファイルを記録すると、結果ファイルをローカルにコピーする方法がわかります.

に道を教える

$ 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ファイルの現在のディレクトリ(.)にコピーします.