# イメージ

マシンが起動するイメージ。SSH と定番のツールを備えた Arrakis イメージか、公開またはプライベートの独自イメージです。

## Arrakis イメージ

ほかのイメージを選ばない限り、マシンは Arrakis イメージで起動します。どれも公式のベースイメージに、SSH、ログインバナー、日常的に使うツール（git、git-lfs、tmux、htop、nvtop、rsync、curl、wget、jq、エディター）を加えたものです。どの SSH セッションでも Python にパスが通っています。

| イメージ | 内容 | Docker イメージ |
|---|---|---|
| PyTorch 2.14（デフォルト） | PyTorch 2.14.1, CUDA 13.0, Python 3.12, Ubuntu 24.04 | `goodailabs/arrakis:pytorch-2.14.1-cuda13.0` |
| PyTorch 2.14 と CUDA ツールキット | 上記に加えて nvcc、CUDA ヘッダー、コンパイラー | `goodailabs/arrakis:pytorch-2.14.1-cuda13.0-devel` |
| CUDA 13.0 ツールキット | CUDA 13.0.3、cuDNN 9、nvcc、Python 3.12、Ubuntu 24.04 | `goodailabs/arrakis:cuda-13.0.3-devel` |
| Ubuntu 26.04 | Python 3.14。GPU ドライバーはマシン側のものを使います | `goodailabs/arrakis:ubuntu-26.04` |

CUDA 13.0 は `pip install torch` で入るビルドと同じなので、PyTorch 向けにビルドされた wheel がそのまま使えます。Blackwell を含め、Arrakis のすべてのマシンで動作します。どのマシンにも 580 系以降の NVIDIA ドライバーが入っています。イメージは Docker Hub で公開されているので、手元のコンピューターでも同じイメージをプルできます。デフォルトは `goodailabs/arrakis:latest` です。

ログインすると、マシンの GPU、イメージ、ディスクの空き容量が表示されます：

```text
  6 × NVIDIA RTX A4000, 16 GB each
  PyTorch 2.14.1, CUDA 13.0, Python 3.12.3, Ubuntu 24.04.5 LTS
  32 CPU cores, 125 GB memory, 412 GB free in /workspace
```

作業は `/workspace` で行います。マシンを停止すると、`/workspace` を含め、マシン上のすべてが削除されます。

## 独自のイメージ

vLLM、SGLang、NVIDIA NGC のコンテナ、チーム独自のイメージなど、公開・プライベートを問わずどんなイメージでも使えます。

- **Images** で **Add an image** を選び、`vllm/vllm-openai:v0.11.0` のように `docker pull` に渡す形式で貼り付けます。公開イメージなら、レンタル時に **Your own image** を選んで指定することもできます。
- Arrakis はまずイメージのレジストリに問い合わせます。イメージが存在し、プルでき、linux/amd64 のビルドがあることが条件です。入力ミスや誤ったトークンは、課金の前に拒否されます。
- 対応レジストリ：Docker Hub、GitHub（`ghcr.io`）、Amazon ECR と ECR Public、Google（Artifact Registry と `gcr.io`）、Azure（`azurecr.io`）、NVIDIA NGC（`nvcr.io`）、Quay、GitLab、Microsoft（`mcr.microsoft.com`）。独自のレジストリも使えます：Harbor、Artifactory、Nexus、セルフホストの GitLab や Quay など、公開 DNS 名で到達できるレジストリならどれでも使えます（例：`registry.example.com:5000/team/app:v1`）。
- どのイメージにも起動時に SSH が追加されるので、いつもと同じように root でログインできます。イメージにはシェルが必要です。
- マシンでの初回起動時にイメージがダウンロードされます。大きなイメージほど時間がかかり、12 GB のイメージなら、遅いネットワークでは 10〜20 分かかることがあります。

### プライベートイメージ

イメージを追加するときに **It's private: log in to pull it** にチェックを入れ、`docker login` に渡すのと同じログイン情報を入力します。Arrakis は保存前にそのログイン情報でイメージを確認し、暗号化して保管し、レンタル時にこのイメージをプルするためだけに使います。パスワードが再び表示されることはありません。

| レジストリ | ユーザー名 | パスワードまたはトークン |
|---|---|---|
| Docker Hub | Docker Hub のユーザー名 | 読み取り専用の個人用アクセストークン |
| GitHub（`ghcr.io`） | GitHub のユーザー名 | `read:packages` のみを付与したクラシックトークン |
| Amazon ECR（`<account>.dkr.ecr.<region>.amazonaws.com`） | アクセスキー ID | 対応するシークレットアクセスキー |
| Google（`<region>-docker.pkg.dev`、`gcr.io`） | `_json_key` | Artifact Registry Reader ロールを付与したサービスアカウントの JSON キー |
| Azure（`<name>.azurecr.io`） | リポジトリトークンまたはサービスプリンシパル | そのパスワード（プル権限のみ） |
| NVIDIA NGC（`nvcr.io`） | `$oauthtoken` | NGC の API キー |
| GitLab（`registry.gitlab.com`） | デプロイトークンのユーザー名 | `read_registry` を付与したデプロイトークン |
| Quay | ロボットアカウント | そのトークン |
| 独自のレジストリ | そのレジストリのユーザー名 | そのパスワードまたはトークン |

- **Amazon ECR**：イメージのプルしかできない AWS ユーザーを使ってください（`AmazonEC2ContainerRegistryReadOnly` ポリシー）。Arrakis はレンタルのたびに、キーを `aws ecr get-login-password` が出力するものと同じ、12 時間有効な新しいプル用ログイン情報に交換します。そのため、マシンがキーそのものを目にすることはありません。
- **独自のレジストリ**：マシンはどこにあってもレジストリから直接プルするため、レジストリは公開インターネット上で、公的な認証局（Let's Encrypt など）の証明書を使った HTTPS で応答する必要があります。VPN や IP 許可リストの内側にあるレジストリには到達できず、自己署名証明書のレジストリは拒否されます。
- 読み取り専用のトークンを使ってください。マシンはそのトークンでプルし、レンタル終了後もイメージがそのマシンにキャッシュとして残る場合があります。シークレットはイメージに含めず、実行時に渡してください。
- トークンを変更するには、イメージの横にある **Change login** を選ぶか、新しいトークンで同じイメージをもう一度保存します。イメージを削除すると、Arrakis が保管していたそのログイン情報はすべての場所から削除されます。

### 起動時の動作

| 選択肢 | 実行されるもの | 用途 |
|---|---|---|
| Wait for me to log in（デフォルト） | 何も実行しません。マシンはログインを待ちます | 学習、ノートブックなど、SSH から始めるものすべて |
| Run the image's command | イメージ自身のエントリーポイントとコマンド | vLLM、TGI、SGLang などのサーバー |
| Run a command | 指定した 1 行のコマンド（例：`python -m http.server 8000`） | 自動で始まるジョブ |

コマンドが終了すると、そのマシンにはもう接続できません。迷ったら **Wait for me to log in** を選んでください。

マシン上のサーバーには SSH 経由でアクセスします：

```sh
ssh -L 8000:localhost:8000 root@<host> -p <port>
curl localhost:8000/v1/models
```

### 環境変数

イメージには `KEY=value` の組を 1 行に 1 つずつ追加できます。これらはイメージと一緒に保存されるため、シークレットは含めず、代わりに SSH で設定してください（例：セッション内で `export HF_TOKEN=...`）。

## CLI、API、エージェントから

```sh
arrakis images list
arrakis images add vllm/vllm-openai:v0.11.0 --start image
arrakis instances create --node-id <node> --image vllm/vllm-openai:v0.11.0 --start image --termination-hours 2
```

プライベートイメージにはログイン情報を添えます。トークンは `docker login` と同じく標準入力で渡します：

```sh
echo "$GITHUB_TOKEN" | arrakis images add ghcr.io/acme/trainer:v3 --username acme-bot --password-stdin
arrakis instances create --node-id <node> --template-id <image id> --termination-hours 2
```

```sh
curl -X POST $ARRAKIS_URL/v1/instances -H "Authorization: Bearer $ARRAKIS_TOKEN" -H "Content-Type: application/json" \
  -d '{"node_id": "<node>", "name": "vllm", "termination_hours": 2, "ssh_public_key": "ssh-ed25519 AAAA...",
       "image": "vllm/vllm-openai:v0.11.0", "start": "image"}'
```

- `GET /v1/templates` は Arrakis イメージと自分のイメージを一覧表示し、`POST /v1/templates` はイメージを保存します（`image`、`start`、`command`、`environment`、プライベートイメージの場合は `registry_username` と `registry_password`）。パスワードは書き込み専用で、レスポンスに表示されるのは `private` と `registry_username` です。両方を指定して `PATCH /v1/templates/{id}` を呼ぶと、ログイン情報が置き換わります。
- `POST /v1/instances` は、`template_id`、または任意の公開 `image` と `start` の組み合わせで起動します。
- MCP では、`list_images` がイメージを一覧表示し（プライベートイメージには印が付きます）、`rent_gpu` は `template_id` または `image` を受け付けます。

その他：[すべてのドキュメント](/ja/docs.md) · [OpenAPI](/openapi.json) · [llms.txt](/ja/llms.txt)
