Looking for some best practice advice. I am deploying multiple docker compose stacks wit a few containers. Grafana, influxdb, nodered, mqtt ect.
Is it generally considered better to add a docker compose file to my role and then have a task docker composes up. Or should I scrap the compose file and define all my containers in task? I’m not sure which is considered ‘better’. The main advantage I see of using compose is that I can reuse it else where.
On a side note. After my containers are running, I have to add my traefik container to the network that was created in my compose. I’m also wanting to take advantage of docker namespaces
Maybe I should be using the community.docker.docker_compose module as I am currently copying files to the target and using a command for " docker-compose --project-name xyz --file xyz.yaml --env-file xyz.env up -d"
Addition: Reading the docs for community.docker.docker_compose it only supports Docker compose V1.x, which is deprecated
Reading the docs for community.docker.docker_compose it only supports Docker compose V1.x, which is deprecated
Just so you know, there is a PR draft on compose v2 support for community.docker collection, though it’s kinda stale as of now.
As for how I deploy docker containers with Ansible, I currently use community.docker.(network|volume|container) in my roles / playbook. It lacks a few features (like depends_on), but it works fine overall, and syntax looks a lot like compose.
But yeah, the compose file template option followed by a task running docker compose up... is an equally good idea IMO.
I do indeed like @chris’s idea of templating a docker-compose file like that. Creative! The other approach would be to store the final docker-compose.yml in files/ and just copy that directly.
Yeah, right. There have been a couple of attempts to add a new docker_compose_v2 module, but unfortunately, none of them panned out. The current docker_compose module depends on the unmaintained Python docker-compose v1. docker-compose v2 is written in Go as a Docker CLI plugin.
I still use the docker_compose module due to legacy reasons, but I’d lean towards the more native docker_container and friends if you can. docker_container and the other modules interact with the Docker API directly as opposed to the deprecated docker-compose v1 Python innerworkings.