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

# Deploy a prebuilt image

> Run an image you already built, from a public or private registry.

A service can run an image you built elsewhere. There is no build phase, so a deploy is a
pull and a rollout.

## From the console

Select **New**, then **Docker Image**. Enter a pullable reference such as
`ghcr.io/acme/api:1.2`, the port the container listens on, and its CPU and memory.

## From a spec

```yaml slipway.yaml theme={"system"}
version: 1

services:
  - name: api
    image: ghcr.io/acme/api:1.2
    ports:
      - port: 8080
        public: true
    healthCheckPath: /healthz
    env:
      LOG_LEVEL: info
```

`image:` and the build fields are mutually exclusive. A service declares one source or the
other.

The image must be `linux/amd64`, or a multi-arch manifest that includes it.

## Private registries

Add the credentials once under **Settings → Registries**. slipway attaches them to every
pull in the organization that needs them, and there is nothing to reference from the spec.

| Registry | Hostname | Username | Password |
| - | - | - | - |
| Docker Hub | `index.docker.io` | Your username | An access token |
| GHCR | `ghcr.io` | Your GitHub username | A PAT with `read:packages` |
| Amazon ECR | `<acct>.dkr.ecr.<region>.amazonaws.com` | `AWS` | `aws ecr get-login-password` output |

See [Private registries](/organization/registries).

## Tags are pinned

slipway resolves the reference at deploy time and pins what it resolved. Pushing a new image
to the same tag does not redeploy anything, including `:latest`.

To pick up a new image at the same tag, redeploy the service. To move to a different image,
change the reference and deploy.

Because the tag is pinned, a rollback re-runs the exact image the previous deploy used.

## Deploying from CI

An image-backed service has no branch to watch, so it does not auto-deploy. Trigger a
redeploy from your pipeline after pushing a new image, using the
[MCP server](/integrations/mcp) or the console.

## Mixing with built services

A project can hold built services, image services and managed databases together. They share
one network and reach each other by name:

```yaml slipway.yaml theme={"system"}
version: 1

databases:
  - name: db
    engine: postgres
    diskSizeGB: 10

services:
  - name: api
    image: ghcr.io/acme/api:1.2
    ports:
      - port: 8080
        public: true
    env:
      DATABASE_URL: ${service.db.url}

  - name: site
    type: static
    runtime: node
    buildCommand: npm ci && npm run build
    publish: dist
    env:
      VITE_API_URL: ${service.api.public_url}
```

## Next steps

> **[Deploy from an image](/services/from-an-image)**
>
> Configuration, pinning and what image services cannot do.

> **[Marketplace](/projects/marketplace)**
>
> Ready-made apps that already have a spec.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.