AWS ECRのイメージ上でCIを実行したかったからこんなことをしてた。
CirclCI 2.1の機能を一部つかってます。
commands定義
railsのbundle install を実行する例 adminというディレクトリにrailsのファイルを入れている想定
commands: build_on_docker: parameters: env: type: string steps: - setup_remote_docker - run: | Image={accountID}.dkr.ecr.ap-northeast-1.amazonaws.com/test-image:<< parameters.env >> docker pull ${Image} docker create -v /data --name mounter alpine:latest /bin/true docker cp ~/admin mounter:/data docker run --volumes-from mounter --name builder bundle install --path /data/admin/vendor/bundle --gemfile=/data/admin/Gemfile docker cp builder:/data/admin/vendor /root/admin/
最初普通の -v
でjob作ったんだけど、mountされなかった。
あと、volumes-fromは実際mountしてるわけでないのか?
以下リンクにrwでもマウントできると書いてあるけど、volumes-fromでrunしたcontainer上の変更が反映されないからcpでホスト側にコピーしてる
docker run | Docker Documentation
machine trueにしないと、普通の-vではmountできないようなので、以下のようにした。
- alpine上に
/data
を作る - ~/adminをalpine上にcpする
- ecr imageをvolumes_fromで見ながらcontainer up
- ホスト側に変更情報が共有されないから再度containerからホスト側へcp
job
jobs: docker: - image: ruby:2.5 build-job: - checkout - $(aws ecr get-login --no-include-email) - build_on_docker: env: 'staging'
後日談
実はこんなことをしなくてもcontextsを使って付与してあげるなり、access_keyを使うなりすればECRのイメージをbuildに使うdockerとして使えることがわかった。