ふくしま

ソフトウェアエンジニア

testcontainers で公式に推奨されている方法でミラーイメージを使う話

やりたいこと

testcontainers では、コンテナのライフサイクル管理に testcontainers/ryuk が使われている。 このイメージのミラーイメージを使いたい。

簡単な方法

公式ドキュメントが推奨する方法のうち簡単なのは、プレフィックスを使う方法だろう。 環境変数TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX を設定するか、設定ファイルに hub.image.name.prefix に設定する。

例えば、registry.mycompany.com/mirror/testcontainers/ryuk にミラーイメージを作ったのならば、 上記の設定に registry.mycompany.com/mirror/ を入れれば、勝手に変換してくれる。

イメージ名を変える場合

しかし、もし、registry.mycompany.com/mirror/testcontainers-ryuk のようにイメージ名を変えた場合は、上記では対応できない。

こういった場合は、ImageNameSubstitutor を継承するクラスを作って対応することが、公式ドキュメントでは推奨されている。

以下のような感じで、testcontainers-ryuk 専用の変換を作れる。

public class MyImageNameSubstitutor extends ImageNameSubstitutor {
    @Override
    public DockerImageName apply(DockerImageName original) {
        if (original.asCanonicalNameString().equals("testcontainers/ryuk:0.3.3")) {
            return DockerImageName.parse(
                    "registry.mycompany.com/mirror/testcontainers-ryuk:latest");
        } else {
            return original;
        }
    }

    @Override
    protected String getDescription() {
        return "change to sample mirror";
    }
}

公式非推奨方法

一応、公式ドキュメントでは非推奨の方法ではあるが、testcontainers/ryuk 用の環境変数を設定すれば、別名のミラーイメージに変更できる。 気になる方はこのページCustomizing images を参照されたし。

参考文献