【注意】最后更新于 October 10, 2021,文中内容可能已过时,请谨慎使用。
问题
以前一直使用的是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