Microsoftは2023年6月のWindowsコンテナのベースOSイメージから、外部リンクを削除したことを発表しました。外部リンクはWindowsコンテナのライセンス条項の範囲内でコンテナイメージのやりとりを可能にするWindowsコンテナ独特の方法です。しかし、Microsoftのクラウドストレージにアクセスできない環境でのWindowsコンテナの利用を複雑にしていました。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
「Windowsコンテナ」のベースOSイメージ(windows/servercore、windows/nanoserver、windowsなど)は、再配布がライセンスによって制限されている成果物が含まれています。そのため、これらのベースOSイメージを使用して作成したイメージをプライベートまたはパブリックのレジストリ(リポジトリ)にプッシュした場合、ベースOSイメージのレイヤーがプッシュされることはありません。
その代わりに、Microsoftのクラウドストレージ「Microsoft Container Registry」(mcr.microsoft.com)に存在する実際のベースOSイメージへのリンクである「外部レイヤー」(Foreign Layer)が使用されます。その結果、プライベートやパブリックレジストリからイメージをプルする場合、同時にMicrosoft Container RegistryからもベースOSイメージをプルすることになります。
このWindowsコンテナのプッシュ/プルに関係する独特な実装は、Microsoft Container Registryにアクセスするインターネットへの経路のない物理的に隔離された環境(エアギャップ環境)では、イメージのプルやコンテナの起動に失敗します。この制限は、Dockerデーモンに「--allow-nondistributable-artifacts」フラグをセットすることで、配布制限のあるレイヤーを含めて全てプッシュすることで回避できますが、その場合、ライセンス条項を満たすために、イメージは同一組織内での利用に制限されていました。
Microsoftは2022年10月にWindowsコンテナのライセンス条項(MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS CONTAINER OS IMAGE)を改訂し、「連結イメージ」の一部としてのみ、WindowsコンテナのベースOSイメージの再配布を許可するようになりました(画面1)。これにより、--allow-nondistributable-artifactsフラグの使用でプッシュしたイメージを第三者に再配布できるようになりました。最新のライセンス条項は「MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE FOR WINDOWS CONTAINER BASE IMAGE」(Microsoft Learn)で参照できます。
Microsoftは2022年10月のライセンス条項の改訂に合わせる形で、2023年6月にWindowsコンテナのベースOSイメージから外部レイヤーを削除したことを発表しました。外部レイヤーの削除は、継続的なWindowsコンテナ改善のための変更として、数カ月以内に実施すると2023年5月初めに予告されていたものです。
外部レイヤーの削除は、2023年6月に更新されたWindowsコンテナのベースOSイメージで行われ、今後の更新ビルドも同様の形で提供されることになります。windows/servercoreおよびwindows/nanoserverの場合は、以下に示すイメージからになります。
2023年6月以降のベースOSイメージから作成されたカスタムイメージは、プライベートまたはパブリックレジストリ(「Docker Hub」や「Azure Container Registry」など)にプッシュする際、ベースOSイメージのレイヤーが外部レイヤーとしてではなく、イメージの一部としてプッシュされるようになります(画面2)。そして、そのイメージは2022年10月のライセンス条項の改訂により、同一組織とは別の第三者(アプリを提供するエンドユーザーや顧客など)に再配布することが可能です。
イメージに外部レイヤーが削除されたことで、Linuxベースのコンテナイメージと同様に、コンテナイメージをレジストリにプッシュする際に、全てのレイヤーがプッシュされるようになります。そのため、物理的に閉じた環境で独自のリポジトリ経由で再配布することも簡単になります(Dockerデーモンの--allow-nondistributable-artifactsフラグは不要です)。
以下の画面3は、2023年5月のベースOSイメージで作成したカスタムイメージを、mcr.microsoft.comにアクセスできない環境でDocker Hubからプルしたところです。
mcr.microsoft.comにアクセスできない環境は、ローカルのhostsファイルを編集して、mcr.microsoft.comに偽のIPアドレス(127.0.0.1など)を指定して再現しました。外部レイヤーをmcr.microsoft.comから取得しようとしてリトライを続けますが、最終的に失敗します。
一方、2023年6月のベースOSイメージで作成したカスタムイメージの場合は、ベースOS部分のレイヤーを含めてDocker Hubにプッシュされるため、mcr.microsoft.comにアクセスできない環境でも正常にプルでき、コンテナを起動できます(画面4)。
外部レイヤーの削除は、コンテナベースのアプリの開発者や、オンプレミスのプラットフォーム管理者に留意すべき影響があります。
windows/servercoreやwindowsのベースOSイメージは、更新イメージのダウンロードを最適化するために、不定期に作成される「ベースラインのレイヤー」と、ベースラインからの差分を含む「サービシング(デルタ)レイヤー」で構成されます。
例えば、2023年4月と5月のベースOSイメージは、ベースラインが共通(2023年1月に作成されたベースライン)であり、4月までのイメージをプル済みであれば、翌月の5月はデルタ部分の400MB以下のダウンロードで済みます。
今回、外部レイヤーの削除のためにベースラインが再作成されたため、5月までのイメージをプル済みであっても、6月以降のイメージは新しいベースラインをダウンロードすることになるため、今回のプルはダウンロードに時間がかかります(画面5)。
なお、新しいベースラインが作成されるまで、翌月以降は再びデルタレイヤーのダウンロードで済みます。新しいベースラインの作成については、以下の更新履歴のページで確認することができます。
外部レイヤーが削除されたベースOSイメージから作成されたカスタムイメージは、レジストリにプッシュする際、そのプッシュにはベースOSイメージのレイヤーも含まれることになります。そのため、アップロードにかかる時間が増え、レジストリのストレージをより多く消費する(つまり、ストレージコストが増大する)ことになります。
高速なインターネット回線を利用できない開発者にとっては、作業効率に著しく影響する可能性があります。例えば、windows/servercore:ltsc2022の2023年6月のイメージは圧縮されたサイズで1.35GBにもなります(windows/nanoserverは圧縮されたサイズで120MB程度)。
プッシュ時間とレジストリのストレージ消費増大の影響は、今後のWindowsコンテナでの開発に付きまとう新たな課題になります。MicrosoftによるWindowsコンテナのサイズ縮小の努力は続けられており、そのことが時間とストレージの増大を少し緩和するでしょう。windows/servercore:ltsc2022の2023年5月のイメージは展開後のサイズで4.01GB(圧縮時はベースライン1.347GB+デルタ378.9MB)ありましたが、2023年6月は3.06GB(圧縮時はベースライン1.35GB)まで縮小されました。
なお、2022年10月のライセンス条項の改訂や、2023年6月の外部レイヤーの削除については、以下の公式ドキュメントにはまだ反映されていないことに注意してください。
岩手県花巻市在住。Microsoft MVP 2009 to 2023(Cloud and Datacenter Management)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.