main.tf
1 terraform { 2 required_providers { 3 docker = { 4 source = "kreuzwerker/docker" 5 version = "~> 3.0.2" 6 } 7 } 8 } 9 10 locals { 11 image = "${var.image_name}:${var.image_version}" 12 internal_port = 3000 13 } 14 15 data "docker_registry_image" "catan" { 16 name = local.image 17 } 18 19 resource "docker_image" "catan" { 20 name = local.image 21 pull_triggers = [data.docker_registry_image.catan.sha256_digest] 22 } 23 24 resource "docker_volume" "games" { 25 name = "${var.name}-games" 26 } 27 28 resource "docker_container" "catan" { 29 image = docker_image.catan.image_id 30 name = var.name 31 restart = var.restart 32 33 log_driver = var.log_driver 34 log_opts = var.log_opts 35 36 dynamic "ports" { 37 for_each = var.expose ? [var.port] : [] 38 39 content { 40 internal = local.internal_port 41 external = ports.value 42 } 43 } 44 45 volumes { 46 container_path = "/app/games" 47 volume_name = docker_volume.games.name 48 read_only = false 49 } 50 51 network_mode = "bridge" 52 53 dynamic "networks_advanced" { 54 for_each = var.networks 55 iterator = net 56 57 content { 58 name = net.value["name"] 59 } 60 } 61 62 healthcheck { 63 test = ["CMD", "curl", "-f", "localhost:${local.internal_port}/health"] 64 interval = "5s" 65 retries = 2 66 start_period = "1s" 67 timeout = "500ms" 68 } 69 70 env = [ 71 "catan_port=${local.internal_port}", 72 ] 73 }