问题

以前一直使用的是docker-compose,现在切换到nomad,遇到的问题

原流程: build镜像后,使用docker kill 掉原有容器,并重新pull容器,然后再运行

切换到nomad后,必须要修改镜像tag才可以实现对容器的更新,但是这样会导致容器仓库有很多镜像

解决方案

参考了 https://github.com/angrycub/nomad%5Fexample%5Fjobs/blob/main/HCL2/always%5Fchange/README.md 并优化了下

上面提供了两个方案,都各自有点问题,使用uuid的话每次都会重新部署,但是一个job里可能有很多task,每次都全量更新会导致速度很慢,方案2传递版本的话需要一个东西专门管理版本号

所以我将两个方案结合了下,做到可以指定更新某个task

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
job "test" {
  datacenters = ["dc1"]


  type = "service"


  group "app" {


    task "app1" {
      driver = "docker"

        meta {
          run_index = "${var.run_index=="app1"}"?"${uuidv4()}":"1"
        }

      config {
        image = "你的镜像地址"
        image_pull_timeout="15m"
        force_pull="true"
      }

    }

 task "app2" {
      driver = "docker"
        meta {
          run_index = "${var.run_index=="app2"}"?"${uuidv4()}":"1"
        }
      config {
        image = "你的镜像地址"
        image_pull_timeout="15m"
        force_pull="true"
      }

    }
  }
}

variable "run_index" {
  type = string
  default="1"

}

部署命令 nomad run -var run_index=app1 ./deploy.hcl