我想使用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泊坞窗图像链接到此,知道 MySQL泊坞窗图像需要来自project-to-deploy
的文件?
如果您想到另一种方法,请随时提出建议!
答案 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