使用Ansible运行'docker volume create'?

时间:2016-01-27 20:56:11

标签: docker ansible

我有一个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。除非我错过了什么?

3 个答案:

答案 0 :(得分:10)

这是一个选项,使用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任务失败,我们只创建卷。

答案 1 :(得分:3)

您现在可以使用-v参数来创建命名卷,来自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"
    }
]

答案 2 :(得分:0)

您可以使用Ansible自己的docker_volume模块管理Docker卷。 2.4版中的新功能。