Loading...

Learn / Deploy

Deploy a Multi-Service App with Docker Compose

Have a docker-compose.yml with a web service, a worker and a database? cdn.com.tr turns it into managed container apps and add-ons — preview the plan, then apply it with one command. No cluster to run, no database to babysit.

8 min read Intermediate Updated

Deploy a Multi-Service App with Docker Compose

What you need

You need an app described by a docker-compose.yml — typically a web service, maybe a background worker, and backing services like a database and Redis — and a cdn.com.tr account. You will not run a Kubernetes cluster, manage a database server, or wire up TLS by hand. cdn.com.tr reads your compose file and maps each part to a managed piece: application services become container apps, and stateful services like Postgres, MySQL or Redis become managed add-ons that are backed up and injected into your apps as environment variables.

How your compose file is mapped

The idea is simple: everything that serves traffic or runs code becomes a container app, and everything that stores data becomes a managed add-on. A 'web' service becomes an app with a domain; a 'worker' becomes an app with no public port; a 'db' using a Postgres or MySQL image becomes a managed database; a 'redis' service becomes managed Redis. Your services keep talking to each other by name, and the connection details for the managed add-ons are provided to your apps automatically — so you delete the risky, self-hosted database container and let the platform run it.

A sample compose file

Here is a small multi-service app: a web API, a background worker, a Postgres database and Redis. Commit it to your repository as docker-compose.yml.

docker-compose.yml

services:
  web:
    build: .
    ports:
      - "8000:8000"
    environment:
      DATABASE_URL: postgres://app:secret@db:5432/app
      REDIS_URL: redis://redis:6379
    depends_on: [db, redis]

  worker:
    build: .
    command: ["python", "worker.py"]
    depends_on: [db, redis]

  db:
    image: postgres:16
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: app

  redis:
    image: redis:7

Preview the plan first

Before changing anything, ask cdn.com.tr what it would create. The preview reads your compose file and shows the plan: which services become container apps, which become managed add-ons, and how they connect. Nothing is created yet — you just see what will happen.

cdnctl — preview
cdnctl login
cdnctl accounts use <account_uuid>

cdnctl container compose preview --file docker-compose.yml
# web, worker  -> container apps
# db           -> managed database (postgres)
# redis        -> managed redis

Apply it

Happy with the plan? Apply it. cdn.com.tr creates the container apps and add-ons, wires the connection strings into your apps, and starts everything. You can also do this from the panel — import the compose file, review the plan, and confirm — but a single command keeps it in your CI or a script.

cdnctl — apply
cdnctl container compose apply --file docker-compose.yml --yes

# then, anytime:
cdnctl container apps list
cdnctl container apps logs --app <web_app_uuid> --tail 100

Domain, HTTPS and the edge

Point your domain at the web app and cdn.com.tr issues and renews SSL automatically. Your services now run as managed apps behind the CDN edge, with a WAF in front and traffic spikes absorbed at the edge; the database and Redis are managed and backed up. To ship an update, rebuild your image and apply again — a bad build keeps the previous version serving. You get a multi-service production deployment without operating a cluster or a database underneath it.

Good fits

Web + worker + queue apps

Apps with a web tier, background workers and a database map cleanly to apps plus managed add-ons.

Lifting an existing stack

Already have a working docker-compose.yml? Import it as-is instead of rebuilding your deployment from scratch.

Preview-then-apply changes

Preview shows exactly what will change before anything runs — safe to use from CI or a script.

Docker Compose deploy FAQ

Does it run docker-compose as-is on a VM?

No — it converts your compose file into managed resources: services become container apps and stateful services become managed add-ons. That means no VM to patch and a database that is backed up and operated for you, while your app keeps the same shape.

What happens to my database and Redis services?

A Postgres, MySQL or Redis service is turned into a managed add-on. The container from your compose file is not run as-is; instead the managed add-on provides the connection details to your apps as environment variables.

Can I see what will happen before applying?

Yes. 'cdnctl container compose preview' shows the full plan — which services become apps, which become add-ons, and how they connect — without creating anything. Apply only when the plan looks right.