How do I deploy my docker-compose project using Terraform?

北慕城南 提交于 2019-12-09 10:23:56

问题


I've looked all over and can't find a coherent resource that describes how to do this straightforwardly. I have a project like so:

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

A terraform config file like this:

variable "do_token" {}

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

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

I want to be able to do something like

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

My compose file sets up the application architecture properly. I just want a way to deploy that to a given box somewhere on digital ocean (via ip preferably) and the run docker-compose up. How can I do this?


回答1:


Provisioners

Terraform has provisioners which allow you to copy files and execute scripts on resource creation.

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

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

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

The Chef provisioner can also be used with a compose cookbook

Docker

Terraform has a plain Docker provider but doesn't manage Compose or Swarm definitions out of the box so you would need to define your compose environment piece by piece in volumes, 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

For deploying real world apps With Terraform you are probably better of using the Kubernetes provider that will let you set up a replication controller to run pods that are accessed as services on Docker. This will require running a Kubernetes cluster and writing the Kubernetes definition, Kompose can help converting from Docker Compose.



来源:https://stackoverflow.com/questions/47983827/how-do-i-deploy-my-docker-compose-project-using-terraform

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!