Dockerはcnab-to-ociライブラリを cnab.io に寄付します

OCIライブラリ

Dockerは、 CNABプロジェクト 🎉への cnabからoci へのライブラリの寄付を発表できることを誇りに思い、喜んでいます。 このプロジェクトは、MicrosoftとDockerがCNAB仕様をLinux Foundationの Joint Development Foundationに移行した後に昨年作成されました。 その時、CNAB仕様リポジトリは deislab GitHub組織から新しい cnabio 組織に移されました。 リファレンス実装 (仕様の Golang ライブラリ実装である cnab-go と CLI リファレンス実装である duffle ) も移動されました。

cnab-to-ociとは何ですか?

Dockerは、CNAB仕様とそのリファレンス実装の開発を支援し、既存のコンテナ・レジストリを使用してCNABバンドルを共有するための cnab-to-oci ライブラリの作業を主導しました。 このライブラリは現在、3つのCNABツール、Docker App、 Porte r 、 duffle 、およ び Docker Hub で使用されています。レジストリを使用してCNABバンドルをプッシュ、プル、共有する方法を正常に示しました。 この作業は、 将来のCNABレジストリ仕様の基盤として使用されます。

転送はすでに有効になっているため、Golangのインポートで github.com/cnabio/cnab-to-oci を参照してください。

cnabからociへの変換はCNABバンドルをレジストリにどのように格納しますか。

ご存知かもしれませんが、OCIイメージ仕様には、 OCI マニフェ ストと OCIイメージ・インデックス の2つの主要オブジェクトが導入されています。最初のものはよく知られており、古典的なDockerイメージを表しています。 もう1つは、最初はマルチアーキテクチャイメージを格納するために使用されていました(例として nginx を参照)。

ただし、この仕様では、OCIインデックスの使用がマルチ・アーキテクチャ・イメージに制限されていないことがご存じないかもしれません。 仕様を満たしていれば、ほとんど何でも収納でき、かなりオープンです。

CNAB-to-OCI は、このオープン性を使用して bundle.jsonをプッシュします。 呼び出しイメージとコンポーネント イメージ (または Docker アプリのサービス イメージ) も含まれます。 同じリポジトリ内のすべてをプッシュするので、誰かが自分のバンドルをプルすると、すべてのコンポーネントもプルできることが保証されます。

デモ時間

cnab-to-oci は他のツールで使用できるライブラリとして実装されていますが、リポジトリには任意のCNAB bundle.jsonのプッシュおよびプルを実行できる便利なCLIツールが含まれています。

次のコマンドを使用して、バンドルの例を Docker Hub リポジトリにプッシュします。 バンドルで見つかったすべてのマニフェストをプッシュし、OCIインデックスを作成して最後にプッシュします。 結果として取得されるダイジェストは、バンドルのOCIインデックスを指しています。

$ make bin/cnab-to-oci
...
$ ./bin/cnab-to-oci push examples/helloworld-cnab/bundle.json -t hubusername/repo:demo –log-level=debug –auto-update-bundle

DEBU[0000] バンドル docker.io/hubusername/repo:demo の修正
DEBU[0000] "cnab/helloworld:0.1.1" のリロケーションマップのエントリを更新しました
イメージcnab /こんにちは世界のコピーを開始しています:0.1.1...
完成した画像cnab/helloworld:0.1.1コピー
DEBU[0004] バンドル修正済み
デブ[0004] CNAB バンドルのプッシュ docker.io/hubusername/repo:demo
DEBU[0004] CNAB バンドル構成のプッシュ
DEBU[0004] CNAB バンドル構成をプッシュしようとしています
DEBU[0004] CNAB バンドル構成記述子
デブ[0004] {
  "mediaType": "application/vnd.cnab.config.v1+json",
  "ダイジェスト": "SHA256:E91B9DFCBBB3b88bac94726f276b89de46e4460b55f6e6d6f876e666b150ec5b",
  "サイズ": 498
}
DEBU[0005] CNAB バンドル構成マニフェストをプッシュしようとしています
DEBU[0005] CNAB バンドル構成マニフェスト記述子
デブ[0005] {
  "mediaType": "application/vnd.oci.image.manifest.v1+json",
  "ダイジェスト": "SHA256:6EC4FD695CACE0E3D4305838FDF9FCD646798D3fea42b3abb28c117f903a6a5f",
  "サイズ": 188
}
DEBU[0006] CNABバンドル構成マニフェストのプッシュに失敗しました。フォールバックメソッドを試しました
DEBU[0006] CNAB バンドル構成をプッシュしようとしています
DEBU[0006] CNAB バンドル構成記述子
デブ[0006] {
  "mediaType": "application/vnd.oci.image.config.v1+json",
  "ダイジェスト": "SHA256:E91B9DFCBBB3b88bac94726f276b89de46e4460b55f6e6d6f876e666b150ec5b",
  "サイズ": 498
}
DEBU[0006] CNAB バンドル構成マニフェストをプッシュしようとしています
DEBU[0006] CNAB バンドル構成マニフェスト記述子
デブ[0006] {
  "mediaType": "application/vnd.oci.image.manifest.v1+json",
  "ダイジェスト": "sha256:b9616da7500f8c7c9a5e8d915714cd02d11bcc71ff5b4fd190bb77b1355c8549",
  "サイズ": 193
}
DEBU[0006] CNAB バンドル構成がプッシュされました
デビュ[0006] CNAB インデックスのプッシュ
DEBU[0006] OCIインデックスをプッシュしようとしています
DEBU[0006] {"schemaVersion":2,"manifests":[{"mediaType":"" application/vnd.oci.image.manifest.v1+json","digest":"sha256:b9616da7500f8c7c9a5e8d915714cd02d11bcc71ff5b4fd190bb77b1355c8549","size":193,"annotations":{"io.cnab.manifest.type":"config"}},{"mediaType":"application/vnd.docker.distribution.manifest.v2+json","digest":"sha256:a59a4e74d9cc89e4e75dfb2cc7ea5c108e4236ba6231b53081a9e2506d1197b6","size":942,"annotations":{"io.cnab.manifest.type":"invocation"}}],"annotations":{"io.cnab.keywords":"[\"helloworld\",\"cnab\",\"tutorial\"]","io.cnab.runtime_version":"v1.0.0","org.opencontainers.artifactType":"application/vnd.cnab.manifest.v1","org.opencontainers.image.authors":"[{\"name\":\"Jane Doe\",\"email\":\"[email protected]\",\"url\":\"https://example.com\"}]","org.opencontainers.image.description":"A バンドルの簡単な説明","org.opencontainers.image.title":"helloworld","org.opencontainers.image.version":"0.1.1"}}
デブ[0006] OCIインデックス記述子
デブ[0006] {
  "mediaType": "application/vnd.oci.image.index.v1+json",
  "ダイジェスト": "sha256:fcee8577f3acc8ddc6e0280e6d1eb15be70bdff460fe7353abf917a872487af2",
  "サイズ": 926
}
デビュ[0007] CNAB インデックスがプッシュされました
デブ[0007] CNAB バンドルがプッシュされました
ダイジェスト "sha256:fcee8577f3acc8ddc6e0280e6d1eb15be70bdff460fe7353abf917a872487af2" で正常にプッシュされました

バンドルがDocker ハブにプッシュされていることを確認しましょう。

ハブスクリーンショット

これで、レジストリからバンドルをプルバックできます。 bundle.jsonファイルのみをフェッチしますが、お気づきかもしれませんが、これには同じレジストリリポジトリ内のすべてのコンポーネントのイメージマニフェストのダイジェスト参照があります。 Docker エンジンは、実行時にバンドルに必要なイメージをプルします。 したがって、バンドルをプルすることは軽量のプロセスです。

$ ./bin/cnab-to-oci プルハブユーザー名/リポジトリ:デモ –ログレベル=デバッグ

デブ[0000] CNABバンドル docker.io/hubusername/repo:demo を引っ張る
DEBU[0000] OCIインデックス記述子の取得
デブ[0001] {
  "mediaType": "application/vnd.oci.image.index.v1+json",
  "ダイジェスト": "sha256:fcee8577f3acc8ddc6e0280e6d1eb15be70bdff460fe7353abf917a872487af2",
  "サイズ": 926
}
DEBU[0001] OCI インデックスの取得 sha256:fcee8577f3acc8ddc6e0280e6d1eb15be70bdff460fe7353abf917a872487af2
デブ[0001] {
  "スキーマバージョン": 2,
  "マニフェスト": [
    {
      "mediaType": "application/vnd.oci.image.manifest.v1+json",
      "ダイジェスト": "sha256:b9616da7500f8c7c9a5e8d915714cd02d11bcc71ff5b4fd190bb77b1355c8549",
      "サイズ":193、
      "注釈": {
        "io.cnab.manifest.type": "設定"
      }
    },
    {
      "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
      "ダイジェスト": "sha256:a59a4e74d9cc89e4e75dfb2cc7ea5c108e4236ba6231b53081a9e2506d1197b6",
      "サイズ":942、
      "注釈": {
        "io.cnab.manifest.type": 「呼び出し」
      }
    }
  ],
  "注釈": {
    "io.cnab.keywords": "[\"helloworld\",\"cnab\",\"tutorial\"]",
    "io.cnab.runtime_version": "v1.0.0",
    "org.opencontainers.artifactType": "application/vnd.cnab.manifest.v1",
    "org.opencontainers.image.authors": "[{\"名前\":\"Jane Doe\",\"email\":\"[email protected]\",\"url\":\"https://example.com\"}]",
    "org.opencontainers.image.description": "バンドルの簡単な説明",
    "org.opencontainers.image.title": "こんにちは世界"、
    "org.opencontainers.image.version": "0.1.1"
  }
}
DEBU[0001] バンドル設定マニフェスト記述子の取得
デブ[0001] {
  "mediaType": "application/vnd.oci.image.manifest.v1+json",
  "ダイジェスト": "sha256:b9616da7500f8c7c9a5e8d915714cd02d11bcc71ff5b4fd190bb77b1355c8549",
  "サイズ":193、
  "注釈": {
    "io.cnab.manifest.type": "設定"
  }
}
DEBU[0001] バンドル構成マニフェストの取得 sha256:b9616da7500f8c7c9a5e8d915714cd02d11bcc71ff5b4fd190bb77b1355c8549
デブ[0001] {
  "スキーマバージョン": 2,
  "設定": {
    "mediaType": "application/vnd.oci.image.config.v1+json",
    "ダイジェスト": "SHA256:E91B9DFCBBB3b88bac94726f276b89de46e4460b55f6e6d6f876e666b150ec5b",
    "サイズ": 498
  },
  "レイヤー": ヌル
}
DEBU[0001] バンドルの取得 sha256:e91b9dfcbbb3b88bac94726f276b89de46e4460b55f6e6d6f876e666b150ec5b
デブ[0002] {
  "schemaVersion": "v1.0.0",
  "name": "helloworld",
  "バージョン": "0.1.1",
  "説明": "バンドルの簡単な説明",
  "キーワード": [
    "こんにちは世界"、
    "CNAB"、
「チュートリアル」
  ],
  "メンテナ": [
    {
      "名前": "ジェーン・ドウ",
      "メール": "[メール保護]",
      "URL": "https://example.com"
    }
  ],
  "呼び出し画像": [
    {
      "imageType": "docker",
      "image": "CNAB/helloworld:0.1.1",
      "contentDigest": "sha256:a59a4e74d9cc89e4e75dfb2cc7ea5c108e4236ba6231b53081a9e2506d1197b6",
      "サイズ":942、
      "mediaType": "application/vnd.docker.distribution.manifest.v2+json"
    }
  ]
}

cnab-to-oci は、 前回のベータ・リリースv0.9.0-beta1でDockerアプリケーションと統合されており、通常のDockerコンテナ・イメージをプッシュするのと同じUXでアプリケーション全体をプッシュおよびプルできます。 Docker アプリは標準の CNAB ランタイムであるため、次の汎用 CNAB の例を実行することもできます。

$ docker app pull hubusername/repo:demo
"helloworld"のプルに成功しました(0.1.1) docker.io/hubusername/repo:demo から

$ docker app run hubusername/repo:demo
ポートパラメータがに設定されました 
インストール アクション
upbeat_nobelのアクションのインストールが完了しました
コンテキスト "既定" で実行されているアプリ "upbeat_nobel"

もっと知りたいですか?

CNAB の詳細を知りたい場合は、いくつかのブログ投稿を利用できます。

KubeCon Europe 2020でこのトピックについて講演することに注意してください:「 共有は思いやりです!クラウド・アプリケーションをOCIレジストリにプッシュ – Silvin Lubecki & Djordje Lukic"

そしてもちろん、 cnab-to-oci GitHubリポジトリで直接詳細情報を見つけることもできます。

貢献は大歓迎です!!🤗