使用 docker-compose 与 docker swarm

Use docker-compose with docker swarm

我正在使用 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 正在致力于我的 "cluster"。我按照this教程来验证。

Compose 目前不支持群模式。

当您在主节点上 运行 docker compose up 时,Compose 会为 Compose 文件中的服务发出 docker run 命令,而不是 docker service create - 这就是为什么master 上的所有容器 运行。有关选项,请参阅 this answer

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

$ docker stack services PL

  • 尝试使用Labels & Placement 约束将服务放在不同的节点上。

示例"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: