コンテンツにスキップ

スナップショット

スナップショット(サンドボックス作成に使う再利用可能な事前設定イメージ/テンプレート)は、Daytona のサンドボックス(Daytona が管理する隔離された一時的な計算環境)に必要な依存関係、ツール、環境設定、リソース要件をすべて含む事前構成済みテンプレートです。Daytona は、標準的な Docker または OCI 互換イメージからのスナップショット作成をサポートします。

スナップショットの作成

サンドボックスを起動する際、Daytona は pythonnodepip ならびに一般的な pip パッケージなどの有用なユーティリティがプリインストールされたシンプルなイメージに基づくスナップショットを使用します。詳細は以下を参照してください。

この挙動は上書き可能です。ダッシュボードにアクセスし、Snapshots をクリックしてから Create Snapshot を選択すると、カスタムスナップショットを作成できます。

スナップショットのイメージには、Docker Hub の alpine:3.21.3debian:12.10 のような公開イメージの名前とタグ、または別の公開コンテナレジストリ(例: my-public-registry.com/custom-alpine:3.21)のイメージを指定できます。

entrypoint フィールドは任意です。イメージに長時間稼働する entrypoint がない場合、Daytona は自動的に sleep infinity を実行して、作成直後にコンテナが即時終了しないようにします。

スナップショットがプルおよび検証され、Active 状態になれば使用可能です。使用するカスタムスナップショットを指定するために、CreateSandboxFromSnapshotParams オブジェクトを定義します:

sandbox = daytona.create(CreateSandboxFromSnapshotParams(
snapshot="my-snapshot-name",
))

完全な例:

from daytona import Daytona, CreateSandboxFromSnapshotParams
daytona = Daytona()
sandbox = daytona.create(CreateSandboxFromSnapshotParams(
snapshot="my-snapshot-name",
))
response = sandbox.process.code_run('print("Sum of 3 and 4 is " + str(3 + 4))')
if response.exit_code != 0:
print(f"Error running code: {response.exit_code} {response.result}")
else:
print(response.result)
sandbox.delete()

スナップショットのリソース

スナップショットには Daytona サンドボックスのリソース要件が含まれます。デフォルトでは、Daytona サンドボックスは 1 vCPU1GB RAM3GiB ディスクを備えています。

より高いパフォーマンスが必要ですか?Resources クラスを使用して、必要な CPU、メモリ、ディスク容量を正確に指定できます。

利用可能なリソースと上限はダッシュボードで確認してください。

from daytona import (
Daytona,
CreateSnapshotParams,
Image,
Resources,
CreateSandboxFromSnapshotParams,
)
daytona = Daytona()
# カスタムリソースを指定してスナップショットを作成
daytona.snapshot.create(
CreateSnapshotParams(
name="my-snapshot",
image=Image.debian_slim("3.12"),
resources=Resources(
cpu=2,
memory=4,
disk=8,
),
),
on_logs=print,
)
# カスタムスナップショットからサンドボックスを作成
sandbox = daytona.create(
CreateSandboxFromSnapshotParams(
snapshot="my-snapshot",
)
)

プライベートレジストリのイメージ

一般公開されていないイメージからスナップショットを作成するには、まずそのイメージのプライベートコンテナレジストリを追加します。

  1. ダッシュボードのRegistriesページに移動
  2. Add Registryボタンをクリック
  3. 適切なカスタム名、URL、ユーザー名、パスワード、プロジェクト(該当する場合)を入力
  4. コンテナレジストリを作成したら、Snapshotsページに戻る
  5. スナップショット作成時は、レジストリURLとプロジェクト名(該当する場合)を含むプライベートイメージ名全体を入力すること(例: my-private-registry.com/<my-project>/custom-alpine:3.21

この先の手順は同じです。CreateSandboxFromSnapshotParamsのフィールドにそのカスタムスナップショットを指定すれば、追加の認証は不要です。

プライベートな Docker Hub イメージの使用

プライベートな Docker Hub イメージを使用するには、Docker Hub の認証情報でコンテナレジストリを追加します。

  • Registry URL: docker.io を指定
  • Username: Docker Hub のユーザー名(プライベートイメージにアクセスできるアカウント)
  • Password: Docker Hub Personal Access Tokenを使用(アカウントのパスワードではない)
  • スナップショットの作成: レジストリを追加後、イメージ名としてフルイメージパスを指定してスナップショットを作成(例: docker.io/<username>/<image>:<tag>

ローカルイメージの使用

プライベートコンテナレジストリを手動で用意してイメージをプッシュする手間を避けるために、Daytona CLIを使ってローカルイメージやローカルの Dockerfile からスナップショットを作成し、サンドボックスで使用できます。

docker images を実行して使用したいイメージとタグが存在することを確認したら、daytona snapshot push <your_local_docker_image> コマンドでスナップショットを作成して Daytona にプッシュします。例:

ターミナルウィンドウ
daytona snapshot push custom-alpine:3.21 --name alpine-minimal

まだ目的のイメージをビルドしておらず、Dockerfile が用意できている場合は、SDK の宣言的ビルダー(Declarative Builder)を利用できます。詳しくはこちらをご覧ください。

また、CLI で実行する場合は、create--dockerfile フラグに使用したい Dockerfile のパスを渡すと、Daytona がスナップショット(Snapshot)をビルドします:

ターミナルウィンドウ
daytona snapshot create data-analysis01 --dockerfile ./Dockerfile --context ./requirements.txt
Building image from /Users/idagelic/docs/Dockerfile
Step 1/5 : FROM alpine:latest
...
⡿ Waiting for the Snapshot to be validated ...
...
✓ Use 'harbor-transient.internal.daytona.app/daytona/trying-daytona:0.0.1' to create a new sandbox using this Snapshot

スナップショットの削除

作成したカスタムスナップショットの削除は簡単です。Snapshots ページに移動し、削除したいスナップショットの行末にある三点アイコンをクリックして表示される Delete ボタンを選択してください。

デフォルトのスナップショット

Daytona が使用するデフォルトのスナップショットは、pythonnode、それぞれの LSP に加えて、以下の pip 事前インストール済みパッケージを含むイメージをベースにしています:

  • beautifulsoup4 (v4.13.3)
  • django (v5.1.7)
  • flask (v3.1.0)
  • keras (v3.9.0)
  • matplotlib (v3.10.1)
  • numpy (v2.2.3)
  • openai (v1.65.4)
  • opencv-python (v4.11.0.86)
  • pandas (v2.2.3)
  • pillow (v11.1.0)
  • pydantic-ai (v0.0.35)
  • requests (v2.32.3)
  • scikit-learn (v1.6.1)
  • scipy (v1.15.2)
  • seaborn (v0.13.2)
  • SQLAlchemy (v2.0.38)
  • transformers (v4.49.0)
  • anthropic (v0.49.0)
  • daytona_sdk (v0.11.1)
  • huggingface (v0.0.1)
  • instructor (v1.7.3)
  • langchain (v0.3.20)
  • llama-index (v0.12.22)
  • ollama (v0.4.7)