1. The `project_slug` is used only as directory name. A container named `vault` may be fine but the project directory name `hashicorpvault` might be more descriptive.
```
.
└── hashicorpvault <---Here
├── build-context
│ ├── docker-data
│ │ └── .gitkeep
│ ├── Dockerfile
...
```
2. The `service` variable by default copies your `project_slug` answer. It's a style decision whether you leave it at that and just hit `Enter`. The service name will come up in rendered `docker-compose.yml` at purely cosmetic locations such as the `networks:` key, `container_name:` and `/opt/docker-data` volume mount presets, here with `ftp` as the service name:
3. Treat `component_list` as the list of Docker images that make up your service. Each `docker-compose` project forms a *__service__* - see above - that consists of either a single or multiple *__components__*. They're your `services:`, your container, volume, variable names etc.:
```
services:
grafana: <---
image: "grafana:${GRAFANA_VERSION}" <---
container_name: "grafana-grafana-${CONTEXT}" <---
...
environment:
# GRAFANA_USER: ${GRAFANA_USER} <---
# GRAFANA_PASSWORD: ${GRAFANA_PASSWORD} <---
...
```
4. The last prompt for a `context` is a generic string to help you distinguish deployments. It can be whatever you want such as for example a team name, here `cncf` which shows up as a preset in an example env file. It defaults to `ctx` just it can't be empty.
```
.
└── grafana
...
└── env
└── fully.qualified.domain.name.example <---
```
Which then looks like:
```
CONTEXT=cncf
...
```
Also check out [the Caveats section](#caveats) at the end to learn what this template does not do well.
Consider Cookiecutter's project directory and rendered files a starting point. It won't do everything perfect.
Imagine if you will a service that consists of [Infinispan](https://infinispan.org/) among other things. In Docker Hub's content-addressable image store Infinispan's location is at `infinispan/server` so you obviously want that exact string with a forward slash to show up in your `docker-compose.yml` as the `image:` key's value, same with your `Dockerfile`. The `image:` key's value comes from what you enter in Cookiecutter's `component_list` prompt. Component strings are then used to also pre-fill the `volumes:` key.
This will cause obvious issues (but the `image:` key is kinda correct):