> ## Documentation Index
> Fetch the complete documentation index at: https://bunnynet-cb9733c2-add-address-verification-note.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploy an App

> Deploy a containerized application to Magic Containers from a single page. Pick an image, configure endpoints, volumes, and environment variables, choose a region, and deploy.

Deploying to Magic Containers happens on a single page. You pick a container image, configure the container, choose a region, and click **Deploy**. If you need more regions or different scaling settings, you can configure them after your app is deployed.

Public images from Docker Hub and GitHub work out of the box. To deploy a private image, connect the registry first. See [Image Registries](/magic-containers/image-registries).

<Steps>
  <Step title="Open the Deploy App page">
    In the [bunny.net dashboard](https://dash.bunny.net), go to **Magic Containers** and click **+ Add App**.

    <Frame>
      <img src="https://mintcdn.com/bunnynet-cb9733c2-add-address-verification-note/AgCJcySoaDdB4UEA/images/magic-containers/deploy-select-image.png?fit=max&auto=format&n=AgCJcySoaDdB4UEA&q=85&s=8918754fa100eae126a397d39b3a7f13" alt="Deploy App page in Magic Containers" width="1038" height="579" data-path="images/magic-containers/deploy-select-image.png" />
    </Frame>

    The page opens with one empty container named `Container-1`. When you select an image, the container is renamed after the image automatically. Click the pencil icon to give it a different name.
  </Step>

  <Step title="Select a container image">
    Use the search field to find a container image. The search covers every registry connected to your account: the public Docker Hub and GitHub registries, plus any private Docker Hub or GitHub registries you've added. The registry chips above the search field show which registries are included. Click **+ Add Registry** to connect a private registry without leaving the page.

    Once you select an image, its available tags are displayed. If a `latest` tag exists, it is selected automatically. Click any other tag to switch, or use the search button to find a tag that isn't listed.

    <Frame>
      <img src="https://mintcdn.com/bunnynet-cb9733c2-add-address-verification-note/AgCJcySoaDdB4UEA/images/magic-containers/deploy-configure-container.png?fit=max&auto=format&n=AgCJcySoaDdB4UEA&q=85&s=9f0f42a5ccd369ebc45c3dd78d2152b9" alt="Container configuration with image, endpoints, volumes, and environment variables" width="986" height="909" data-path="images/magic-containers/deploy-configure-container.png" />
    </Frame>

    <Info>
      Magic Containers only supports images built for the **linux/amd64** architecture.
    </Info>
  </Step>

  <Step title="Configure endpoints">
    Endpoints define how your container is reachable from the internet. Two endpoint types are available:

    * **CDN**: routes traffic through bunny.net's CDN edge network. Best for HTTP(S) services that benefit from caching and global distribution.
    * **Anycast IP**: exposes your container directly on a globally anycast IP. Better suited for non-HTTP protocols or latency-sensitive TCP and UDP services.

    Click **+ CDN** or **+ Anycast IP** to add an endpoint, then give it a name and set the container port. This is the port your application listens on inside the container. Add more endpoints if your app exposes multiple ports.

    When an image declares known ports, an endpoint is pre-filled for you. Review it before deploying.

    <Warning>
      Endpoints make your container publicly accessible. Only create endpoints for services that are meant to be public-facing, such as web servers or APIs. **Do not expose private services** such as databases, caches, or internal APIs through an endpoint.
    </Warning>

    See [Endpoints](/magic-containers/endpoints) for details on each endpoint type.
  </Step>

  <Step title="Add persistent volumes (optional)">
    If your container needs to write data that should survive restarts and redeployments, click **+ Volume** under **Persistent volumes**. Give the volume a name, set the mount path inside the container, and set its size in GB.

    Leave this section empty if your container is stateless. See [Persistent Volumes](/magic-containers/persistent-volumes) for how volumes behave across regions and instances.
  </Step>

  <Step title="Set environment variables">
    Under **Environment variables**, configure any runtime settings your container needs. Click **+ Variable** to add a key and value one at a time, or click **Raw editor** to paste multiple variables in `KEY=value` form.

    For public Docker Hub images, Magic Containers inspects the image metadata and pre-fills known environment variables with their default values. Review each one before deploying. Pay special attention to:

    * **Passwords and secrets**: replace any placeholder values with strong, unique secrets. Never leave default or example passwords in production.
    * **Paths and ports**: confirm that pre-filled values match your actual container configuration.

    See [Environment Variables](/magic-containers/environment-variables) for more.
  </Step>

  <Step title="Add more containers (optional)">
    Click **+ Add container** to add another container to the same app. Each container gets its own image, endpoints, volumes, and environment variables.

    All containers in an app run in the same pod and share a network namespace, so they can reach each other on `localhost`. They must listen on different ports. See [Multi-Container Apps](/magic-containers/multi-container).
  </Step>

  <Step title="Name your app and pick a region">
    Under **App name**, enter a name for the app. The name of the first image is pre-filled as a default.

    Under **Region**, the region geographically closest to you is selected automatically. Change it if you need to deploy closer to your users or a specific data source. See [Regions](/magic-containers/regions) for the full list.

    After deploying, you can add regions and configure scaling from the app's **Regions and Scaling** settings. See [Autoscaling](/magic-containers/autoscaling).
  </Step>

  <Step title="Deploy">
    Once everything looks good, click **Deploy**. Your app is created, the containers are scheduled, and the endpoints are activated.

    You'll be taken to the app overview where you can monitor the deployment status.

    <Frame>
      <img src="https://mintcdn.com/bunnynet-cb9733c2-add-address-verification-note/6tocI-adU4uSkUGv/images/docs/088796ede6fd82ee1b4a899568fcb21b77a13c6f394f40ae0a5b1b5e4f1cedab-image.png?fit=max&auto=format&n=6tocI-adU4uSkUGv&q=85&s=aa388ece6cd8f31ff7af06660988a2db" alt="App overview page" width="2260" height="1448" data-path="images/docs/088796ede6fd82ee1b4a899568fcb21b77a13c6f394f40ae0a5b1b5e4f1cedab-image.png" />
    </Frame>
  </Step>
</Steps>

<Info>
  Trial accounts must add valid payment card details before deploying, and are limited to one application, three regions, and three instances per region. See [Limits](/magic-containers/limits#trial-accounts).
</Info>
