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

部署包含docker-compose.yml的Ansible项目,docker,ansible,ansible-playbook,docker-compose,Docker,Ansible,Ansible Playbook,Docker Compose,我想使用Ansible部署我的一个项目(我们称之为projecttodeploy) 要部署的项目可以使用docker compose.yml文件在本地运行,该文件在docker容器中装载以下卷 version: "2" services: database: image: mysql:5.6 volumes: - ./docker/mysql.init.d:/docker-entrypoint-initdb.d messages: imag

我想使用
Ansible
部署我的一个项目(我们称之为
projecttodeploy

要部署的
项目可以使用
docker compose.yml
文件在本地运行,该文件在
docker容器中装载以下卷

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映像
(其中我将项目中的所有文件复制到新创建的
docker映像
),并将其上载到
private.repo/project to deploy:latest

现在是最重要的部分
要运行项目,我需要:

  • 码头工人形象
  • MySQL实例(请参阅下面我的
    docker compose.yml
    的一部分)
  • 在我的
    docker compose.yml
    (上面)中,这样做很容易。我只需创建两个服务(数据库和要部署的
    项目
    ),并将它们相互链接

    如何在
    Ansible
    中执行此类操作

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

    - name: Docker - pull project image
      docker:
        image: "private.repo/project-to-deploy:latest"
        state: restarted
        pull: always
    
    那么,我如何将MySQL docker映像链接到这个,知道MySQL docker映像需要
    项目中的文件来部署


    如果你想用另一种方法来做,请随时提出建议

    稍加更正,
    docker
    模块用于运行容器,在您的示例中,您不仅仅是获取图像。实际上,您正在提取图像、创建容器并运行它

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

    由于您的示例只涉及很少的连接,您可以在ansible任务中设置
    链接
    选项。您应该只需要在“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
    

    稍微更正一下,
    docker
    模块用于运行容器,在您的示例中,您不仅仅是获取图像。实际上,您正在提取图像、创建容器并运行它

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

    由于您的示例只涉及很少的连接,您可以在ansible任务中设置
    链接
    选项。您应该只需要在“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