Docker、Microsoftがコンテナターダッケンを提供:CNAB仕様はコンテナのコンテナ

Table of Contents

Docker、Microsoftがコンテナターダッケンを提供:CNAB仕様はコンテナのコンテナ

「一度書けば、どこでも実行できる」。Java、Flash、Xamarinといったクロスプラットフォーム技術の文脈で、この言葉を耳にしたことがあるかもしれません。これは以前からほぼ実現可能でしたが、必ずしも誰もが満足できるものではありませんでした。しかし、クラウドサービスやコンテナの普及に伴い、プラットフォームをまたいだ運用はより複雑になっています。

コンテナーの新星 Docker と、電話以外のあらゆるビジネスを手がける Microsoft は、クラウド ネイティブ アプリケーション バンドル (CNAB) と呼ばれる、分散アプリケーションをパッケージ化して実行するためのオープン ソース仕様という夢に新たなアプローチをとっています。

これは、アプリケーションをコンテナにラップしてそのデプロイメントを自動化するオープンソース プロジェクトである Docker ソフトウェアが行うことと少し似ています。

しかし、Kubernetes の急速な普及が示すように、大規模なアプリケーションを実行するユーザーには、多様なインフラストラクチャにわたるコンテナのクラスターとその中に分散されたアプリケーションの管理という、より広範な懸念事項があります。

CNABは、より広範な運用目標の達成を目指しています。分散アプリケーション、複数のサービス、そして多様なツールチェーンのパッケージング、デプロイメント、ライフサイクル管理を、単一のパッケージフォーマット仕様を用いて統合する試みです。JSON、Dockerコンテナ、そしてOpenPGPをベースに、これらすべてを一つの仕様で記述します。

Dockerの最高執行責任者であるスコット・ジョンストン氏は、 The Registerとの電話インタビューで、「Dockerが2013年に登場したとき、私たちは単一コンポーネントアプリケーションの問題を解決していました。…それが、分散アプリケーションで私たちが解決しようとしていることです。…社内ではこれをコンテナのコンテナと呼んでいます。」と語った。

CNABは、アプリを定義するバンドル定義(bundle.json)と、アプリをインストールするための呼び出しイメージを組み合わせます。バンドル定義は次のようになります。

{ "schemaVersion": "v1.0.0-WD", "name": "helloworld", "version": "0.1.2", "description": "クラウドネイティブアプリケーションバンドルの「thin」helloworldの例", "maintainers": [ { "name": "Matt Butcher", "email": "[email protected]", "url": "https://example.com" } ], "invocationImages": [ { "imageType": "docker", "image": "technosophos/helloworld:0.1.0", "digest": "sha256:aaaaaaaa..." } ], "images": [ { "image": "technosophos/microservice:1.2.3", "description": "my microservice", "digest": "sha256:aaaaaaaaaaaa...", "uri": "urn:image1uri", "refs": [ { "path": "image1path", "field": "image.1.field" } ] } ], "parameters": { "backend_port" : { "type" : "int", "defaultValue": 80, "minValue": 10, "maxValue": 10240, "metadata": { "description": "バックエンドがリッスンするポート" } } }, "credentials": { "kubeconfig": { "path": "/home/.kube/config", }, "image_token": { "env": "AZ_IMAGE_TOKEN", }, "hostkey": { "path": "/etc/hostkey.txt", "env": "HOST_KEY" } }
}

「設計上、クラウドに依存しません」とマイクロソフトの主席エンジニア、マット・ブッチャー氏はブログ記事で説明している。

AzureからオンプレミスのOpenStack、KubernetesからSwarm、AnsibleからTerraformまで、あらゆるプラットフォームと連携します。ワークステーション、パブリッククラウド、エアギャップネットワーク、制約のあるIoT環境など、あらゆる環境で実行できます。また、顧客向けマーケットプレイスから社内ビルドパイプラインまで、あらゆるプラットフォームニーズに対応できる柔軟性を備えています。

爆竹に火をつける少女

今のところDockerやK8sでは動作しませんが、AWSのFirecracker microVMにはみんな夢中になっています。

続きを読む

Kubernetesの共同創設者であり、Microsoftのエンジニアでもあるブレンダン・バーンズ氏は、「USBスティックから完全な分散アプリケーションをインストールすることを想像してみてください」と述べています。PCユーザーはその喜びを知っていますが、それはデスクトップアプリケーションの場合に限られます。CNABは、様々な監視およびデプロイメントツールを備え、クラスターやクラウドプラットフォームにまたがるアプリケーションに対して同様の機能を提供します。

Bitnami、HashiCorp、そしてジョンストン氏がまだ名前を公表できないと述べているその他のベンダーによってサポートされている CNAB は、さまざまなアプリ リソースを単一のユニットとして管理する機能、ライフサイクル管理のための「インストール」や「アンインストール」などの特定のアクションを定義および使用する機能、バンドルの署名、検証、エクスポート、および保存機能を提供します。

Docker社は、docker-appツールにCNABサポートを追加する予定です。このソフトウェアにより、CNABバンドルをDockerイメージとしてパッケージ化し、Docker HubおよびDocker Trusted Registryを通じて配布できるようになります。また、同社は数ヶ月以内にエンタープライズ向けサービスにもCNABサポートを実装する予定です。

一方、マイクロソフトは、開発者が仕様の理解を深められるよう、Duffleと呼ばれるCNABクライアントのオープンソースリファレンス実装を構築しました。Duffleはバンドルの作成、署名、検証が可能です。

ジョンストン氏は、Dockerによるコンテナの普及に伴う業界の成長が、CNABでも繰り返される可能性があると示唆しています。「Dockerが2013年に依存関係とライブラリで成し遂げたことを考えると、分散アプリケーションでも同じことが起こる可能性があると考えています。」®

Discover More