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 の詳細を知りたい場合は、いくつかのブログ投稿を利用できます。
- Docker デスクトップを使用した Arm および x86 用のマルチアーキテクチャイメージの構築
- CNABの発表
- Docker App and CNAB
- クラウドネイティブアプリケーションバンドルの次のステップ
KubeCon Europe 2020でこのトピックについて講演することに注意してください:「 共有は思いやりです!クラウド・アプリケーションをOCIレジストリにプッシュ – Silvin Lubecki & Djordje Lukic"
そしてもちろん、 cnab-to-oci GitHubリポジトリで直接詳細情報を見つけることもできます。
貢献は大歓迎です!!🤗