nomad支持调度多种drive,比如docker,java,podman等,比较常用的是和docker的结合

要求版本 1.8.2和 1.9

一个简单的例子

1
2
3
4
5
6
7
8
task "webservice" {
  driver = "docker"

  config {
    image = "redis:3.2"
  }
}

使用私有镜像

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
    task "test" {
      driver = "docker"
      config {
        image = "私有镜像地址"
        auth {
                username = ""
                password = ""
        }
      }
    }

环境变量配置

一些镜像需要设置环境变量,在nomad可以使用env属性设置

 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
    task "es" {
      driver = "docker"

        env = {
          "cluster.name"          = "zjc-es-cluster"
          "node.name"             = "es7_01"
          "bootstrap.memory_lock" = true
          "ES_JAVA_OPTS"          = "-Xms512m -Xmx512m"
          "discovery.seed_hosts"  = "localhost"
          "cluster.initial_master_nodes"="es7_01"
        }

      config {
        image = "docker.elastic.co/elasticsearch/elasticsearch:7.1.0"
        ulimit {
          memlock = "-1"
          nofile = "65536"
          nproc = "8192"
        }
      }
    }




端口开放

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
group "web"{

    network {
      port "web" {
        to = 80
      }
    }

    service {
      name = "web"
      port="web"
    }

    task "test" {
      driver = "docker"

      config {
        image = "nginx:latest"
        ports = ["web"]
      }
    }
}

磁盘挂载

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
config {
  volumes = [
    # 使用绝对路径挂载
    "/path/on/host:/path/in/container",

    # 挂载到allocation dir下
    "relative/to/task:/also/in/container"
  ]
}

镜像相关的配置

client属性可以配置docker相关的属性,常用的有volume和privileged

1
2
3
4
5
6
7
8
9
client {
  enabled = true
  options = {
    "driver.allowlist"       = "docker"
    "docker.volumes.enabled" = true # 开启支持docker volumes
    "docker.privileged.enabled" = true # 开启 privileged 模式
  }
}

参考资料

Drivers: Docker | Nomad by HashiCorp