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 プッシュ例/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/helloworld:0のコピーを開始します。1。1...
完成イメージcnab/helloworld:0。1。1 写し
DEBU[0004] バンドル固定
DEBU[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:e91b9dfcbbb3b88bac94726f276b89de46e4460b55f6e6d d6f876e666e b150ec5b",
「サイズ」: 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:e91b9dfcbbb3b88bac94726f276b89de46e4460b55f6e6d d6f876e666e b150ec5b",
「サイズ」: 498
}
DEBU[0006] CNAB バンドル設定マニフェストをプッシュしようとしています
DEBU[0006] CNAB バンドル コンフィグ マニフェスト ディスクリプタ
デブ[0006] {
"mediaType": "application/vnd.oci.image.manifest.v1+json",
  "ダイジェスト": "sha256:b9616da7500f8c7c9a5e8d915714cd02d11bcc71ff5b4fd190bb77b1355c8549",
「サイズ」: 193
}
DEBU[0006] CNAB バンドル構成がプッシュされました
DEBU[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:a59a a4e74d9cc89e4e75dfb2cc7ea5c108E4236ba6231b53081a9e2506d1197b6","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\":\"ジェーン Doe\",\"email\":\"jane.doe@example.com\",\"url\":\"https://example.com\"}]","org.opencontainers.image.description":"A バンドルの簡単な説明","org.opencontainers.image.title":"Helloworld","org.opencontainers.image.version":"0.1。1"}}
DEBU[0006] OCIインデックスディスクリプタ
デブ[0006] {
"mediaType": "application/vnd.oci.image.index.v1+json",
  "ダイジェスト": "sha256:fcee8577f3acc8ddc6e0280e6d1eb15be70bdff460fe7353abf917a872487af2",
「サイズ」: 926
}
DEBU[0007] CNAB指数が押し出されました
DEBU[0007] CNABバンドルプッシュ
ダイジェスト "sha256:fcee8577f3acc8ddc6e e0280e6d1eb15be70bdff460fe7353abf917a872487af2"

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

Hubスクリーンショット

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

$ ./bin/cnab-to-oci pull hubusername/repo:demo –log-level=debug

DEBU[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 インデックスの取得 sha の256:fcee8577f3acc8ddc6e0280e6d1eb15be70bdff460fe7353abf917a872487af2
デブ[0001] {
"schemaVersion": 2,
"マニフェスト": [
{
"mediaType": "application/vnd.oci.image.manifest.v1+json",
      "ダイジェスト": "sha256:b9616da7500f8c7c9a5e8d915714cd02d11bcc71ff5b4fd190bb77b1355c8549",
"サイズ": 193,
"注釈": {
"io.cnab.manifest.type": "config" (設定)
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
      "ダイジェスト": "sha256:a59a4e74d9cc89e4e75dfb2cc7ea5c108e4236ba6231b53081a9e2506d1197b6",
"サイズ": 942,
"注釈": {
"io.cnab.manifest.type": 「呼び出し」
}
}
],
"注釈": {
"io.cnab.keywords": "[\"helloworld\",\"cnab\",\"チュートリアル\"]",
「io.cnab.runtime_version」: "V1。0。0」
    "org.opencontainers.artifactType"です。 "application/vnd.cnab.manifest.v1",
    "org.opencontainers.image.authors": "[{\"name\":\"ジェーン・ドウ\",\"メール\":\"jane.doe@example.com\",\"url\":\"https://example.com\"}]",
"org.opencontainers.image.description": 「バンドルの簡単な説明」、
"org.opencontainers.image.title": "helloworld"、
"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": "config" (設定)
}
}
DEBU[0001] バンドル設定マニフェストの取得 sha256:b9616da7500f8c7c9a5e8d915714cd02d11bcc71ff5b4fd190bb77b1355c8549
デブ[0001] {
"schemaVersion": 2,
"config": {
"mediaType": "application/vnd.oci.image.config.v1+json",
    "ダイジェスト": "sha256:e91b9dfcbbb3b88bac94726f276b89de46e4460b55f6e6d d6f876e666e b150ec5b",
「サイズ」: 498
},
"layers": null
}
DEBU[0001] Fetching Bundle sha256:e91b9dfcbbb3b88bac94726f276b89de de a e46e4460b55f6e6d6f876e666b150ec5b
デブ[0002] {
"schemaVersion": "v1.0。0」
  "名前": "helloworld",
"バージョン": "0.1。1」
  "description": "バンドルの簡単な説明",
"キーワード": [
"helloworld"、
"cnab"、
「チュートリアル」
],
"メンテナ": [
{
"name": "ジェーン・ドウ",
"email": "jane.doe@example.com",
      "url": "https://example.com"
    }
],
"invocationImages": [
{
"imageType": "ドッカー",
"イメージ": "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リポジトリで直接詳細情報を見つけることもできます。

貢献は大歓迎です!!🤗