【问题标题】:How do I deploy my docker-compose project using Terraform?如何使用 Terraform 部署我的 docker-compose 项目?
【发布时间】:2018-06-07 14:32:06
【问题描述】:

我已经翻遍了所有内容,但找不到一个连贯的资源来直接描述如何做到这一点。我有一个这样的项目:

./
 |-src/
 |--..
 |--Dockerfile
 |-docker-compose.yaml

这样的 terraform 配置文件:

variable "do_token" {}

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

# Create a web server
resource "digitalocean_droplet" "web" {
  # ...
}

我希望能够做类似的事情

provider "digitalocean" {
    ip = <my-ip>
    # docker-compose up ?
}

我的撰写文件正确设置了应用程序架构。我只是想要一种将它部署到数字海洋某处的给定盒子(最好通过 ip)并运行docker-compose up 的方法。我该怎么做?

【问题讨论】:

  • docker-compose 是一个开发工具;使用 Swarm 进行生产,而不是编写。

标签: docker docker-compose terraform


【解决方案1】:

供应商

Terraform 有provisioners,它允许您复制文件并在创建资源时执行脚本。

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

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

  provisioner "remote-exec" {
    inline = [
      "cd /app",
      "docker-compose up",
    ]
  }
}

Chef provisioner 也可以与compose cookbook 一起使用

码头工人

Terraform 有一个普通的 Docker provider,但没有开箱即用地管理 Compose 或 Swarm 定义,因此您需要在 volumesnetworksimages、@987654328 中逐个定义您的 compose 环境@)。

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
  }
}

Kubernetes

对于部署真实世界的应用程序 使用 Terraform,您可能最好使用 Kubernetes provider,它可以让您设置一个 replication controller 来运行 pods,在 Docker 上以 services 访问。这将需要运行 Kubernetes 集群并编写 Kubernetes 定义,Kompose 可以帮助从 Docker Compose 转换。

【讨论】:

  • Docker 提供程序似乎无法开箱即用。您需要先生成证书。有在 AWS 上运行它的经验吗?
  • 文件配置器是我的选择
猜你喜欢
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多