Запустить "Docker volume create" с помощью Ansible?

у меня есть приложение Rails, которое я развертываю в контейнерах Docker через Ansible. Мое приложение включает в себя три контейнера до сих пор:

  • контейнер томов Docker (созданный с помощью docker volume create --name dbdata)
  • контейнер Postgres (с volumes_from dbdata)
  • контейнер приложения Rails (который ссылается на контейнер postgres)

мой deploy playbook работает, но мне пришлось запустить docker volume create команда на сервере через SSH. Я бы хотел сделать это через Ansible, чтобы я мог разверните новый экземпляр приложения в пустой контейнер.

есть ли способ запустить docker volume create через Ansible, или есть какой-то другой способ сделать это? Я проверил документы для модуля Ansible Docker, но не похоже, что они поддерживают volume create еще. Или я что-то упускаю?

2 ответов


вот один из вариантов, используя command модуль.

- hosts: localhost
  tasks:
    - name: check if myvolume exists
      command: docker volume inspect myvolume
      register: myvolume_exists
      failed_when: false

    - name: create myvolume
      command: docker volume create --name myvolume
      when: myvolume_exists|failed

сначала мы проверяем, существует ли том с помощью docker volume inspect. Мы сохраняем результат этой задачи в переменной myvolume_exists, а то мы только создать объем если inspect задача не выполнена.


теперь вы можете использовать -v аргумент для создания именованных томов, с man-страницы docker run:

если вы укажете имя, Docker создаст именованный том с этим именем.

  - name: Run mariadb
    docker_container:
      name: mariadb-container
      image: mariadb
      env:
        MYSQL_ROOT_PASSWORD: "secret-password"
        MYSQL_DATABASE: "db"
        MYSQL_USER: "user"
        MYSQL_PASSWORD: "password"
      ports:
        - "3306:3306"
      volumes:
        - mariadb-data:/var/lib/mysql

mariadb-data - именованный том, который был автоматически создан docker:

$ docker volume inspect mariadb-data
[
    {
        "Name": "mariadb-data",
        "Driver": "local",
        "Mountpoint": "/var/lib/docker/volumes/mariadb-data/_data",
        "Labels": null,
        "Scope": "local"
    }
]