CircleCI のジョブ間で docker image を共有する


CircleCI の workflow 内のジョブ間で docker image を共有する方法を説明します。

一言で言うと

docker save/load と CircleCI の workspace 機能を使います

詳細な方法

以下の2つのジョブがあるとします。

  • ジョブ a
  • ジョブ b : aのあとに実行される
circleci/config.yml
...
    jobs:
      - a
      - b:
          requires:
            - a
...

ジョブ a では次の処理を行ってください。

  1. docker save コマンドでイメージをファイルとして保存
  2. CircleCI の persist_to_workspace で docker image の保存先を永続化
circleci/config.yml
...
      - setup_remote_docker
      - run:
          name: Save image
          command: |
            mkdir -p /tmp/docker
            docker save hoge/fuga:latest -o /tmp/docker/image
      - persist_to_workspace:
          root: /tmp/docker
          paths:
            - image
...

ジョブ b では次の処理を行ってください。

  1. CircleCI の attach_workspace で docker image のファイルをアタッチ
  2. docker load コマンドでファイルをロード
circleci/config.yml
...
      - attach_workspace:
          at: /tmp/docker
      - setup_remote_docker
      - run: docker load -i /tmp/docker/image
...