/ terraform / modules / docker / main.tf
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  }