用Ansible运行“docker volume create”?
我有一个Rails应用程序,我通过Ansible在Docker容器中进行部署。 我的应用程序目前包含三个容器:
- Docker卷容器(使用
docker volume create --name dbdata
) - Postgres容器(带有
volumes_from
dbdata) - Rails应用程序容器(链接到postgres容器)
我的部署剧本正在工作,但我不得不通过SSH在服务器上运行docker volume create
命令。 我很想通过Ansible来做到这一点,所以我可以部署一个新的应用程序实例到一个空的容器。
有没有办法通过Ansible运行docker volume create
,还是有一些其他的方式来做到这一点? 我检查了Ansible Docker模块的文档,但看起来他们不支持volume create
。 除非我失去了一些东西?
这里有一个选项,使用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
卷是否存在。 我们将该任务的结果保存在variablesmyvolume_exists
,然后只在inspect
任务失败时才创build卷。
您现在可以使用-v
参数在docker run的手册页中创build命名卷:
如果您提供了一个名称,Docker将通过该名称创build一个指定的卷。
- 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
是一个由mariadb-data
自动创build的命名卷:
$ docker volume inspect mariadb-data [ { "Name": "mariadb-data", "Driver": "local", "Mountpoint": "/var/lib/docker/volumes/mariadb-data/_data", "Labels": null, "Scope": "local" } ]