部署包含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的一部分。
为了运行这个项目,我需要:

  1. docker的形象
  2. 一个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