zoukankan      html  css  js  c++  java
  • 浅析docker service logs命令获取服务日志、docker service常用命令及docker service的更新流程

      在分布式应用程序中,应用程序的不同部分被称为“服务”。例如,如果有一个视频共享网站,它可能包括一个用于将应用程序数据存储在数据库中的服务,一个在用户上传东西后在后台进行视频转码的服务,一个用于前端页面的服务等等。

      服务实际上只是“生产中的容器”。每个服务只运行一个映像,但它编码了镜像的运行方式 - 应该使用哪个端口,容器应运行多少个副本以满足性能要求等等。 伸缩服务可以更改运行该软件的容器实例的数量,从而为进程中的服务分配更多计算资源。

      定义、运行和伸缩 Docker 平台的服务很简单,只需要写一个 docker-compose.yml 文件。

      Swarm services使用声明性模型,这意味着你可以定义服务的理想状态,并依靠Docker保持状态。状态信息如下:

    • 运行服务容器所依赖的镜像名称和tag
    • 该服务包含多少容器
    • 是否有任何端口暴露在swarm集群的客户端上
    • 当docker服务启动时,service是否自动启动
    • 重新启动服务时发生的特定行为(例如是否使用回滚重新启动)
    • 服务可以运行的节点的特性(如资源约束和位置偏好

    一、docker service常用命令

      docker service logs [OPTIONS] SERVICE,用于获取服务的日志。docker服务记录命令批量检索执行时存在的日志。

      当我们在启动服务,发现服务未启动有异常的时候,使用 docker service logs 命令去查看服务的错误日志,就可以发现异常问题,根据问题找到解决方案。   ——   是一个很实用的命令

      常用命令我们主要看docker官网文档:docker service  —— https://docs.docker.com/engine/reference/commandline/service_create/

    // 1、docker service create 创建一个服务
    // replicas 参数是指运行实例个数
    // name 参数指定服务名称
    // alpine 指的是使用的镜像名称
    // ping docker.com 指的是容器运行的bash
    docker service create --replicas 5 --name myhelloworld alpine ping docker.com
    
    // 2、查看创建出来的服务
    docker service ls
    
    // 3、docker service update更新服务
    // --publish-add参数指添加或者更新一个对外端口
    // --image参数指更新镜像
    // --hostname 更新或指定容器名称
    // --force 指强制更新,即使本次更新没有任何改变
    docker service update --publish-add 80 my_web
    docker service update --image test_modb_front --force test_emcs-front
    
    // 4、docker service inspect查看服务详情
    docker service inspect my_web
    
    // 5、docker service ps 搜索服务命令
    docker service ps my_web
    
    // 6、docker service rm删除服务
    docker service rm my_web
    
    // 7、docker service scale 扩展一个或多个服务 
    docker service scale webtier_nginx=5

    二、docker service更新流程

      serive更新其实并不是简单的更新,在swarm模式下的service都是在运行中的,是正在运行的时候进行更新。swarm用在生产环境,我们不想因为更新版本中断咱们的业务,想的是不影响正常的业务开展。在现实生产环境进行不宕机的更新远比现在咱们这种要复杂的多的多,咱们这次演示可能稍微简单,只是让大家明白一个思路。

      我们测试的具体步骤如下:先创建一个service,从hub中拉取1.0版本,然后扩展service里面的容器数量为2,通过shell脚本的方式访问容器返回结果,然后将拉取1.0的版本升级为2.0版本,查看shell访问的返回是否中断。

    1、必须创建overlay的network  ——  创建名为 demo 的 overlay 网络

    sudo docker network create -d overlay demo

    2、创建servie

    (1)拉取 1.0 版本,创建 python-flask-demo:1.0 服务,映射本地的 8080 端口 到 容器的 5000 端口

    docker service create --name web -p 8080:5000 --network demo python-flask-demo:1.0
    docker service ls
    docker service ps web

    (2)横向扩展容器数量

    docker service scale web=2
    docker service ls
    docker service ps web

    3、shell 循环请求 web  ——  我们为了在测试更新过程中,查看更新时服务中不中断,所以写一个 shell 脚本一直访问

    sh -c "while true;do curl 127.0.0.1:8080&&sleep 1;done"

    4、开始更新为2.0版本    ——  更新过程中服务没有中断

    docker service update --image python-flask-demo:2.0 web
    // 1.0已经shutdown了,启动了2.0
    docker service ps web

    5、更新端口  ——  端口更新可能存在业务中断的情况

      更新 service 端口映射  ——  将 外部访问端口 8080 变换为 8888

    docker service update --publish-rm 8080:5000 --publish-add 8088:5000 web
    docker service ps web

      更新流程部分来源于这篇博客的学习笔记:https://blog.csdn.net/zhugeaming2018/article/details/8237922

  • 相关阅读:
    连续竞价
    使用 Sonar 进行代码质量管理
    【转】jQuery.ajax向后台传递数组问题
    DevOps
    【转】赚钱的思维
    【转】如果有人让你推荐编程技术书,请叫他看这个列表
    Java学习记录-Jdk包简单介绍
    有两个指针pa,pb分别指向有两个数,a,b,请写一个函数交换两个指针的指向,也就是让pa指向b,让pb指向a
    有两个数a,b,请写一个函数交换a,b
    开辟一个二维数组,有10*8个元素,用随机数填充,按照下面的方法用函数实现查找一个数是否存在
  • 原文地址:https://www.cnblogs.com/goloving/p/15054007.html
Copyright © 2011-2022 走看看