> ## Documentation Index
> Fetch the complete documentation index at: https://io.net/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploy CaaS

> Flexible & High-Performance Containers built for rapid deployment and scalable AI workloads

[io.net](http://io.net) offers a simple and powerful interface for deploying containers using high-performance infrastructure. Whether you are running inference, training models, or hosting APIs, the Containers system gives you flexibility and speed.

This guide will help you deploy using IO Cloud API keys on our CaaS clusters. For detailed API usage, refer to our [API Reference](/reference/get-started-with-caas-api).

<Note>
  Support for *AWS ECR* private images is not available at this time for **CaaS**.
</Note>

<iframe className="w-full aspect-video rounded-xl" src="https://www.youtube.com/embed/IZ7qjUFucdo" title="Start Using IO Cloud: Your First Steps Explained" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen />

## Deploy Container

Click the **Deploy Container** button to launch a wizard that guides you through the deployment process.

<Frame>
  <img src="https://mintcdn.com/ionet-cca8037f/HFkfFyCkAaAMMbBx/images/docs/3516c8afcbb503d277926a87fd0571cdbb71614ebecd0f96d7ca551c007699db-Containers1.jpg?fit=max&auto=format&n=HFkfFyCkAaAMMbBx&q=85&s=d18cab212c7adc0377160b4ee96ee21c" alt={true} height="300" className="mx-auto" style={{ width:"60%" }} data-path="images/docs/3516c8afcbb503d277926a87fd0571cdbb71614ebecd0f96d7ca551c007699db-Containers1.jpg" />
</Frame>

## Container Deployment Wizard

### Step 1: Basic Deployment Settings

Configure your container:

* **Container Image** *(required)* Example: `myorg/myimage:latest`
* **Image Type**
  * Public Image
  * Private Image
* **Start Command** Enter the start command in JSON array format, example:

  <CodeGroup>
    ```json json theme={null}
    ["python3","-m","vllm.entrypoints.openai.api_server","--model"]
    ```
  </CodeGroup>
* **Traffic Port** *(required)* Default: `8000`
* **Environment Variables** Click **Add Variable** to define key-value pairs. Options:
  * Normal Variable
  * Private Variable You can add or remove variables as needed.

Once all required fields are completed, click **Next Step**.

<Frame>
  <img src="https://mintcdn.com/ionet-cca8037f/HFkfFyCkAaAMMbBx/images/docs/32a23e67af9f05a46df9f0f99498ac37b4f3dd415c94c99333f51cb3b6b179b4-Containers2.jpg?fit=max&auto=format&n=HFkfFyCkAaAMMbBx&q=85&s=ba859211275b5d884f3996da0febff69" alt="" className="mx-auto" style={{ width:"71%" }} width="1082" height="1070" data-path="images/docs/32a23e67af9f05a46df9f0f99498ac37b4f3dd415c94c99333f51cb3b6b179b4-Containers2.jpg" />
</Frame>

<Accordion title="Using Environment Variables in Entrypoints" icon="warning" iconType="duotone">
  To avoid deployment failures:

  * Always define environment variables in the `env_variables` section.
  * Do not substitute variables directly in the `entrypoint` or `args`.
  * When referencing variables in the entrypoint, **escape**`$`**as**   `$$`.

  Example:

  ```json theme={null}
  "entrypoint": [
    "sh", "-c", "echo 'Variable value: $${TEST_VAR}' && sleep 3600"
  ],
  "env_variables": {
    "TEST_VAR": "This is a test"
  }
  ```

  * **Correct:** `$${TEST_VAR}` prints the variable value inside the container.
  * **Incorrect:** `$TEST_VAR` may cause deployment failure.
  * Always use `env_variables` for variable management.

  <Note>
    For advanced users: There is a known issue where Terraform variable interpolation (`$`) may conflict with service-layer substitution. Escaping with `$$` resolves this issue.
  </Note>
</Accordion>

### Step 2: Select Your Cluster Processor + Location

Choose the hardware and region for your deployment:

* **Available GPUs** Search by GPU model and view:
  * GPU Model
  * GPUs per Container
* **Location Selection** After selecting a GPU, you'll see a list of locations showing:
  * Region (e.g. Canada, Germany)
  * Available containers per location

Once both **GPU** and **location** are selected, proceed to the **next step**.

<Frame>
  <img src="https://mintcdn.com/ionet-cca8037f/s2w54-m8LpJVz2ID/images/docs/fada87435d94daccfcaaa05513b5f3dc7e9a834e4a70ebb005bf2847734aed5f-Containers3.jpg?fit=max&auto=format&n=s2w54-m8LpJVz2ID&q=85&s=f1e941915a52bc36262d868a761aab73" alt="" className="mx-auto" style={{ width:"65%" }} width="1090" height="786" data-path="images/docs/fada87435d94daccfcaaa05513b5f3dc7e9a834e4a70ebb005bf2847734aed5f-Containers3.jpg" />
</Frame>

### Step 3: Summary

On the Summary page, the choices you made in the process are displayed. You must select the number of Containers and the duration of time that you will use them.

1. In the **No. of Containers** field, select the number of Containers in the dropdown. 2 Containers will increase the cost.
2. In the **Enter Duration** field, select the length of time: Hourly, Daily, or Weekly. To the right, you can increase the quantity.
3. Review all the details of your cluster, including the **Total Cost**.
4. Click **Deploy Cluster**.

<Frame>
  <img src="https://mintcdn.com/ionet-cca8037f/s2w54-m8LpJVz2ID/images/docs/f3057dcfd2153e35cc6333fa037c8e21fd14cba6f8b856c4890ed889652ffceb-Containers4.jpg?fit=max&auto=format&n=s2w54-m8LpJVz2ID&q=85&s=bde26634ae3614bdc9cb4c117d12c74b" alt="" className="mx-auto" style={{ width:"63%" }} width="1082" height="2260" data-path="images/docs/f3057dcfd2153e35cc6333fa037c8e21fd14cba6f8b856c4890ed889652ffceb-Containers4.jpg" />
</Frame>

### View Cluster

After payment is processed you can view your cluster loading.

<Frame>
  <img src="https://mintcdn.com/ionet-cca8037f/9uES21HxjDw9p-Ee/images/docs/b30fc8f-Cluster_load.png?fit=max&auto=format&n=9uES21HxjDw9p-Ee&q=85&s=06a1fa498f6a29f8a077ca73463074bd" alt="" width="2450" height="722" data-path="images/docs/b30fc8f-Cluster_load.png" />
</Frame>

Click **Return to Clusters** after your cluster is successfully deployed. The screenshot below is a detail page of your cluster.

<Frame>
  <img src="https://mintcdn.com/ionet-cca8037f/6jhzMWiJ6_JlNBB6/images/docs/81a933f12f6aceaf4230ec194f9c0eeb9b268d910ba86d03801bfb4c4fceefc7-Bitmap.jpg?fit=max&auto=format&n=6jhzMWiJ6_JlNBB6&q=85&s=09cb568a0e4c94406ae43175ff74fbb3" alt="" width="2171" height="1190" data-path="images/docs/81a933f12f6aceaf4230ec194f9c0eeb9b268d910ba86d03801bfb4c4fceefc7-Bitmap.jpg" />
</Frame>

> 🚧 Troubleshooting Container Issues
>
> If your container is not running, you do not need to delete the whole cluster. Instead, open the deployment settings, adjust any incorrect details (for example, the image name or registry credentials), and redeploy.
>
> This way, you avoid the minimum 1-hour charge for deleting and recreating a cluster.
>
> <img src="https://mintcdn.com/ionet-cca8037f/npZLUBS1u-f2Rolg/images/docs/cloud_caas/Containers9.jpg?fit=max&auto=format&n=npZLUBS1u-f2Rolg&q=85&s=4f14e2dc68ed187a021d0a33d7cbe16b" alt="Containers9 Jp" className="mx-auto" style={{ width:"87%" }} width="968" height="122" data-path="images/docs/cloud_caas/Containers9.jpg" />
