我想用 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-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/