部署包含 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 部分。
对于 运行 的项目,我需要:
- docker 图像
- 一个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
我想使用 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
)和 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