部署包含 docker-compose.yml 的 Ansible 项目

Deploy Ansible project which include a docker-compose.yml

我想使用 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. docker 图像
  2. 一个MySQL实例(见下面我的docker-compose.yml部分)

在我的docker-compose.yml(以上)中,这样做很容易。我只是创建了 2 个服务(数据库和 project-to-deploy)和 link 它们彼此。

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

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

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

那我怎么link MySQL docker 像这样,知道 MySQL docker 图片需要来自 project-to-deploy 的文件 ?

如果你想到其他方法,欢迎提出建议!

稍作更正,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