Terraform имеет поставщика Docker , и, если вы хотите использовать Terraform для управления вашим стеком контейнеров, это, вероятно, правильный инструмент. Но для его использования требуется, по сути, преобразование вашего файла Compose в синтаксис Terraform.
Я немного больше привык к разделению, когда вы используете Terraform для управления инфраструктурой - например, для настройки экземпляров EC2 и их настройки сети - но используйте другой инструмент, такой как Ansible, Chef или Salt Stack, чтобы фактически запустить программное обеспечение на них. Затем, чтобы обновить программное обеспечение (Docker контейнеры), вы должны обновить настройки инструмента управления конфигурацией, указав, какую версию (тег тега Docker) вы хотите, а затем повторно запустить ее.
Один прием, который может помочь использование нулевого ресурса , который позволит вам «повторно предоставить ресурс» при каждом изменении идентификатора изображения:
resource "null_resource" "docker_compose" {
triggers = {
image_id = "${var.image_id}"
}
provisioner "remote_exec" {
...
}
}
Если вы хотите go вниз по всем Terraform В теории, вы можете написать конфигурацию Terraform, такую как
provider "docker" {
host = "ssh://root@${google_compute_address.training-address.address}"
# (where do its credentials come from?)
}
resource "docker_image" "myapp" {
name = "myapp:${var.image_id}"
}
resource "docker_container" "myapp" {
name = "myapp"
image = "${docker_image.myapp.latest}"
}
, но вам придется перевести всю вашу конфигурацию Docker Compose в этот синтаксис и настроить ее так, чтобы разработчики могли запускать его локально и реплицировать функции Compose, такие как сеть default
и т. д. Я не чувствую, что это обычно делается на практике.