Docker-compose: deploying service in multiple hosts

  • We can do this with docker compose v3 now.

    https://docs.docker.com/engine/swarm/#feature-highlights
    https://docs.docker.com/compose/compose-file/

  • You have to initialize the swarm cluster using command

    $ docker swarm init

  • You can add more nodes as worker or manager –

    https://docs.docker.com/engine/swarm/join-nodes/

  • Once you have your both nodes added to the cluster, pass your compose v3 i.e deployment file to create a stack. Compose file should just contain predefined images, you can’t give a Dockerfile for deployment in Swarm mode.

    $ docker stack deploy -c dev-compose-deploy.yml --with-registry-auth PL

  • View your stack services status –

    $ docker stack services PL

  • Try to use Labels & Placement constraints to put services on different nodes.

Example “dev-compose-deploy.yml” file for your reference

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:

Leave a Comment

tech