部署包含docker-compose.yml的Ansible项目
我想用Ansible
来部署我的一个项目(我们称之为project-to-deploy
)。
project-to-deploy
可以使用docker-compose.yml
文件在本地运行,其中包括在docker-compose.yml
安装以下卷。
version: "2" services: database: image: mysql:5.6 volumes: - ./docker/mysql.init.d:/docker-entrypoint-initdb.d messages: image: private.repo/project-to-deploy:latest
这里没什么用处。 运行该项目: docker-compose up
。 我创build了项目的docker image
(将项目中的所有文件复制到新创build的docker image
),并将其上传到private.repo/project-to-deploy:latest
。
现在是Ansible的一部分。
为了运行这个项目,我需要:
- docker的形象
- 一个MySQL实例(参见下面我
docker-compose.yml
一部分)
在我docker-compose.yml
(上面)中,这样做很容易。 我只是创build2个服务(数据库和project-to-deploy
),并相互链接。
我如何在Ansible
执行这样的操作?
我做的第一件事是获取图像:
- name: Docker - pull project image docker: image: "private.repo/project-to-deploy:latest" state: restarted pull: always
那么,如何知道 MySQL docker镜像需要project-to-deploy
呢?
如果你想另一种方式去做,请随时提出build议!
docker
模块用于运行容器,在你的例子中,你不只是获取图像。 你实际上拉图像,创build一个容器,并运行它。
我通常通过使用可靠的模板来为每个容器的configuration文件模拟所需的IP地址,端口,凭证等,从而为他们提供他们需要知道的相互通信。
既然你的例子只涉及很less的连接,你可以在你的任务中设置links
选项。 您只需要将其设置在“消息”容器端。
- name: Docker - start MySQL container docker: name: database image: "mysql:5.6" state: restarted volumes: - /path/to/docker/mysql.init.d:/docker-entrypoint-initdb.d pull: always - name: Docker - start project container docker: name: messages image: "private.repo/project-to-deploy:latest" state: restarted pull: always links: - database