我有一个Rails应用程序,我通过Ansible在Docker容器中部署。我的应用程序包括目前为止的三个容器:
docker volume create --name dbdata
创建)volumes_from
dbdata)我的部署手册正在运行,但我必须通过SSH在服务器上运行docker volume create
命令。我喜欢通过Ansible这样做,所以我可以将一个新的应用程序实例部署到一个空容器上。
有没有办法通过Ansible运行docker volume create
,还是有其他方法可以做到这一点?我检查了Ansible Docker模块的文档,但看起来它们还不支持volume create
。除非我错过了什么?
答案 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版中的新功能。