Windowsコンテナの再配布権変更と外部レイヤーの削除は、これからのコンテナ運用にどう影響するのか:Microsoft Azure最新機能フォローアップ(196)
Microsoftは2023年6月のWindowsコンテナのベースOSイメージから、外部リンクを削除したことを発表しました。外部リンクはWindowsコンテナのライセンス条項の範囲内でコンテナイメージのやりとりを可能にするWindowsコンテナ独特の方法です。しかし、Microsoftのクラウドストレージにアクセスできない環境でのWindowsコンテナの利用を複雑にしていました。
2022年10月から再配布の権利が変更
「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)で参照できます。
- Announcing Windows Container Base Image Redistribution Rights Change(2022年10月12日)[英語](Microsoft Tech Community)
Windowsコンテナイメージから外部レイヤーを削除(2023年6月から)
Microsoftは2022年10月のライセンス条項の改訂に合わせる形で、2023年6月にWindowsコンテナのベースOSイメージから外部レイヤーを削除したことを発表しました。外部レイヤーの削除は、継続的なWindowsコンテナ改善のための変更として、数カ月以内に実施すると2023年5月初めに予告されていたものです。
- Announcing Removal of Foreign Layers from Windows Container Images(2023年6月13日)[英語](Microsoft Tech Community)
- Continuing improvement to Windows Server Containers and the upcoming changes(2023年5月9日)[英語](Microsoft Tech Community)
外部レイヤーの削除は、2023年6月に更新されたWindowsコンテナのベースOSイメージで行われ、今後の更新ビルドも同様の形で提供されることになります。windows/servercoreおよびwindows/nanoserverの場合は、以下に示すイメージからになります。
- mcr.microsoft.com/windows/servercore:ltsc2022、10.0.20348.1787、およびltsc2022-KB5027225
- mcr.microsoft.com/windows/servercore:10.0.17763.4499、および1809-KB5027222
- mcr.microsoft.com/windows/servercore:10.0.14393.5989、および1607-KB5027219
- mcr.microsoft.com/windows/nanoserver:ltsc2022、10.0 20348.1787、およびltsc2022-KB5027225
- mcr.microsoft.com/windows/nanoserver:10.0.17763.4499、および1809-KB5027222
- mcr.microsoft.com/windows/nanoserver:10.0.14393.5989、および1607-KB5027219
2023年6月以降のベースOSイメージから作成されたカスタムイメージは、プライベートまたはパブリックレジストリ(「Docker Hub」や「Azure Container Registry」など)にプッシュする際、ベースOSイメージのレイヤーが外部レイヤーとしてではなく、イメージの一部としてプッシュされるようになります(画面2)。そして、そのイメージは2022年10月のライセンス条項の改訂により、同一組織とは別の第三者(アプリを提供するエンドユーザーや顧客など)に再配布することが可能です。
![画面2](https://image.itmedia.co.jp/ait/articles/2306/22/vol196_screen02.png)
画面2 2023年5月以前のベースOSイメージで作成されたカスタムイメージをDocker Hubにプッシュすると、ベースOS部分は外部レイヤーとしてスキップされるが(画面上)、2023年6月以降のベースOSイメージで作成されたカスタムイメージは全てのレイヤーがプッシュされる(画面下)
イメージに外部レイヤーが削除されたことで、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)。
![画面5](https://image.itmedia.co.jp/ait/articles/2306/22/vol196_screen05.png)
画面5 windows/servercoreのベースOSイメージは5月まではデルタのみのダウンロードでプルできたが(画面のltsc2022-KB5026370タグ)、6月はベースラインが再作成されるため、全体のダウンロードとなる(画面のltsc2022-KB5027225タグ)
なお、新しいベースラインが作成されるまで、翌月以降は再びデルタレイヤーのダウンロードで済みます。新しいベースラインの作成については、以下の更新履歴のページで確認することができます。
- Windows Server container update history[英語](Microsoft Support)
外部レイヤーが削除されたベース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 Learn)
筆者紹介
山市 良(やまいち りょう)
岩手県花巻市在住。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.
関連記事
Windows 11一般提供開始、企業での導入/展開時に注意すべきポイントは?
MicrosoftはWindowsデスクトップOSの最新バージョンである「Windows 11」を正式にリリースし、Windows 11対応ハードウェアを搭載したWindows 10デバイスに対して、無料アップグレードの段階的なロールアウトを開始しました。Windows 11登場! 11で変わること、思ったほど変わらないこと
新しいWindows OS「Windows 11」の正式出荷が2021年10月5日に開始された。Windows 10からの無償アップグレードが可能であるため、どのような新機能が実装されたのか気になる人も多いのではないだろうか。そこで、本稿ではWindows 11の新機能、削除された機能などを簡単にまとめてみた。買って、試して分かったWindows 365(契約・セットアップ編)
Microsoftからクラウド上でWindows 10が動く「クラウドPC」の利用可能なサブスクリプションサービス「Windows 365」の提供が開始された。早速、サブスクリプションを契約し、クラウドPCの設定を行ってみた。契約からセットアップまでで見えてきた便利な点、不便な点などをまとめてみた。いよいよ完全終了へ。Internet Explorer(IE)サポート終了スケジュール
長らくWindows OSに標準装備されてきたInternet Explorer(IE)。その「寿命」は各種サポートの終了時期に左右される。Windows OSごとにIEのサポート終了時期を分かりやすく図示しつつ、見えてきた「終わり」について解説する。