Hello John Moser
Yes, there are several ways to provide environment specific configurations. Docker and Axon.ivy offer many capabilities of parameterization for different environments. The difficulty is to decide which methods or mix of methods fits best for your projects needs.
One could either:
1. mount different configuration files (like `ivy.yaml`, `app.yaml`, etc.) per environment into the container. I think that makes sense if every stage (dev, int, prod) looks completely different and the resulting yaml files have almost nothing in common.
2. use environment variables to override parts of our configurations
https://developer.axonivy.com/doc/latest/EngineGuideHtml/configuration.html#configuration-override. This is recommended if you only want to override a few configuration values while most configurations in the yaml files are shared.
3. build an image per environment. could sound a bit strange. but use the capabilities of your container orchestration platform like in the first scenario you can provide different configuration files (like `ivy.yaml`, `app.yaml`, etc.). but you don't need to mount a volume at runtime. this will lead to immutable configurations that are only modifyable from within the container.
the docker per env approach could look like this:
## acmeDockerfile
FROM axonivy/axonivy-engine
COPY --chown=ivy:ivy AxonIvyEngine.lic /etc/axonivy-engine-7x/
...
## acmeProdDockerfile
FROM acmeDockerfile
COPY --chown=ivy:ivy ivy-prod.yaml /etc/axonivy-engine-7x/ivy.yaml
## acmeTestDockerfile
FROM acmeDockerfile
COPY --chown=ivy:ivy ivy-test.yaml /etc/axonivy-engine-7x/ivy.yamlConfigMap for Kubernetes https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/
you may also check how to handle passwords (secrets) in containers:
https://developer.axonivy.com/doc/latest/EngineGuideHtml/configuration.html#engine-configuration-docker