Docker Registryの保存先にIBM Cloud Object Storageを使う


はじめに

IBM CloudでOpenShiftのオフライン環境インストールをするのにDockerRegistryが必要で、
そのDocker Registryの保存先として、IBM Cloud Object Storageを使いたかったのですが、Docker Registry Storage Driverの設定でS3互換のIBM Cloud Object Storageのドキュメンテーションが無くて接続するまで、四苦八苦したのでメモとして残しておきます。

前提

事前に以下のサイトを参考にCentOS7のdocker-distributionを使ってプライベートレジストリは構築済み

IBM Cloud Object Storageの必要な情報

(設定名)                                (例)
{cos_hmac_keysのccess_key_id}     => xxxxyyyy86a4e6d8ceb76487f1b0c19
{cos_hmac_keysのsecret_access_key}  => xxxxeyyyy17c753dcd229fbb8b0ee56a69fcca82be032ef
{ロケーション}                        => us-geo
{ロケーションのエンドポイント}           => https://s3.private.us.cloud-object-storage.appdomain.cloud/
{バケット名}                          => denno
{バケットのパス}:                      => /
  • cos_hmac_keysは バケットのサービス資格情報作成時に、[ Include HMAC Credential 」を選択しないと出力されません。(最初気がつかなくてハマりました。)

docker-distributionの設定

  • config.xml
version: 0.1
log:
  fields:
    service: registry
storage:
    cache:
        layerinfo: inmemory
    #filesystem:
    #    rootdirectory: /var/lib/registry
    s3:
      accesskey: {cos_hmac_keysのccess_key_id} 
      secretkey: {cos_hmac_keysのsecret_access_key} 
      region: {ロケーション}
      regionendpoint: {ロケーションのエンドポイント}
      bucket: {バケット名}
      encrypt: true
      secure: true
      v4auth: true
      chunksize: 5242880
      rootdirectory: {バケットのパス}
http:
    addr: :5000
    tls:
      certificate: /var/lib/registry/certs/registry.lab.example.com.crt
      key: /var/lib/registry/certs/registry.lab.example.com.key

結果

設定反映後、Docker Registryに対してdocker pushすると、IBM Cloud Object Storageのバケットの画面にDocker Registryに保存されたファイルが出力されます。

最後に

IBM Cloud Object Storageは S3互換サービスなので、他のS3互換のサービスでも参考になると思います。

(参考)Use minio as docker registry storage driver
https://medium.com/@enne/use-minio-as-docker-registry-storage-driver-c9c72c72cc87

追記

わざわざObjectStorageに放り込むのは、DockerRegistryが動作する仮想インスタンスを必要な時にだけ、契約すればいいかなって
発想からでした。