Module docker_compose_v2
Le module docker_compose_v2 permet de gerer des stacks Docker Compose depuis Ansible.
- name: Deployer une stack docker-compose
community.docker.docker_compose_v2:
project_src: /opt/mon-projet
state: present
pull: always
register: compose_output
- name: Afficher les conteneurs lances
ansible.builtin.debug:
var: compose_output.containers
Fichier docker-compose.yml template
Ansible peut generer le fichier docker-compose.yml via un template Jinja2 :
- name: Generer docker-compose.yml
ansible.builtin.template:
src: docker-compose.yml.j2
dest: /opt/mon-projet/docker-compose.yml
mode: "0644"
notify: restart_stack
Template Jinja2 pour docker-compose
# templates/docker-compose.yml.j2
version: "3.8"
services:
app:
image: "{{ app_image }}:{{ app_version }}"
ports:
- "{{ app_port }}:8080"
environment:
DATABASE_URL: "postgresql://{{ db_user }}:{{ db_pass }}@db:5432/{{ db_name }}"
depends_on:
- db
restart: unless-stopped
db:
image: postgres:15
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: "{{ db_name }}"
POSTGRES_USER: "{{ db_user }}"
POSTGRES_PASSWORD: "{{ db_pass }}"
volumes:
pgdata:
Orchestration multi-hotes
Deployer des stacks Docker sur plusieurs serveurs :
- hosts: docker_servers
tasks:
- name: Copier les fichiers du projet
ansible.builtin.synchronize:
src: ./mon-projet/
dest: /opt/mon-projet/
- name: Deployer la stack
community.docker.docker_compose_v2:
project_src: /opt/mon-projet
state: present
pull: always
Astuce : Combinez les handlers Ansible avec docker-compose pour redemarrer automatiquement la stack apres un changement de configuration.