为Traefik可以找到的docker容器运行nomad作业

为Traefik可以找到的docker容器运行nomad作业,docker,docker-compose,traefik,nomad,Docker,Docker Compose,Traefik,Nomad,我目前正在运行一个docker容器,使用Traefik作为负载平衡器,使用以下docker compose文件: 服务: 洛里斯: 图片:bdlss/loris grok docker 标签: -traefik.http.routers.loris.rule=Host(`loris.my\u domain`) -traefik.http.routers.loris.tls=true -traefik.http.routers.loris.tls.certresolver=let加密 -traef

我目前正在运行一个docker容器,使用Traefik作为负载平衡器,使用以下docker compose文件:

服务:
洛里斯:
图片:bdlss/loris grok docker
标签:
-traefik.http.routers.loris.rule=Host(`loris.my\u domain`)
-traefik.http.routers.loris.tls=true
-traefik.http.routers.loris.tls.certresolver=let加密
-traefik.port=80
网络:
-网
它运行得相当好。作为我第一次尝试使用Nomad的一部分,我只是希望能够使用Nomad作业
loris.Nomad
而不是使用docker compose文件启动此容器

Docker容器“标签”和“网络”标识对于Traefik执行动态路由非常重要

我的问题是:我可以把这个“标签”信息和“网络”信息放在
loris.nomad
文件中的什么位置,以便它以与
docker compose
文件当前相同的方式启动容器

我曾尝试将此信息放在
task.config
节中,但这不起作用,而且我在遵循文档时遇到了问题。我见过一些例子,其中添加了一个额外的“服务”节,但我仍然不确定

下面是我要修改的nomad文件的基本内容

# loris.nomad

job "loris" {
  datacenters = ["dc1"]
  group "loris" {
    network {
      port "http" {
        to = 5004
    }
  
    task "loris" {
      driver = "docker"

      config {
        image = "bdlss/loris-openjpeg-docker"
        ports = ["http"]
      }

      resources {
        cpu    = 500
        memory = 512
      }
    }
  }
}

非常感谢您的建议。

在nomad中运行traefik并在容器之间实现负载平衡的最合适选项是使用(服务发现所需)

要运行此功能,您必须在启动nomad时配置。如果您想在本地进行测试,只需运行
sudo nomad agent-dev connect
。concur可以通过
concur agent-dev-client=“0.0.0.0”
启动

现在,您可以简单地使用标记提供traefik配置,如图所示

如果您确实需要使用docker provider在nomad中运行traefik(这肯定会导致集群设置出现问题),您可以执行以下操作:

首先,您需要在docker插件中启用主机路径装载。请参阅和。您可以将配置放置在一个额外的文件中,如extra.hcl,如下所示:

plugin "docker" {
  config {
    volumes {
      enabled = true
    }
  }
}
现在您可以使用此额外设置启动nomad
sudo nomad agent-dev connect-config=extra.hcl
。现在您可以在config/labels块中提供traefik设置,如(完整):


我希望这能以某种方式回答您的问题。

在nomad中运行traefik并在容器之间实现负载平衡的最合适的选项是使用(服务发现所需)

要运行此功能,您必须在启动nomad时配置。如果您想在本地进行测试,只需运行
sudo nomad agent-dev connect
。concur可以通过
concur agent-dev-client=“0.0.0.0”
启动

现在,您可以简单地使用标记提供traefik配置,如图所示

如果您确实需要使用docker provider在nomad中运行traefik(这肯定会导致集群设置出现问题),您可以执行以下操作:

首先,您需要在docker插件中启用主机路径装载。请参阅和。您可以将配置放置在一个额外的文件中,如extra.hcl,如下所示:

plugin "docker" {
  config {
    volumes {
      enabled = true
    }
  }
}
现在您可以使用此额外设置启动nomad
sudo nomad agent-dev connect-config=extra.hcl
。现在您可以在config/labels块中提供traefik设置,如(完整):


我希望这能以某种方式回答您的问题。

感谢您花时间撰写此回复。这非常有帮助。显然,我现在仍在开始学习如何添加Consor。您的回答是我学习过程中非常受欢迎的一部分:)不客气!很高兴阅读此回复对您有帮助!当您学习如何运行distrib时uted微服务架构的应用程序,也可以看看kubernetes,因为它已经是“标准”(这只是我的观点)。感谢您抽出时间撰写此回复。这非常有帮助。显然,我现在仍在开始学习如何添加Consor。您的回答是我学习过程中非常值得赞赏的一部分:)不客气!很高兴阅读此回复对您有帮助!当您学习如何运行分布式微服务架构的应用程序时,请也可以看看kubernetes,因为它已经是“标准”(这只是我的观点)。
job "demo-webapp" {
  datacenters = ["dc1"]

  group "demo" {
    count = 3

    task "server" {
      env {
        // "${NOMAD_PORT_http}"
        PORT    = "80"
        NODE_IP = "${NOMAD_IP_http}"
      }

      driver = "docker"

      config {
        image = "hashicorp/demo-webapp-lb-guide"

        labels {
          traefik.enable = true
          traefik.http.routers.webapp-docker.rule = "Host(`docker.loris.mydomain`) && Path(`/myapp`)"
          traefik.http.services.webapp-docker.loadbalancer.server.port = 80
        }
      }

      resources {
        network {
          // Used for docker provider
          mode ="bridge"
          mbits = 10
          port  "http"{
            // Used for docker provider
            to = 80
          }
        }
      }

      service {
        name = "demo-webapp"
        port = "http"

        tags = [
          "traefik.enable=true",
          "traefik.http.routers.webapp-consul.rule=Host(`consul.loris.mydomain`) && Path(`/myapp`)",
        ]

        check {
          type     = "http"
          path     = "/"
          interval = "2s"
          timeout  = "2s"
        }
      }
    }
  }
}