https://www.udemy.com/share/101u3o/ https://github.com/BretFisher/dogvscat https://labs.play-with-docker.com/

    1. docker swarm init
    2. docker swarm init --advertise-addr
    3. docker swarm join --token SWMTKN-1-82i5lntwh2p1oyeotu68dgz6k ip:2377
    4. docker node ls
    5. docker node update --role manger node1
    6. docker node ps
    7. docker service create --replicas 3 alpine ping 8.8.8.8
    8. docker service ls
    9. docker service ps name
    10. docker network create --driver overlay acdiostdrupal
    11. docker service create --name psql --network acdiostdrupal -e POSTGRES_PASSWORD=acdiost postgres
    12. docker container logs psql*
    13. docker service create --name drupal --network acdiostdrupal -p 80:80 drupal
    14. # 网络负载均衡
    15. docker service create --name es --replicas 3 -p 9200:9200 elasticsearch:2

    Drupal安装配置
    image.png

    1. docker stack deploy -c filename.yml name
    2. docker stack ls
    3. docker stack ps name
    4. docker stack services name
    5. docker stack rm name

    投票app配置文件

    1. version: "3"
    2. services:
    3. redis:
    4. image: redis:alpine
    5. networks:
    6. - frontend
    7. deploy:
    8. replicas: 1
    9. update_config:
    10. parallelism: 2
    11. delay: 10s
    12. restart_policy:
    13. condition: on-failure
    14. db:
    15. image: postgres:9.6
    16. environment:
    17. POSTGRES_USER: "postgres"
    18. POSTGRES_PASSWORD: "postgres"
    19. POSTGRES_HOST_AUTH_METHOD: trust
    20. networks:
    21. - backend
    22. deploy:
    23. placement:
    24. constraints: [node.role == manager]
    25. vote:
    26. image: dockersamples/examplevotingapp_vote:before
    27. ports:
    28. - 5000:80
    29. networks:
    30. - frontend
    31. depends_on:
    32. - redis
    33. deploy:
    34. replicas: 2
    35. update_config:
    36. parallelism: 2
    37. restart_policy:
    38. condition: on-failure
    39. result:
    40. image: dockersamples/examplevotingapp_result:before
    41. ports:
    42. - 5001:80
    43. networks:
    44. - backend
    45. depends_on:
    46. - db
    47. deploy:
    48. replicas: 1
    49. update_config:
    50. parallelism: 2
    51. delay: 10s
    52. restart_policy:
    53. condition: on-failure
    54. worker:
    55. image: dockersamples/examplevotingapp_worker
    56. networks:
    57. - frontend
    58. - backend
    59. depends_on:
    60. - db
    61. - redis
    62. deploy:
    63. mode: replicated
    64. replicas: 1
    65. labels: [APP=VOTING]
    66. restart_policy:
    67. condition: on-failure
    68. delay: 10s
    69. max_attempts: 3
    70. window: 120s
    71. placement:
    72. constraints: [node.role == manager]
    73. visualizer:
    74. image: dockersamples/visualizer
    75. ports:
    76. - "8080:8080"
    77. stop_grace_period: 1m30s
    78. volumes:
    79. - "/var/run/docker.sock:/var/run/docker.sock"
    80. deploy:
    81. placement:
    82. constraints: [node.role == manager]
    83. networks:
    84. frontend:
    85. backend:

    image.png

    version: "3.1"
    
    services:
      psql:
        image: postres
        secrets:
          - psql_user
          - psql_password
        environment:
          POSTGRES_PASSWORD_FILE: /run/secrets/psql_password
          POSTGRES_USER_FILE: /run/sectests/psql_user
    
    secrets:
      psql_user:
        file: ./psql_user.txt
      psql_password:
        file: ./psql_password.txt
    
    # secret 限制大小为 500kb ,版本为 3.1 以上
    docker secret create psql_user psql_user.txt
    
    echo 'password' | docker secret create psql_pass -
    
    docker secret ls
    docker secret inspect name
    
    docker service create --name psql \
    --secret psql_user --secret psql_pass \
    -e POSTGRES_PASSWORD_FILE=/run/secrets/psql_password \
    -e POSTGRES_USER_FILE=/run/sectests/psql_user
    
    docker service update --secret-rm
    
    docker-compose -f name1.yml -f name2.yml up -d
    docker-compose -f name1.yml -f name2.yml config > output.yml
    
    # 创建服务
    docker service create -p 80:80 --name web nginx:1.13.7
    # 扩容
    docker service scale web=5
    # 版本更新
    docker service update --image nginx:1.13.6 web
    # 更新端口
    docker service update --publish-rm 80 --publish-add 8090:80 web
    # 重新分配节点,作用是可以利用空闲的服务器
    docker service update --force web
    

    健康检查

    # 基于命令的健康检查
    docker container run --name p2 -d --health-cmd="pg_isready -U postgres || exit 1" postgres
    # 审查容器可以看到健康检查的返回结果
    docker inspect 容器
    # 基于服务的健康检查
    docker service create --name p2 --health-cmd="pg_isready -U postgres || exit 1" postgres
    

    服务约束

    docker service create --constraint=node.role==manager nginx
    docker service create --constraint=node.role!=work nginx
    
    # 添加标签
    docker node update --label-add=dmz=true node2
    docker service create --constraint=node.labels.dmz==true nginx
    
    # 修改约束
    docker service update --constraint-rm node.role==worker --constraint-add node.role==manager app1
    

    服务模式

    docker service create --mode=global nginx
    docker service create --mode=global --constraint=node.role==work nginx
    

    放置首选项

    docker service create --placement-pref spread=node.labels.xxx --replicas 3 nginx
    --placement-pref-add spread=
    --placement-pref-rm spread=