使用Terraform与docker-compose和nginx-proxy

时间:2017-07-03 15:58:47

标签: docker-compose terraform jwilder-nginx-proxy

是否有人尝试过使用所有这些工具?

我目前正在使用nginx-proxy和docker-compose进行四容器解决方案。

我现在正在努力使部署更好/更快/更便宜,并认为terraform可能是我正在寻找的部分。

我的问题是 - 使用docker-compose进行terraform工作吗?或者它们之间是否有太多重叠?

感谢您的任何建议!

2 个答案:

答案 0 :(得分:3)

您可以按照建议使用Terraform提供程序,但如果您因任何原因想要坚持使用docker-compose,您还可以创建docker-compose文件并使用用户数据运行必要的命令。请查看template_filetemplate_cloudinit_config

实施例

nginx.tpl

#cloud-config
write_files:
 - content: |
        version: '2'
        services:
            nginx:
              image: nginx:latest
   path: /opt/docker-compose.yml
runcmd:
 - 'docker-compose -f /opt/docker-compose.yml up -d'

nginx.tf

data "template_file" "nginx" {
    template = "${file("nginx.tpl")}"
}

resource "aws_instance" "nginx" {
    instance_type = "t2.micro"
    ami = "ami-xxxxxxxx"

    user_data = "${data.template_file.nginx.rendered}"
}

我使用AWS,但这应该适用于任何支持用户数据的提供商和带有cloud-init的框。此方法也适用于自动缩放。

答案 1 :(得分:1)

您可以使用docker provider在Terraform中运行单个或多个docker容器。

https://www.terraform.io/docs/providers/docker/index.html

示例nginx terraform config

provider "docker" {
  host = "tcp://ec2-xxxxxxx.compute.amazonaws.com:2375/"
}
resource "docker_image" "nginx" {
  name = "nginx:1.11-alpine"
}
resource "docker_container" "nginx-server" {
  name = "nginx-server"
  image = "${docker_image.nginx.latest}"
  ports {
    internal = 80
    external = 80
  }
  volumes {
    container_path  = "/usr/share/nginx/html"
    host_path = "/home/scrapbook/tutorial/www"
    read_only = true
  }
}