使用Ansible运行'docker volume create'?

Dav*_*Ham 6 ansible docker

我有一个Rails应用程序,我通过Ansible在Docker容器中部署.我的应用包括目前为止的三个容器:

  • Docker卷容器(使用时创建docker volume create --name dbdata)
  • 一个Postgres容器(带有volumes_fromdbdata)
  • Rails应用程序容器(链接到postgres容器)

我的部署手册正在运行,但我必须docker volume create通过SSH在服务器上运行该命令.我喜欢通过Ansible这样做,所以我可以将一个新的应用程序实例部署到一个空容器中.

有没有办法docker volume create通过Ansible 运行,还是有其他方法可以做到这一点?我检查了Ansible Docker模块的文档,但它看起来并不像它们支持的那样volume create.除非我错过了什么?

lar*_*sks 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
Run Code Online (Sandbox Code Playgroud)

我们首先通过使用检查卷是否存在docker volume inspect.我们将该任务的结果保存在变量中myvolume_exists,然后我们只在任务失败时创建inspect.


Tom*_*cek 5

现在,您可以使用-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
Run Code Online (Sandbox Code Playgroud)

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"
    }
]
Run Code Online (Sandbox Code Playgroud)


Lin*_*son 5

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

例子:

- name: Create a volume
  docker_volume:
    name: volume_one

- name: Remove a volume
  docker_volume:
    name: volume_one
    state: absent

- name: Create a volume with options
  docker_volume:
    name: volume_two
    driver_options:
      type: btrfs
      device: /dev/sda2
Run Code Online (Sandbox Code Playgroud)