docker stack 部署wordpress

compose yml的reference:https://docs.docker.com/compose/compose-file/

官方例子:

version: "3.3"

services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    networks:
      - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: vip                          #vip指service互访的时候,往外暴露的是虚拟的ip,底层通过lvs,负载均衡到后端服务器。默认为vip模式。

  mysql:
    image: mysql
    volumes:
       - db-data:/var/lib/mysql/data
    networks:
       - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: dnsrr                         #dnsrr,直接使用service的ip地址,当横向扩展了以后,可能有三个或者四个IP地址,循环调用。

volumes:
  db-data:

networks:
  overlay:

还有labels:打标签

mode:global和replicated,global代表全cluster只有一个,不能做横向扩展。replicated,mode的默认值,可以通过docker service scale做横向扩展。

placement:设定service的限定条件。比如:

version: '3.3'
services:
  db:
    image: postgres
    deploy:
      placement:
        constraints:
          - node.role == manager                 #db这个service一定会部署到manager这个节点,并且系统环境一定是ubuntu 14.04
          - engine.labels.operatingsystem == ubuntu 14.04
        preferences:
          - spread: node.labels.zone

replicas:如果设置了模式为replicted,可以设置这个值

resources:资源占用和保留。

restart_policy: 重启条件,延迟,重启次数

update_config: 配置更新时的参数,比如可以同时更新2个,要等10秒才更新第二个

cat docker-compose.yml 

version: '3'

 

services:

 

  web:                                          #这个service叫web

    image: wordpress

    ports:

      - 8080:80

    environment:

      WORDPRESS_DB_HOST: mysql

      WORDPRESS_DB_PASSWORD: root

    networks:

      - my-network

    depends_on:

      - mysql

    deploy:

      mode: replicated

      replicas: 3

      restart_policy:

        condition: on-failure

        delay: 5s

        max_attempts: 3

      update_config:

        parallelism: 1

        delay: 10s

 

  mysql:                                      #这个service叫mysql

    image: mysql

    environment:

      MYSQL_ROOT_PASSWORD: root

      MYSQL_DATABASE: wordpress

    volumes:

      - mysql-data:/var/lib/mysql

    networks:

      - my-network

    deploy:

      mode: global                          #指能创建一台,不允许replicated

      placement:

        constraints:

          - node.role == manager

 

volumes:

  mysql-data:

 

networks:

  my-network:

    driver: overlay                 #默认为bridge,但是我们在多机集群里,要改成overlay。

发布:

docker stack deploy  wordpress  --compose-file=docker-compose.yml         #stack的名字为wordpress

查看:

docker stack ls

docker stack ps wordpress

docker stack services wordpress              #显示services replicas的情况。

访问:随便挑一台node的ip 8080端口

注意:docker swarm不能使用上面投票系统中的build,所以要自己build image

投票系统,使用docker swarm部署:

cat docker-compose.yml 

version: "3"

services:

 

  redis:

    image: redis:alpine

    ports:

      - "6379"

    networks:

      - frontend

    deploy:

      replicas: 2

      update_config:

        parallelism: 2

        delay: 10s

      restart_policy:

        condition: on-failure

 

  db:

    image: postgres:9.4

    volumes:

      - db-data:/var/lib/postgresql/data

    networks:

      - backend

    deploy:

      placement:

        constraints: [node.role == manager]

 

  vote:

    image: dockersamples/examplevotingapp_vote:before

    ports:

      - 5000:80

    networks:

      - frontend

    depends_on:

      - redis

    deploy:

      replicas: 2

      update_config:

        parallelism: 2

      restart_policy:

        condition: on-failure

 

  result:

    image: dockersamples/examplevotingapp_result:before

    ports:

      - 5001:80

    networks:

      - backend

    depends_on:

      - db

    deploy:

      replicas: 1

      update_config:

        parallelism: 2

        delay: 10s

      restart_policy:

        condition: on-failure

 

  worker:

    image: dockersamples/examplevotingapp_worker

    networks:

      - frontend

      - backend

    deploy:

      mode: replicated

      replicas: 1

      labels: [APP=VOTING]

      restart_policy:

        condition: on-failure

        delay: 10s

        max_attempts: 3

        window: 120s

      placement:

        constraints: [node.role == manager]

 

  visualizer:

    image: dockersamples/visualizer:stable

    ports:

      - "8080:8080"

    stop_grace_period: 1m30s

    volumes:

      - "/var/run/docker.sock:/var/run/docker.sock"

    deploy:

      placement:

        constraints: [node.role == manager]

 

networks:

  frontend:                            #在swarm模式下默认是overlay的

  backend:

 

volumes:

  db-data:

启动:

docker stack deploy  voteapp  --compose-file=docker-compose.yml    

猜你喜欢

转载自www.cnblogs.com/hbxZJ/p/10886186.html