Setelah Nomad terkonfigurasi dan berjalan sebagai server dan client dalam cluster, kita akan mencoba untuk menjalankan sebuah job sederhana. Aku cari project random di GitHub yang bisa dijalankan sebagai container. Aku menemukan project Javascript-Snake yang telah dijadikan Docker image di Docker Hub dengan nama aschil/snake.
Membuat Job Nomad
Di workstation kita, buat sebuah file bernama snake.hcl dengan isi sebagai berikut.
Untuk referensi lengkap lihat di Job Specification.
job "snake-web" {
datacenters = ["dc1"]
group "snake" {
# Menjalankan hanya 1 instance dari group ini
count = 1
network {
port "http" {
to = 8080
}
}
task "snake" {
driver = "docker"
config {
image = "aschil/snake:latest"
ports = ["http"]
}
resources {
cpu = 50
memory = 100
}
}
}
}
Ringkasan:
Karena aplikasi kita berjalan di port 8080, kita buat pemetaan port di dalam blok
network. Dengan ini, nomad akan mengalokasikan port acak di host dan memetakannya ke port 8080 di dalam container.network { port "http" { to = 8080 } }Di dalam blok
task, kita menggunakan driverdockeruntuk menjalankan container dari imageaschil/snake:latest. Task adalah unit terkecil dari pekerjaan yang dijalankan Nomad. Kita juga mengatur sumber daya CPU dan memori yang dialokasikan untuk task ini.task "snake" { driver = "docker" config { image = "aschil/snake:latest" # Set port mapping ke network port "http" yang telah didefinisikan sebelumnya ports = ["http"] } resources { cpu = 100 # in MHz memory = 300 # in MB } }
Menjalankan Job di Nomad
Setalah itu kita jalankan job melalui cli di workstation kita.
# Pastikan environment variable seperti token dan address sudah di set.
nomad job run snake.hcl
# Cek status job
nomad job status snake-web
# Outputnya akan seperti berikut:
ID = snake-web
Name = snake-web
Submit Date = 2026-02-09T10:48:51+07:00
Type = service
Priority = 50
Datacenters = dc1
Namespace = default
Node Pool = default
Status = running
Periodic = false
Parameterized = false
Summary
Task Group Queued Starting Running Failed Complete Lost Unknown
snake 0 0 1 0 0 0 0
Latest Deployment
ID = e795dfa4
Status = successful
Description = Deployment completed successfully
Deployed
Task Group Desired Placed Healthy Unhealthy Progress Deadline
snake 1 1 1 0 2026-02-09T03:59:04Z
Allocations
ID Node ID Task Group Version Desired Status Created Modified
e77694de cf522cd4 snake 0 run running 23s ago 11s ago
Sekarang kita sudah berhasil menjalankan job di Nomad. Untuk saat ini baru satu instance yang berjalan. Pertanyaannya mungkin ialah:
- Di node mana job ini berjalan?
- Port berapa yang digunakan untuk mengakses aplikasi ini?
Alokasi
Alokasi adalah instance dari sebuah task group yang berjalan di dalam cluster Nomad. Dalam job ini, alokasi ialah container Docker yang menjalankan aplikasi snake.
Untuk melihat daftar dan detail alokasi kita bisa menjalankan perintah berikut:
# Daftar alokasi dari job snake-web
nomad job allocs snake-web
# Output:
ID Node ID Task Group Version Desired Status Created Modified
e77694de cf522cd4 snake 0 run running 3m46s ago 3m34s ago
# Detail alokasi
nomad alloc status e77694de
# Output:
ID = e77694de-a563-427f-0445-b481a935fbaa
Eval ID = 2985850a
Name = snake-web.snake[0]
Node ID = cf522cd4
Node Name = ubt-tm-1
Job ID = snake-web
Job Version = 0
Client Status = running
Client Description = Tasks are running
Desired Status = run
Desired Description = <none>
Created = 4m43s ago
Modified = 4m31s ago
Deployment ID = e795dfa4
Allocation Addresses:
Label Dynamic Address
*http yes 203.0.113.10:30438 -> 8080
Task "snake" is "running"
Task Resources:
CPU Memory Disk Addresses
100 MHz 300 MiB 300 MiB
Task Events:
Started At = 2026-02-09T03:48:54Z
Finished At = N/A
Total Restarts = 0
Last Restart = N/A
Recent Events:
Time Type Description
2026-02-09T10:48:54+07:00 Started Task started by client
2026-02-09T10:48:51+07:00 Driver Downloading image
2026-02-09T10:48:51+07:00 Task Setup Building Task Directory
2026-02-09T10:48:51+07:00 Received Task received by client
Dari output di atas, kita bisa melihat bahwa alokasi e77694de berjalan di node
ubt-tm-1. Sedangkan untuk address dari aplikasi kita ialah 203.0.113.10:30438.
Jika kita buka di browser, kita akan melihat game snake yang bisa dimainkan.

Mendaftarkan Service di Consul
Karena nantinya kita akan menambahkan proxy web server, kita perlu mendaftarkan service aplikasi snake ini di Consul agar nanti kita bisa membuat konfigurasi proxy dengan dinamis. Kita akan menggunakan consul-template untuk membuat file konfigurasi proxy secara otomatis berdasarkan service yang terdaftar di Consul.
Untuk itu, kita perlu menambahkan blok service di dalam task snake pada
file snake.hcl di dalam stanza group "snake" seperti berikut:
group "snake" {
count = 1
service {
name = "snake-web"
port = "http" # Sesuai dengan nama port di blok network.
# Health check agar Consul dapat memantau kesehatan service ini
check {
type = "http"
path = "/"
interval = "3s"
timeout = "2s"
}
}
...
}
Setelah itu kita jalankan ulang job-nya dengan perintah berikut:
nomad job run snake.hcl
Untuk memeriksa apakah service sudah terdaftar di Consul, kita bisa membuka Consul UI atau melalu cli:
# Pastikan environment variable sudah di set
consul catalog services
Jika berhasil, akan muncul service snake-web di daftar service yang terdaftar
di Consul.