Запустить "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"
}
]