部署包含docker-compose.yml

时间:2016-06-29 08:07:10

标签: docker ansible ansible-playbook docker-compose

我想使用Ansible部署我的一个项目(让我们称之为project-to-deploy)。

project-to-deploy可以使用docker-compose.yml文件在本地运行,该文件除了其他功能外,还会在docker-container内安装以下卷。

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。 我创建了项目的docker image(我将项目中的所有文件复制到新创建的docker image),然后将其上传到private.repo/project-to-deploy:latest

现在出现了Ansible部分。
要运行项目,我需要:

  1. 泊坞窗图片
  2. 一个MySQL实例(请参阅下面docker-compose.yml的一部分)
  3. 在我的docker-compose.yml(上图)中,这样做很容易。我只是创建了2个服务(数据库和project-to-deploy)并将它们相互链接。

    如何在Ansible中执行此类操作?

    我做的第一件事就是获取图片:

    - name: Docker - pull project image
      docker:
        image: "private.repo/project-to-deploy:latest"
        state: restarted
        pull: always
    

    然后,如何将MySQL泊坞窗图像链接到此,知道 MySQL泊坞窗图像需要来自project-to-deploy的文件?

    如果您想到另一种方法,请随时提出建议!

1 个答案:

答案 0 :(得分:1)

轻微修正,docker模块用于运行容器,在您的示例中,您不仅仅是获取图像。您实际上是在拉动图像,创建容器并运行它。

我通常会通过使用ansible来模拟每个容器的配置文件以及所需的IP地址,端口,凭据等来实现这一点。为他们提供他们需要知道的彼此通信所需的一切。

由于您的示例只涉及很少的连接,因此您可以在ansible任务中设置links选项。您只需要在“messages”容器端设置它。

- 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