-
コンテナマシンの詳細
Containerに含まれる新しいツールであるコンテナマシンは、Mac上で軽量の永続的なLinux環境を提供します。コンテナマシンの仕組みと、macOS上でのLinux向け開発においてパフォーマンスに優れたシームレスな体験を提供するContainerizationの設計について解説します。
関連する章
- 0:00 - Introduction
- 1:19 - Containerization
- 2:14 - Design principles
- 3:36 - Container machine
- 4:36 - Demo
- 10:33 - Next steps
リソース
関連ビデオ
WWDC25
-
このビデオを検索
こんにちは Michaelです 今日はContainerizationを基盤とした 新機能を紹介します
ContainerizationはLinuxコンテナを 実行するためのSwiftフレームワークです セキュリティ、プライバシー、 パフォーマンスを重視しています
Linuxコンテナはサーバーサイドアプリを ビルド、テスト、デプロイするのに最適です
この基盤の上に構築された Containerマシンは 高度に統合されたLinux環境を提供する 新機能です Macでシームレスに動作します Containerマシンはコンテナのように 高速かつ軽量で 仮想マシンのような永続性があります ホスト統合機能により macOSにネイティブな感覚で使えます Containerマシンについて 詳しく見る前に Containerizationフレームワークを 振り返ってみましょう 次にContainerマシンを形作った 設計原則を確認します
最後にContainerマシンが クロスプラットフォーム開発において シームレスなワークフローを いかに提供するかを探ります
WWDC 25でContainerizationを オープンソース化しました
ContainerizationはSwiftフレームワークです macOS上でLinuxコンテナを実行します ストレージ、ネットワーク、実行、 Linux initシステムのAPIを提供しています
各containerに仮想マシンベースの 分離を提供するよう設計されています これらの軽量な仮想マシンは 高パフォーマンスを発揮し サブ秒の起動時間を実現します
Containerizationとともに container toolもオープンソース化されました imageの作成と配布のための CLIコマンドを提供しています Linuxコンテナの ライフサイクル管理も行います Containerizationの全体的な アーキテクチャについて詳しく知りたい場合は container toolについても、WWDC 25の "Meet Containerization"をご覧ください では、container machineの 設計原則を見ていきましょう これらの環境は高速かつ軽量で 既存のワークフローに 統合できる必要があります macOSとLinux間の切り替えが 簡単にできる必要があります
ユーザーは環境をカスタマイズし 新しい環境を素早く作成できます 素早い作成により複数プロジェクトが それぞれ専用の環境を持てます 依存関係やツールチェーンの 競合を心配せずに済みます
開発ライフサイクルでは異なるツールや 依存関係が必要になることがよくあります 永続的な環境があれば 追加ツールを時間をかけて 導入・活用できます 最後に、これらのLinux環境は 既存のワークフローに統合される必要があります 複数プラットフォーム向けの開発で 大きなコンテキストスイッチは不要です 新しいツールを 学ぶ必要はありません 別の環境をターゲットにする場合でも
Containerマシンの構築において これらの設計原則を念頭に置きました Containerマシンは 高速かつ軽量である必要があります 管理が簡単である必要があります 永続性を提供し、ユーザーが いつでも再アクセスできる必要があります そしてContainerマシンは macOSの拡張として感じられる必要があります これらの設計原則を踏まえて Containerマシンがクロスプラットフォーム ワークフローを向上させる方法を見ましょう Containerizationを基盤として 各Containerマシンは独自の軽量な 仮想マシン内で動作し containerと同じimageフォーマットを 使用します
container toolの一級機能で 使い慣れたUXを備えています container toolで作成したimageは 新しいContainerマシンの 出発点として使用できます
Containerマシンはステートフルで 加えた変更を保持します 作業中もその変更は維持されます 必要に応じてプロジェクトを 起動・停止しても Containerマシンは環境が 中断した箇所から再開できるようにします
自動ユーザーマッピングと 共有ファイルシステムのサポートにより Linux環境に入る機能や ターミナルのどこにいても Containerマシンは スムーズな移行を提供します macOSからLinuxへ、 またLinuxからmacOSへの移行です では、Containerマシンの 実際の動作を見ていきましょう container machineから始めましょう
実行できるアクションの 概要が表示されます create、run、stopなどが含まれます 新しいContainerマシンを作成するには container machine createを使用します
名前を指定してMacの デフォルトmachineに設定します これにより、コマンドごとに 名前を指定する必要がなくなります
Containerマシンはcontainerと同じ OCI imageを使用します よく使われるcontainer imageに alpineがあります
Containerマシンが作成されました
次に、このContainerマシン内で コマンドを実行してみます container machine runを使用して echoコマンドを実行します
今度はunameで試してみましょう
macOSでunameを実行すると Darwinと表示されます
container machine run unameは Linuxと出力し実行環境を示します
Containerマシンは ユーザー名を自動的にミラーします MacのカレントディレクトリもMacから 自動的に反映されます Macでwhoamiを実行すると Michaelが返ってきます
pwdを実行するとmacOSの ホームディレクトリにいることがわかります
Containerマシン内で インタラクティブシェルを起動してみましょう container machine runは 追加の引数なしで インタラクティブセッションを開始します
Containerマシン内でwhoamiとpwdを 実行すると Macと同じユーザー名と パスが返ってきます
素晴らしい
自動ユーザー作成と ファイルシステム共有 一貫した作業ディレクトリにより シームレスなエクスペリエンスが生まれます 構築しているアプリを見ながら さらに詳しく探っていきましょう Linuxで実行・デプロイしたい Vaporベースのwebサーバーがあります ワークフローとして、MacのXcodeで プロジェクトを編集します macOSのツールを使用して アプリの画像を編集します Linuxでビルドして実行し SafariからwebサーバーにアクセスしmacOSで 変更をテストします このアプリに取り組んでみましょう ターミナルでlsを実行すると プロジェクトファイルが表示されます
Package.swift、ソースコード、 アセットを含むPublicディレクトリがあります swiftツールチェーンを搭載した Containerマシンがあります container machine listを実行すると 名前が表示されます すべてのContainerマシンのIPアドレスと リソース情報が表示されます
後で使うためにIPアドレスを コピーしておきます
Linuxでアプリをテストする 準備ができました インタラクティブシェルから 始めます Containerマシン内で container machine runを実行します
自動ディレクトリ共有により プロジェクトファイルはすべて利用できます
Containerマシンは 独立したネットワークを持っています MacのSafariがwebサーバーに アクセスするには Containerマシン内で動作している Vaporが外部インターフェースで リッスンするようにする必要があります Xcodeでサーバーの設定を 更新しましょう
設定のホスト名をContainerマシンの IPアドレスに設定します この値は先ほどコピーしました このファイルはMacのXcodeで 編集しました しかし変更はすでにContainerマシンで 利用できる状態になっています ターミナルに戻ると アプリをコンパイルして実行する 準備ができました
サーバーが起動したので Safariでサイトを確認しましょう SafariをMacで開いてContainerマシンの IPを貼り付けます アドレスバーに入力します ポート8080も追加します
アクセスに成功しました 一日中見ていられますね
でも最後にもう一つ変更を加えます Icon Composerを使用して 画面のストレージアイコンを作成しました アイコンの背景を グラデーションに変更します 既存のアイコンファイルを Icon Composerで開いて変更します
このアイコンをプロジェクトにエクスポートし 既存のファイルを上書きします
Containerマシンにファイルを コピーせずに Safariでページを更新すると 更新されたアイコンが自動的に表示されるはずです Safariに戻りましょう
更新が反映されています
Containerマシンはcontainerの 使いやすさと速度を基盤とし 仮想マシンの永続性も 兼ね備えています シームレスな統合により Linux環境を提供します まるでMacの拡張のように 感じられます Containerマシンをぜひ 試してみてください GitHubからcontainer toolの 最新リリースをダウンロードしてください フィードバックをお待ちしています ご視聴ありがとうございました
-
-
4:41 - Viewing container machine commands
container machine -
5:00 - Creating a new container machine
container machine create --name demo --set-default alpine -
5:39 - Echo hi
container machine run echo hi -
5:57 - Running uname
container machine run uname -
6:28 - Start interactive shell
container machine run -
8:01 - List container machines
container machine list -
8:22 - Start interactive shell
container machine run -
9:13 - Run the application
swift run
-
-
- 0:00 - Introduction
Introduces Container machine, a new feature built on the Containerization framework that provides a fast, lightweight, and persistent Linux environment seamlessly integrated with macOS.
- 1:19 - Containerization
Reviews the open-source Containerization Swift framework — its architecture, VM-based isolation, sub-second start times, and the companion container CLI tool.
- 2:14 - Design principles
Outlines the four principles that shaped Container machine: fast and lightweight, simple to create and operate, persistent across sessions, and a seamless extension of macOS.
- 3:36 - Container machine
Explores how Container machine builds on Containerization with OCI image support, first-class integration into the container tool, stateful persistence, and automatic user and filesystem mirroring.
- 4:36 - Demo
Demonstrates creating and running a Container machine, executing commands with automatic user and directory mirroring, and building and testing a Vapor web server from macOS using Xcode, Icon Composer, and Safari.
- 10:33 - Next steps
Recaps Container machine key strengths and encourages viewers to download the latest container 1.0 release from GitHub to try it in their workflow.