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

标签 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 部分。
为了使项目运行,我需要:
  • docker 图片
  • 一个 MySQL 实例(见下面我的 docker-compose.yml 的一部分)

  • 在我的 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 docker 镜像链接到 知道 MySQL docker 镜像需要来自 project-to-deploy 的文件?

    如果您想到其他方法,请随时提出建议!

    最佳答案

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

    我通常会通过使用 ansible 为每个容器的配置文件模板化所需的 IP 地址、端口、凭据等来实现这一点。为它们提供相互通信所需的所有信息。

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

    - 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
    

    关于docker - 部署包含 docker-compose.yml 的 Ansible 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38093801/

    相关文章:

    docker - 在使用 Docker 配置构建代理之前,Teamcity Build 不会运行?

    docker - 更新正在运行的Docker容器

    docker - 无法在Mac上连接到Docker Daemon

    linux - 使用 Ansible 列出已安装软件包的通用方法

    使用 Ansible 与 Vagrant 虚拟机的 ssh 连接失败

    ubuntu - 尝试安装 Edx 时出现 Ansible 代理错误

    ansible - 如果给定目录不为空,如何执行 Ansible 任务?

    docker - 使用Chef自举节点

    ansible - 如何将 Ansible with_items 循环应用于包含的任务?

    ansible - 如何在ansible中的特定主机上运行特定任务