首页 文章

用Ansible运行'docker volume create'?

提问于
浏览
6

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

  • Docker卷容器(使用 docker volume create --name dbdata 创建)

  • 一个Postgres容器(带 volumes_from dbdata)

  • Rails app容器(链接到postgres容器)

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

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

3 回答

  • 0

    这是一个选项,使用 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 任务失败时创建该卷 .

  • 10

    您现在可以使用 -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"
        }
    ]
    
  • 3

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

相关问题