【问题标题】:Use docker-compose with docker swarm将 docker-compose 与 docker swarm 一起使用
【发布时间】:2016-10-05 13:39:33
【问题描述】:

我正在使用docker 1.12.1 我有一个简单的 docker-compose 脚本。

version: '2'

services:
  jenkins-slave:
    build: ./slave
    image: jenkins-slave:1.0
    restart: always
    ports:
     - "22"
    environment:
     - "constraint:NODE==master1"
  jenkins-master:
    image: jenkins:2.7.1
    container_name: jenkins-master
    restart: always
    ports:
     - "8080:8080"
     - "50000"
    environment:
     - "constraint:NODE==node1"

我用docker-compose -p jenkins up -d 运行这个脚本。 这会创建我的 2 个容器,但仅在我的主服务器上(从我执行命令的位置)。我希望在主节点上创建一个,在节点上创建一个。 我也尝试添加

networks:
  jenkins_swarm:
    driver: overlay

  networks:
     - jenkins_swarm

每次服务后,但都失败了:

Cannot create container for service jenkins-master: network jenkins_jenkins_swarm not found

虽然网络是在我执行docker network ls时创建的

有人可以帮助我使用 docker-compose 在我的 2 个节点上部署 2 个容器。 Swarm 肯定在我的“集群”上工作。我按照this教程进行验证。

【问题讨论】:

    标签: jenkins docker docker-compose docker-swarm


    【解决方案1】:

    Compose 目前不支持 Swarm 模式。

    当您在主节点上运行 docker compose up 时,Compose 会针对 Compose 文件中的服务发出 docker run 命令,而不是 docker service create - 这就是容器都在主节点上运行的原因。选项见this answer

    第二点,网络的范围是1.12。如果您检查您的网络,您会发现它是在 swarm 级别创建的,但 Compose 正在运行引擎级别的容器,无法看到 swarm 网络。

    【讨论】:

    • 我带着同样的问题来到这里。 Compose 的文档说它确实支持 Swarm。但是,要么有大量文档在工作(例如,你如何定义副本?)还是不正确? docs.docker.com/compose/swarm
    【解决方案2】:

    $ docker stack services PL

    • 尝试使用标签和放置约束将服务放在不同的节点上。

    示例“dev-compose-deploy.yml”文件供您参考

    version: "3"
    
    services:
    
      nginx:
        image: nexus.example.com/pl/nginx-dev:latest
        extra_hosts:
          - "dev-pldocker-01:10.2.0.42”
          - "int-pldocker-01:10.2.100.62”
          - "prd-plwebassets-01:10.2.0.62”
        ports:
          - "80:8003"
          - "443:443"
        volumes:
          - logs:/app/out/
        networks:
          - pl
        deploy:
          replicas: 3
          labels:
            feature.description: “Frontend”
          update_config:
            parallelism: 1
            delay: 10s
          restart_policy:
            condition: any
          placement:
            constraints: [node.role == worker]
        command: "/usr/sbin/nginx"
    
      viz:
        image: dockersamples/visualizer
        ports:
          - "8085:8080"
        networks:
          - pl
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock:ro
        deploy:
          replicas: 1
          labels:
            feature.description: "Visualizer"
          restart_policy:
            condition: any
          placement:
            constraints: [node.role == manager]
    
    networks:
    pl:
    
    volumes:
    logs:
    

    【讨论】: