运行';docker卷创建';和Ansible?
我通过Ansible在Docker容器中部署了一个Rails应用程序。到目前为止,我的应用程序包括三个容器:运行';docker卷创建';和Ansible?,docker,ansible,Docker,Ansible,我通过Ansible在Docker容器中部署了一个Rails应用程序。到目前为止,我的应用程序包括三个容器: Docker卷容器(使用Docker卷创建--name dbdata创建) Postgres容器(带有来自dbdata的volumes\u) Rails应用程序容器(链接到postgres容器) 我的deployplaybook正在工作,但我必须通过SSH在服务器上运行docker volume create命令。我希望通过Ansible实现这一点,这样我就可以在一个空容器上部署一个
- Docker卷容器(使用
创建)Docker卷创建--name dbdata
- Postgres容器(带有来自dbdata的
volumes\u)
- Rails应用程序容器(链接到postgres容器)
docker volume create
命令。我希望通过Ansible实现这一点,这样我就可以在一个空容器上部署一个新的应用程序实例
有没有办法通过Ansible运行
docker volume create
,或者有其他方法?我检查了Ansible Docker模块的文档,但看起来它们还不支持卷创建
。除非我遗漏了什么?这里有一个选项,使用命令
模块
- 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\u exists
中,然后仅在inspect
任务失败时创建卷。您现在可以使用-v
参数从docker run的手册页创建命名卷:
如果提供名称,Docker将使用该名称创建命名卷
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"
}
]
您可以使用Ansible自己的模块管理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
Ansible可以使用
命令
或shell
模块运行任意命令,因此任何可以在命令行上运行的命令都可以通过Ansible运行。是的,我想到了这一点,但不知道如何像Docker模块对容器所做的那样执行state=present
。虽然如果使用相同的名称运行两次docker volume create
,第二个卷将不会执行任何操作,因为该卷已经存在。六羟甲基三聚氰胺六甲醚!
- 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