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

标签 docker docker-compose terraform

我已经查看了所有内容,但找不到一个连贯的资源来直接描述如何执行此操作。我有一个这样的项目:

./
 |-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 ?
}

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

最佳答案

供应商

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 一起使用

docker

Terraform 有一个简单的 Docker provider但不管理开箱即用的 Compose 或 Swarm 定义,因此您需要在 volumes 中逐个定义您的 compose 环境, networks , images , containers )。

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访问为 services在 Docker 上。这将需要运行 Kubernetes 集群并编写 Kubernetes 定义 Kompose可以帮助从 Docker Compose 转换。

关于docker - 如何使用 Terraform 部署我的 docker-compose 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47983827/

相关文章:

docker - 将 docker 镜像名称重定向到私有(private)注册表服务器的任何机会

php - 为什么我的卷没有复制到其Docker容器中?

amazon-web-services - 如何在 Terraform 中为 Amazon ECR 创建 IAM 角色?

docker - Rails与Docker-compose:如何设置数据库主机

docker - 在为其构建docker容器时如何在Windows操作系统中为计算机视觉注释工具cvat的大型数据集安装共享路径?

azure - azure terraform 中的 site_config 配置

Terraform:如何删除从数组/列表创建的用户资源?

performance - 在没有共享文件夹的Windows上,Boot2docker非常慢

docker - 在 Raspberry Pi 3B+ 上运行 ASP .NET Core

docker - 无效地址。它不属于该网络的任何子网