如何使用Terraform部署docker-compose项目?

dop*_*man 8 docker docker-compose terraform

我看了一遍,找不到一个描述如何直截了当地执行此操作的连贯资源.我有一个这样的项目:

./
 |-src/
 |--..
 |--Dockerfile
 |-docker-compose.yaml
Run Code Online (Sandbox Code Playgroud)

像这样的terraform配置文件:

variable "do_token" {}

# Configure the DigitalOcean Provider
provider "digitalocean" {
  token = "${var.do_token}"
}

# Create a web server
resource "digitalocean_droplet" "web" {
  # ...
}
Run Code Online (Sandbox Code Playgroud)

我希望能够做类似的事情

provider "digitalocean" {
    ip = <my-ip>
    # docker-compose up ?
}
Run Code Online (Sandbox Code Playgroud)

我的compose文件正确设置了应用程序架构.我只是想要一种方法将它部署到数字海洋上某个特定的盒子(最好通过ip)和运行docker-compose up.我怎样才能做到这一点?

Mat*_*att 8

供应方

Terraform具有配置程序,允许您在创建资源时复制文件和执行脚本.

resource "digitalocean_droplet" "web" {
  # ...

  provisioner "file" {
    source      = "compose-app/"
    destination = "/app"
  }

  provisioner "remote-exec" {
    inline = [
      "cd /app",
      "docker-compose up",
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

厨师供应者也可以用一个用于撰写食谱

搬运工人

Terraform有一个普通的Docker提供程序,但是没有开箱即用的管理Compose或Swarm定义,所以你需要在,网络,图像,容器中逐个定义你的组合环境.

provider "docker" {
  host = "tcp://droplet:2375/"
}
resource "docker_image" "myapp" {
  name = "me/myapp:1.0.0"
}
resource "docker_container" "myapp" {
  name = "myapp"
  image = "${docker_image.myapp.latest}"
  ports {
    internal = 1234
    external = 1234
  }
}
Run Code Online (Sandbox Code Playgroud)

Kubernetes

使用Terraform部署真实世界的应用程序你最好使用Kubernetes提供程序,它可以让你设置一个复制控制器来运行在Docker上作为服务访问的pod.这将需要运行Kubernetes集群并编写Kubernetes定义,Kompose可以帮助从Docker Compose转换.