Ansible avec Docker et conteneurs 22 min de lecture

Docker Compose avec Ansible

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.