夜の開発者デスク。ウルトラワイドモニタにダーク背景のターミナルが表示されている。smolvmのCLI操作を象徴するイメージ

インストール

smolvmの導入方法は2通りあります。最も簡単なのは公式インストールスクリプトの実行で、macOS・Linuxのどちらでも1行で完了します。もう1つは、GitHub Releasesからプラットフォーム別のバイナリを直接ダウンロードする方法で、社内ミラーやエアギャップ環境への配布、バージョン固定運用に適しています。

terminal — install
# 方法1: インストールスクリプト(推奨)
$ curl -sSL https://smolmachines.com/install.sh | bash

# 方法2: GitHub Releasesからバイナリを取得して配置
#   https://github.com/smol-machines/smolvm/releases

# インストール確認
$ smolvm --version
smolvm 1.4.7

前提条件はハイパーバイザが利用可能であることのみです。macOSはHypervisor.framework(標準搭載)、LinuxはKVM(/dev/kvmへのアクセス権限)、WindowsはWHPの有効化が必要です。Dockerデーモンは不要である点は、コンテナランタイムとの大きな違いです。イメージの取得・展開はsmolvm自身が行います。

1. インストール install.sh または Releasesバイナリ 2. イメージ指定 Docker Hub / GHCR / docker save / ディレクトリ 3. VM実行 machine run で即起動 起動 < 200ms Dockerデーモン不要 — smolvm単体でイメージ取得からVM起動まで完結
図1: 導入から実行までの3ステップ

一時VM実行:machine run

最初に試すべきは、使い捨てVMを起動するmachine runです。指定したOCIイメージをrootfsとするマイクロVMが起動し、コマンドの実行が終わるとVMは自動的にクリーンアップされます。ホスト側に状態が残らないため、検証や信頼できないコードの実行に最適です。

terminal — ephemeral vm
# Alpine LinuxのVMを起動してコマンドを1つ実行(終了後に自動破棄)
$ smolvm machine run --net --image alpine -- sh -c "echo hello"
hello

# Python 3.12環境でスクリプトを検証
$ smolvm machine run --image python:3.12-alpine -- python3 --version
Python 3.12.x

ここで注目すべきは--netフラグです。smolvmのVMは既定でネットワークが無効であり、外部と通信させたい場合にのみ明示的に有効化します。さらに--allow-hostでegress許可リストを指定すれば、特定のホストとの通信だけを許可する運用も可能です(詳細はセキュリティ解説を参照)。安全側を既定とするこの設計は、サンドボックス用途を最初から想定したものです。

[PR]
[PR]

永続マシン管理:create / start / stop / exec

開発環境のように状態を保持したい場合は、名前付きの永続マシンを作成します。VM内にインストールしたパッケージや作成したファイルは、stopしてもstart後に維持されます

terminal — persistent machine
# ネットワーク有効の永続マシンを作成
$ smolvm machine create --net --name myvm

# 起動 / 停止
$ smolvm machine start myvm
$ smolvm machine stop myvm

# 起動中のマシンで対話シェルを実行
$ smolvm machine exec --name myvm -it -- /bin/sh
/ #
作成済み machine create 実行中 exec -it 利用可 停止中 状態は保持される start stop start(状態を引き継いで再開) インストール済みパッケージ・ファイルは stop → start 後も維持
図2: 永続マシンのライフサイクル

永続マシンは「毎朝startして使い、終業時にstopする開発環境」のような使い方に向いています。コンテナと異なりVM全体が保存されるため、OSレベルの設定変更やカーネルモジュールに依存しないミドルウェア構成もそのまま維持されます。チームで同じ環境を配りたい場合は、Smolfileによる宣言的構成や、.smolmachine形式でのスナップショット配布と組み合わせると効果的です。

ネットワーク・GPU・リソースの主要オプション

基本操作を押さえたら、次はワークロードに合わせたオプション調整です。実務でよく使う主要オプションを整理します。

オプション意味既定値
--netネットワークを有効化(TCP/UDPのみ、ICMP不可)無効
--allow-hostegress通信を許可するホストを指定(許可リスト方式)
--gpuvirtio-gpu/VenusによるGPUアクセラレーションを有効化無効
--imagerootfsとして使うOCIイメージを指定
-it対話端末を割り当て(execと組み合わせ)
vCPU / メモリリソース割り当て(弾性メモリで実消費分のみコミット)4 vCPU / 8GiB
terminal — options
# GPUを有効化して機械学習ワークロードを実行
$ smolvm machine run --gpu --image my-ml-image -- python3 infer.py

# egress許可リスト付きでネットワークを有効化
$ smolvm machine run --net --allow-host pypi.org \
    --image python:3.12-alpine -- pip install requests

リソース既定値の4 vCPU・8GiBは一見大きく感じられますが、アーキテクチャ解説で述べたとおり、virtio balloonの弾性メモリによりホストの実コミットは実消費分だけです。割り当てを気にして小さく絞るより、既定のまま多数のVMを起動する運用の方がsmolvmの設計に合っています。

運用上の注意点

導入初期につまずきやすいポイントを挙げておきます。

  • ICMPは通らない: ネットワーク疎通確認にpingは使えません。TCP/UDPベース(curl等)で確認してください。
  • ボリューム共有はディレクトリ単位: 単一ファイルのマウントはできないため、共有したいファイルはディレクトリに入れて渡します。
  • macOSの権限: 自前ビルドを使う場合はコード署名とentitlementsの設定が必要です。公式バイナリを使えば意識する必要はありません。
  • Windowsの機能差: GPU・fork・スナップショットが未対応です。これらが必要な場合はmacOS/Linuxを利用してください。

next_step

CLIオプションが増えてきたら、構成をファイルに落とし込む段階です。次のSmolfileによる宣言的環境構築で、チームで共有可能な構成管理の方法を解説します。

[PR]
[PR]