我看了一遍,无法找到一个描述如何直截了当地执行此操作的连贯资源。我有一个这样的项目:
./
|-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
。我怎么能这样做?
答案 0 :(得分:6)
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定义,因此您需要在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
}
}
使用Terraform部署真实世界的应用程序您最好使用Kubernetes provider设置replication controller来运行pods,以services方式访问在Docker上。这将需要运行Kubernetes集群并编写Kubernetes定义,Kompose可以帮助从Docker Compose转换。