スナップショット
スナップショット(サンドボックス作成に使う再利用可能な事前設定イメージ/テンプレート)は、Daytona のサンドボックス(Daytona が管理する隔離された一時的な計算環境)に必要な依存関係、ツール、環境設定、リソース要件をすべて含む事前構成済みテンプレートです。Daytona は、標準的な Docker または OCI 互換イメージからのスナップショット作成をサポートします。
スナップショットの作成
サンドボックスを起動する際、Daytona は python
、node
、pip
ならびに一般的な pip パッケージなどの有用なユーティリティがプリインストールされたシンプルなイメージに基づくスナップショットを使用します。詳細は以下を参照してください。
この挙動は上書き可能です。ダッシュボードにアクセスし、Snapshots をクリックしてから Create Snapshot
を選択すると、カスタムスナップショットを作成できます。
スナップショットのイメージには、Docker Hub の alpine:3.21.3
や debian: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",))
const sandbox = await daytona.create({ 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()
import { Daytona } from '@daytonaio/sdk'
async function main() { // Initialize the Daytona client const daytona = new Daytona()
try { // Create the Sandbox instance const sandbox = await daytona.create({ snapshot: "my-snapshot-name", }) // Run the code securely inside the Sandbox const response = await sandbox.process.codeRun( 'print("Sum of 3 and 4 is " + str(3 + 4))', ) if (response.exitCode !== 0) { console.error('Error running code:', response.exitCode, response.result) } else { console.log(response.result) } } catch (error) { console.error('Sandbox flow error:', error) } finally { // Clean up the Sandbox await sandbox.delete() }}
main()
スナップショットのリソース
スナップショットには Daytona サンドボックスのリソース要件が含まれます。デフォルトでは、Daytona サンドボックスは 1 vCPU、1GB RAM、3GiB ディスクを備えています。
より高いパフォーマンスが必要ですか?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", ))
import { Daytona, Image } from "@daytonaio/sdk";
async function main() { const daytona = new Daytona();
// カスタムリソースを指定してスナップショットを作成 await daytona.snapshot.create( { name: "my-snapshot", image: Image.debianSlim("3.13"), resources: { cpu: 2, memory: 4, disk: 8, }, }, { onLogs: console.log } );
// カスタムスナップショットからサンドボックスを作成 const sandbox = await daytona.create({ snapshot: "my-snapshot", });}
main();
プライベートレジストリのイメージ
一般公開されていないイメージからスナップショットを作成するには、まずそのイメージのプライベートコンテナレジストリを追加します。
- ダッシュボードのRegistriesページに移動
Add Registry
ボタンをクリック- 適切なカスタム名、URL、ユーザー名、パスワード、プロジェクト(該当する場合)を入力
- コンテナレジストリを作成したら、Snapshotsページに戻る
- スナップショット作成時は、レジストリ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/DockerfileStep 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 が使用するデフォルトのスナップショットは、python
と node
、それぞれの 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)