GitHub 操作:如何缓存 Testcontainer 的 Docker 图像?

GitHub Actions: How can I cache the Docker images for Testcontainers?

我使用 Testcontainers 在 GitHub 操作中执行了一些测试。

Testcontainers 拉取我测试中使用的图像。不幸的是,每次构建时都会再次拉取图像。

如何在 GitHub 操作中缓存图像?

GitHub Actions(尚未)未提供官方支持以支持缓存拉取的 Docker 图像(参见 this and this issue)。

你可以做的是提取 Docker 图像,将它们保存为 .tar 存档并将它们存储在一个文件夹中,以便 GitHub Actions 缓存操作来获取它.

一个 sample workflow 可以如下所示:

 build-java-project:
    runs-on: ubuntu-latest
    steps:
        - uses: actions/checkout@v2

        - run: mkdir -p ~/image-cache

        - id: image-cache
          uses: actions/cache@v1
          with:
              path: ~/image-cache
              key: image-cache-${{ runner.os }}

        - if: steps.image-cache.outputs.cache-hit != 'true'
          run: |
              docker pull postgres:13
              docker save -o ~/image-cache/postgres.tar alpine

        - if: steps.image-cache.outputs.cache-hit == 'true'
          run: docker load -i ~/image-cache/postgres.tar

        - name: 'Run tests'
          run: ./mvnw verify

虽然这有点嘈杂,但您每次依赖新的 Docker 图像进行测试时都需要调整管道。还要注意如何使缓存失效,因为我猜如果您打算使用 :latest 标记,上面的解决方案将无法识别对图像的更改。

当前 GitHub 操作 cache size is 10 GB 对于依赖 5-10 Docker 图像进行测试的 mid-size 项目应该足够了。

还有 Docker GitHub Cache API 但我不确定它与 Testcontainers 的集成程度如何。