zoukankan      html  css  js  c++  java
  • Docker Swarm 参考:https://mp.weixin.qq.com/s/7o8QxGydMTUe4Q7Tz46Diw

    docker node ls

    docker service create --name web_server --replicas=2 httpd

    docker service ls

    docker service ps web_server

    docker service scale web_server=5  # 扩容
    docker service scale web_server=3  # 缩容

    docker service rm web_server

    要将 service 暴露到外部: docker service update --publish-add 8080:80 web_server
    如果是新建 service,可以直接用使用 --publish 参数: docker service create --name web_server --publish 8080:80 --replicas=2 httpd

    为什么 curl 集群中任何一个节点的 8080 端口,都能够访问到 web_server?
    无论访问哪个节点,即使该节点上没有运行 service 的副本,最终都能访问到 service


    要使用服务发现,需要相互通信的 service 必须属于同一个 overlay 网络,所以我们先得创建一个新的 overlay 网络。
    docker network create --driver overlay myapp_net

    部署 service 到 overlay:
    docker service create --name my_web --replicas=3 --network myapp_net httpd

    查看每个副本的 IP:
    docker exec util.1.bpon0vvbgve6lz3fp08sgana6 nslookup tasks.my_web

    将 service 更新到 httpd:2.2.32:docker service update --image httpd:2.2.32 my_web

    查看 service 的当前配置:docker service inspect --pretty my_web

    回滚:docker service update --rollback my_web
    请注意:--rollback 只能回滚到上一次执行 docker service update 之前的状态,并不能无限制地回滚

    ex-Ray 是开源的容器存储管理解决方案

    globalmode:其作用是强制在每个 node 上都运行一个且最多一个副本。即使之后有新的 node 加入,swarm 也会自动在新 node 上启动一个 gliderlabs/logspout 副本
    docker service create
    --mode global
    --name logspout
    --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock
    gliderlabs/logspout

    给节点打标签:docker node update --label-add env=test swarm-worker1
    通过标签部署服务:docker service create
    --constraint node.labels.env==test
    --replicas 3
    --name my_web
    --publish 8080:80
    httpd
    通过标签迁移服务
    docker service update --constraint-rm node.labels.env==test my_web
    docker service update --constraint-add node.labels.env==prod my_web

    label 还可以跟 global 模式配合起来使用
    docker service create
    --mode global
    --constraint node.labels.env==prod
    --name logspout
    --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock
    gliderlabs/logspout

    Health Check 可以是任何一个单独的命令
    docker service create --name my_db
    --health-cmd "curl --fail http://localhost:8091/pools || exit 1"
    couchbase

    --health-cmd Health Check 的命令,还有几个相关的参数:
    --timeout 命令超时的时间,默认 30s。
    --interval 命令执行的间隔时间,默认 30s。
    --retries 命令失败重试的次数,默认为 3,如果 3 次都失败了则会将容器标记为 unhealthy。swarm 会销毁并重建 unhealthy 的副本。

    使用 secret 启动 MySQL 容器:
    1)在 swarm manager 中创建 secret my_secret_data,将密码保存其中。
    echo "my-secret-pw" | docker secret create my_secret_data -
    2)启动 MySQL service,并指定使用 secret my_secret_data。
    docker service create
    --name mysql
    --secret source=my_secret_data,target=mysql_root_password
    -e MYSQL_ROOT_PASSWORD_FILE="/run/secrets/mysql_root_password"
    mysql:latest
    注意:解密后的内容保存到容器 /run/secrets/mysql_root_password 文件中,文件名称 mysql_root_password 由 target 指定
    secret 只能在 swarm service 中使用。普通容器想使用 secret,可以将其包装成副本数为 1 的 service。
    Docker 提供了 config 子命令来管理不需要加密的数据。config 与 secret 命令的使用方法完全一致。
    secret 创建后,即使是 swarm manager 也无法查看 secret 的明文数据,只能通过 docker secret inspect 查看 secret 的一般信息。

    stack 将应用所包含的 service,依赖的 secret、voluem 等资源,以及它们之间的关系定义在一个 YAML 文件中

    通过stack(yaml)定义服务之间的依赖关系: https://docs.docker.com/compose/compose-file/
    部署stack:docker stack deploy -c wordpress.yml wpstack
    注意:为了不重名,所有资源都会加上 stack 名称作为前缀,我们这里是 wpstack_*。
    如果想更新 stack 的某些属性,直接修改 YAML 文件,然后重新部署:docker stack deploy -c wordpress.yml wpstack

    查看应用中的服务:docker stack service wpstack
    docker stack ps wpstack
    删除应用:docker stack rm wpstack


  • 相关阅读:
    Java性能总结一(转)
    Java性能总结三(转)
    Java性能总结二(转)
    Jsp设计第三版文摘
    java配置错误记录
    PatternsInJava文摘
    Java性能总结四(转)
    Spring+Struts+Hibernate 简介(转)
    baidu c++吧上的一道题
    IT公司笔试题总结(三)
  • 原文地址:https://www.cnblogs.com/testzcy/p/13982788.html
Copyright © 2011-2022 走看看