3.0 KiB
Naming
File naming
Every service uses compose.yml — the current Compose spec name, and the
shorter one. Not docker-compose.yml.
Names
A service directory is named after the software it runs. When two services
package the same software, the one that is not upstream's own image takes a
suffix naming its source — code-server-lsio for LinuxServer's code-server —
so both can coexist. The suffix is a directory name only, forced by the
conflict; it is not a name to copy anywhere else.
Prefer each tool's official image, for the main service and for every supporting container alike. Upstream's official compose file or Docker guide is a starting point, not a spec: adapt it to the conventions in these rules rather than copying its layout and names as they are.
Inside compose.yml, the main service is named after its image —
code-server, not code-server-lsio. The exception is an image whose name
is not a good identifier on its own — too generic, or longer than it needs to
be. Use a short name that still says which software it is: owncloud for
owncloud/server, since server alone could be anything; traffmonetizer
for traffmonetizer/cli_v2; hermes for nousresearch/hermes-agent. A
supporting container is named for its
role, so the software behind it can be swapped without renaming: db for any
database, cache for Redis, Valkey or Memcached, and a short role name such as
dockerproxy for anything else (see the examples below). Swapping Redis for
Valkey, MySQL for MariaDB, or one SQL database for PostgreSQL then leaves every
name, hostname and volume as it is.
Role names in use or likely, as examples only — any short name that says what the container does is fine, and this list does not limit the choice:
| Role name | Typical software |
|---|---|
db |
PostgreSQL, MySQL, MariaDB, MongoDB, pgvector |
cache |
Redis, Valkey, Memcached, KeyDB, Dragonfly |
queue / broker |
RabbitMQ, NATS, Kafka |
search |
Elasticsearch, OpenSearch, Meilisearch, Typesense |
vector |
Qdrant, Weaviate, Milvus, when separate from db |
storage |
MinIO, SeaweedFS, Garage — S3-compatible object storage |
worker |
The app's own image running background jobs |
scheduler / cron |
The app's own image running timed jobs |
migrate / init |
One-off setup jobs that run and exit |
dockerproxy |
tecnativa/docker-socket-proxy |
proxy |
A reverse proxy inside the app, such as nginx or Caddy |
mail / smtp |
Mailpit, a Postfix relay |
browser |
Headless Chrome (browserless), for agents |
tunnel |
cloudflared |
backup |
A database dump or volume backup running alongside |
A volume is named <service>-<what it holds>, after the service that mounts it
and its mount point or meaning — code-server-home, code-server-workspace,
db-data, cache-data.
Services declare no networks. Coolify creates one per app and attaches every
container to it, so there is nothing to add. Should a service ever need its own,
it is named after the main service: code-server-network.