View in English

  • メニューを開く メニューを閉じる
  • Apple Developer
検索
検索を終了
  • Apple Developer
  • ニュース
  • 見つける
  • デザイン
  • 開発
  • 配信
  • サポート
  • アカウント
次の内容に検索結果を絞り込む

クイックリンク

5 クイックリンク

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • トピック
  • すべてのビデオ
  • 利用方法

WWDC25に戻る

  • 概要
  • トランスクリプト
  • コード
  • Containerizationの紹介

    Containerizationは、Mac上でLinuxコンテナを作成して実行するための、Swiftで記述されたオープンソースプロジェクトです。このセッションでは、ContainerizationがどのようにLinuxコンテナを安全かつプライベートに処理するかを説明します。Containerizationパッケージを使用して、Mac上でLinuxコンテナをビルド、実行、デプロイするためのシンプルで強力な機能を提供する、オープンソースのContainer CLIツールの仕組みを確認しましょう。

    関連する章

    • 0:00 - イントロダクション
    • 0:48 - コンテナとは
    • 3:50 - Containerizationの詳細:イメージの管理
    • 5:53 - Containerizationの詳細:仮想化
    • 6:53 - Containerizationの詳細:コンテナ環境
    • 9:19 - コマンドラインツール
    • 11:45 - まとめ

    リソース

    • Container
    • Containerization
      • HDビデオ
      • SDビデオ
  • このビデオを検索

    こんにちは Michaelです 今日は新しいオープンソース フレームワークをご紹介します Containerizationはコンテナ化アプリを ネイティブに開発するための Swiftフレームワークです セキュリティとプライバシー パフォーマンスを重視した ContainerizationがLinuxコンテナの設計と 実装にどう役立てられたかを説明します Containerizationフレームワークの 説明に入る前に コンテナについて少し説明します 次に Containerizationで 用意されているAPIについて紹介します 最後に コンテナの開発 実行および管理に使用する コマンドラインツールについて説明します それでは コンテナの概要を説明し コンテナを使用する一般的な ユースケースをいくつか紹介します Linuxコンテナは サーバサイド アプリの開発、テスト、展開における 標準となっています サーバ側ワークロードの大規模展開では ワークロードを数多くの多様な環境で 実行する必要があります コンテナにより これらのワークロードを ホストマシンから分離することや ワークロード同士を分離することができます コンテナでは展開環境を ローカルマシン上に複製することもできます これにより アプリを本番環境で 実行しているかのように ローカルで開発とテストを行えます コンテナではアプリとアプリの依存関係を パッケージ化してこれを実現します バイナリやダイナミックライブラリ アセットが依存関係に含まれます アプリと依存関係をまとめて パッケージ化することにより コンテナごとにホストマシンや 他のコンテナとは異なるバージョンの 依存関係を持つことができます パッケージ化して展開可能な1つの まとまりにしたものがコンテナです コンテナはさらに ランタイムの分離も実現します コンテナはホストマシンとは分離された ネットワークスタックを持ちます プライバシー保護のため あるコンテナで 実行中のプロセスから ホスト上または 別のコンテナ内で実行されているプロセスの 参照や調査を行うことはできません コンテナのサイズや規模は 個別に調整可能です CPUやメモリ、ディスクなどのリソースは ワークロードのニーズに応じて 割り当てられます

    macOS上でLinuxコンテナを実行するには Linux環境を仮想化する必要があります 従来の方法では 大規模な 仮想マシンを用意して 実行するコンテナすべてをホストします リソースはこの仮想マシンに対して 割り当てられ コンテナが追加されると 必要に応じてリソースが分配されます Mac上のディレクトリやファイルを 追加で共有する必要がある場合は まず仮想マシンと共有したうえで データを要求した個別の コンテナに提供されます 私たちがmacOSでLinuxコンテナを 実現する方法を検討した際 達成すべき目標がいくつかありました セキュリティ面での目標は 各コンテナで 現在の大規模な仮想マシンと同等の 分離を実現することです また これらの仮想マシン内の コアユーティリティおよび ダイナミックライブラリの必要性を 低減させたいと考えました これにより 攻撃対象領域と 最新の状態を維持するための メンテナンスコストを削減できます プライバシーについては ディレクトリへのアクセスを コンテナ単位で制限する必要があります ディレクトリを要求したコンテナのみが コンテンツにアクセスできるようにする 必要があります ユーザーのリソースに配慮した上で 優れたパフォーマンスを 実現する必要があります

    私たちはこのような設計上の目標を念頭に Containerizationを開発しました Containerizationはオープンソースの Swiftフレームワークです Swiftで開発された イメージ管理 コンテナの実行 およびパワフルな initシステムのAPIが用意されています コンテナの作成に関連するAPIを いくつか見てみましょう まず Containerizationでイメージ管理が どのように扱われるかを説明します

    コンテナは通常 イメージから作成されます イメージとは配信用のアーティファクトで ファイルシステムの内容と デフォルト設定が含まれます イメージは新しいコンテナを作成する際の テンプレートの役割を果たします

    ContainerizationではAPIで イメージ内のファイルシステムの内容と 設定を取得します この操作を構成するのは レジストリに対するリクエスト つまり イメージの保存と配信を扱うサービスと レジストリからの応答の ローカルファイルシステムへの書き込みです

    イメージがローカルに存在すれば 新しいコンテナの出発点として イメージの設定を使用できます イメージの設定には 実行するデフォルトのプロセス プロセスが実行される作業ディレクトリ 実行するユーザーが含まれます イメージのファイルシステムの内容には アプリのファイルと ディレクトリが含まれます イメージの内容に 効率的にアクセスできるように ファイルシステムを ブロックデバイスとして公開します ブロックデバイスは 大規模なファイルの作成と ファイルシステムでのフォーマットで 構成されます Linuxコンテナで このブロックデバイスを使用するには Linuxが理解可能なファイルシステムで フォーマットされている必要があります EXT4は広く使用されている Linuxファイルシステムであり Containerizationで提供される Swiftパッケージにより フォーマットやディレクトリ構造の作成 EXT4ファイルシステムへの情報入力を Swiftから直接行うことができます イメージからコンテナが作成された後 コンテナを実行するには Linux仮想マシンを起動する必要があります セキュリティに関する目標は 大規模な仮想マシンと同等の 分離を実現し 開始されるすべてのコンテナに その分離を適用することでした Containerizationでは この目標達成のため各コンテナを 固有の軽量な仮想マシン内で実行し 起動時間1秒未満を実現しています これによるメリットとして 各コンテナに専用の IPアドレスが割り当てられます 専用のIPアドレスにより 各コンテナに対して効率的な ネットワークアクセスが可能になり 個別のポートをマッピングしなくても コンテナが提供するサービスに アクセスできます ディレクトリやファイルを共有する場合 ディレクトリを要求するコンテナのみが 内容にアクセスできます CPUやメモリなどのリソースについては 実行中のコンテナがない場合 リソースは割り当てられません 開始されると 仮想マシンの内部で 次のステップが実行されます コンテナの開始前に行われる 実行環境の設定について 見ていきましょう 仮想マシンが開始されると 最初のプロセスが生成されます このプロセスのバイナリを提供するのは 最小限のファイルシステムで Containerizationの一部です このファイルシステムには vminitdというバイナリが含まれています vminitdはSwiftで開発された initシステムであり 仮想マシン内の 最初のプロセスとして実行されます

    最初のプロセスとして実行される場合 コンテナの実行前および実行中に さまざまな責任が伴います ネットワークインターフェイスへの IPアドレスの割り当てや ブロックデバイスで公開するイメージの 内容などのファイルシステムのマウントは vminitdが行う必要があります 仮想マシン内で実行される すべてのプロセスの 起動と監視をこのプロセスが担います vminitdで用意されているAPIにより ホストからプロセスを生成し 管理できます 従来は 大規模な仮想マシンを使用する場合 フルシステムとして起動されていました このような大規模な仮想マシンの ファイルシステムには libcの実装やダイナミックライブラリ cd、cp、lsなどのコアユーティリティ などが含まれます セキュリティ上の理由から コンテナの 攻撃対象領域は小さくする必要があります Containerizationのファイルシステムに コアユーティリティはありません ダイナミックライブラリも libcの実装も含まれません このように リンク先となるライブラリのない 限られた環境で vminitdを実行するには vminitdを静的実行可能ファイルとして コンパイルする必要があります そこで Swift Static Linux SDKを使用します これにより Macから直接 静的なLinuxバイナリを クロスコンパイルできます また muslも使用できます これはlibc実装で 静的リンクのサポートに優れています これにより Macからクロスコンパイルされた Linuxの静的実行可能ファイルとして minitdを作成し 分離された環境で実行できます Containerizationは これらの コアコンポーネントすべてを組み合わせて Linuxコンテナ関連のソリューションを 開発するための強力なAPIを提供します 次に コンテナを実行するための シンプルで確実な手段となる コマンドラインツールを紹介します コンテナツールは CLIとXPCサービスで構成され Containerization APIで開発されています これらのサービスがサポートするのが ストレージとイメージ管理 そして IPアドレスをコンテナに割り当てて DNSリクエストに対応する ネットワークサービスです そして最後に コンテナの管理機能と ランタイムがあります それでは ターミナルを開き コンテナを使って イメージをローカルマシンに 取得してみましょう ターミナルを開いたら まず container image pullと 入力します

    次に イメージの名前を指定します このデモでは alpine:latestを使用します このコマンドを実行すると コンテナにより イメージの内容と設定が ローカルに取得され 私たちが使用する ブロックファイルが作成されます いいですね

    これで イメージがローカルに存在するので このイメージをもとにコンテナを実行します

    ツールにより イメージの ファイルシステムの内容と設定から コンテナが作成されます ここで Containerization APIを使って コンテナを実行するための 軽量な仮想マシンを起動します ターミナルに戻って 実際の様子を見てみましょう まず 実行コマンドとして container runと入力し 対話型のシェルを実行するため ターミナルデバイスの-tを入力し インタラクティブな入力は-iとします 最後に イメージの名前と 実行するコマンドを指定します これはシェルでshを使用します 数百ミリ秒で 対話型シェルを使用できます コンテナの実行環境を調べるために uname -aを実行すると Linux環境にいることが確認できます コンテナにより分離が実現されているため たとえばps auxコマンドを実行すると シェルとpsプロセスのみが表示されます ホスト上や他のコンテナで実行されている プロセスは表示されません これがコンテナのコマンドラインツールで GitHubにあるので実際に試すことができます Containerization APIを使用することで セキュリティとプライバシーが確保され パフォーマンスに優れた コンテナ環境を実現できます Containerizationのプリミティブを macOXで使用できるようにしています Linuxコンテナを組み込んだ プロジェクトの開発に興味があるなら GitHubでContainerization フレームワークをお確かめください 軽量仮想マシンを始める方法の参考になる ソースコードをご覧いただけます vminitd用に作成されたプラットフォームに 依存しないSwiftパッケージや サンプルプロジェクトも用意されています コンテナの実行に興味がある場合は コンテナツールを試したり GitHubの会話に参加したりしてみましょう ソースコードの参照や問題の報告 プルリクエストの作成ができます みなさんが次に何を開発するか楽しみです

    • 9:58 - Container Image Pull

      container image pull alpine:latest
    • 10:43 - Container Run

      container run -t -i alpine:latest sh

Developer Footer

  • ビデオ
  • WWDC25
  • Containerizationの紹介
  • メニューを開く メニューを閉じる
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード(英語)
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(英語)
    • News Partner Program(英語)
    • Video Partner Program(英語)
    • セキュリティ報奨金プログラム(英語)
    • Security Research Device Program(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    Apple Developerアプリを入手する
    Copyright © 2025 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン