1. 概述

    1. docker inspect -f 引出
    2. 希望学会后, 可以处理这个命令
  2. 问题: 这是啥

    1. 疑问

      1. 最开始, 我以为是 jsonpath
      2. 后来看 命令行的解释, 说叫 go template
      3. 但是我查了查东西, 发现这俩玩意又是那么的相似
    2. 结果

      1. 这确实是 Go Template

1. Go Template

  1. 概述

    1. go 语言的模板类库
  2. 作用

    1. 类似 jsp, velocty, thymeleaf

      1. 预先定义模板
      2. 然后在通过变量渲染
      3. 最终得出所谓的 动态页面
    2. 但是这里, 貌似成为了一个 json 属性获取器
      1. 而且还是不那么好用的那种

2. docker inspect

  1. 概述

    1. -f 参数, 支持 go template
  2. 作用

    1. 以 整个 json 为 根元素

      1. 通过特定的语法, 获取特定位置的值
  3. 问题

    1. 也不算是问题, 但是这样显示, 确实需要适应

      1. 查询的结果

          1. 显示单个值
        1. 数组
          1. 返回数组
          2. 中间以 ' ' 分割
        2. 字典/map
          1. 只返回 value
          2. 中间以 ' ' 分割
        3. 混合
          1. 同样只返回 value
          2. 中间以 ' ' 分割
        4. 嵌套
          1. 还是只返回 value
          2. 中间以 ' ' 分割
      2. 我不太喜欢这种方式

        1. 没有 ', ' 分割
        2. map 没有 key
        3. 但是不代表, 这个不合理
        4. 或者说
          1. 这个作为 模板类库, 是合理的
          2. 但是作为信息检索的工具, 有点不太合适
      3. 这个

        1. 熟练就好了
        2. 可以想办法克服
          1. 后面有 json 函数

3. 定位元素

  1. 上下文

    1. 概述

      1. json 结果的 根元素
    2. 格式

      {{.}}
      {{$.}}
  2. 字段

    1. 概述

      1. 提取结果里, 某个字段的值
    2. 格式

      # 单个值
      > docker image inspect -f '{{.Id}}' ubuntu
      sha256:7698f282e5242af2b9d2291458d4e425c75b25b0008c1e058d66b717b4c06fa9
      # 返回 字典属性
      # map 没有被正确还原
      > docker image inspect -f '{{.RootFS}}' ubuntu
      {layers [sha256:02571d034293cb241c078d7ecbf7a84b83a5df2508f11a91de26ec38eb6122f1 sha256:270f934787edf0135132b6780cead0f12ca11690c5d6a5d395e44d290912100a sha256:8d267010480fed7e616b9b7861854042aad4ef5e55f8771f2c738061640d2cb0] }
  3. 层级

    1. 概述

      1. 可以取到 json 的深层
    2. 格式

      > docker image inspect -f '{{.RootFS.Type}}' ubuntu
      layers
  4. index

    1. 概述

      1. 可以取到 json 中数组的 index
    2. 格式

      > docker image inspect -f '{{index .RootFS.Layers 0}}' ubuntu
      sha256:02571d034293cb241c078d7ecbf7a84b83a5df2508f11a91de26ec38eb6122f1o
      # 其实也可以直接取 元素
      # 字符串要加 引号
      > docker image inspect -f '{{index .RootFS "Type"}}' ubuntu
      layers

4. 布尔函数

  1. eq

    1. 概述

      1. 比较两个元素是否相等
      2. 元素类型要相等
    2. 格式

      # 当然也可以比较 根元素下面的值
      > docker image inspect -f '{{eq 1 1}}' ubuntu
      true
  2. ne

    1. 概述

      1. 比较两个元素是否不等
      2. 元素类型要相等
    2. 格式

      # 当然也可以比较 根元素下面的值
      > docker image inspect -f '{{ne 2 1}}' ubuntu

true

```

  1. lt

    1. 概述

      1. 比较两个元素 a 和 b, a < b 是否成立
      2. 元素类型要相等
    2. 格式

      # 当然也可以比较 根元素下面的值
      > docker image inspect -f '{{lt 1 2}}' ubuntu
      true
  2. le

    1. 概述

      1. 比较两个元素 a 和 b, a <= b 是否成立
      2. 元素类型要相等
    2. 格式

      # 当然也可以比较 根元素下面的值
      > docker image inspect -f '{{le 1 1}}' ubuntu
      true
  3. gt

    1. 概述

      1. 比较两个元素 a 和 b, a > b 是否成立
      2. 元素类型要相等
    2. 格式

      # 当然也可以比较 根元素下面的值
      > docker image inspect -f '{{gt 2 1}}' ubuntu
      true
  4. ge

    1. 概述

      1. 比较两个元素 a 和 b, a >= b 是否成立
      2. 元素类型要相等
    2. 格式

      # 当然也可以比较 根元素下面的值
      > docker image inspect -f '{{ge 1 1}}' ubuntu
      true

5. 打印函数

  1. print

      1. go 的 print 函数, 我现在还没学, 学会了再补
  2. printf

      1. go 的 print 函数, 我现在还没学, 学会了再补
  3. println

      1. go 的 print 函数, 我现在还没学, 学会了再补
  4. urlquery

      1. 这个真不会
  5. json

    1. 概述

      1. 按 json 的格式, 展示 key 的 value
    2. 格式

      > docker image inspect -f '{{json .RootFS}}' ubuntu
      {"Type":"layers","Layers":["sha256:02571d034293cb241c078d7ecbf7a84b83a5df2508f11a91de26ec38eb6122f1","sha256:270f934787edf0135132b6780cead0f12ca11690c5d6a5d395e44d290912100a","sha256:8d267010480fed7e616b9b7861854042aad4ef5e55f8771f2c738061640d2cb0"]}
    3. 注意

      1. 这个命令只能处理 {} 元素
  6. len

    1. 概述

      1. 返回内容的长度

        1. 内容是 集合 时, 返回 集合长度
        2. 内容是 字符串 时, 返回 字符串长度
        3. 内容是 数字 时, 返回 字数字长度
    2. 格式

      > docker image inspect -f '{{len .RootFS}}' ubuntu
      2
      > docker image inspect -f '{{len .RootFS.Type}}' ubuntu
      6

6. 逻辑函数

  1. and

    1. 概述

      1. 做 逻辑与
    2. 格式

      > docker image inspect -f '{{and true true}}' ubuntu
      true
  2. not

    1. 概述

      1. 做 逻辑非
    2. 格式

      > docker image inspect -f '{{and true true}}' ubuntu
      true
  3. or

    1. 概述

      1. 返回内容的长度
    2. 格式

      > docker image inspect -f '{{and true true}}' ubuntu
      true

7. 结构

  1. if

  2. range

  3. with

8. 打印

  1. 概述

    1. 其实这个 {{}} 可以配合其他内容来打印
  2. 格式

    # 配合 print 可以打印出各种效果
    > docker image inspect -f '你好 {{len .Size}}' ubuntu
    你好 8

ps

  1. ref

    1. Docker Inspect

      1. 讲得还行

        1. 起码是有例子, 有细节
        2. 基础讲得还行
    2. golang模板语法使用说明

      1. 函数讲得还行
    3. 使用 JSONPath 解析 JSON 完整内容详解

      1. 给这个例子, 只是为了告诉你, go template 和 jsonpath 真的不是一个东西
    4. Go语言标准库之template

      1. 更加正式的描述 go template
  2. 其他

    1. 结构部分 需要补上
    2. 打印 部分, 需要补上
  3. 用处

    1. 老实说, 感觉其实用处, 也没那么大...

Docker - 周边 - Go Template的更多相关文章

  1. Docker是什么

    Docker是什么 相信我们很多人都使用多VM(Virtual Machine),也就是虚拟机,简单的来说Docker就是类是于VM的容器,但Docker要轻量得多,VM(Virtual Machin ...

  2. Docker学习笔记之Docker应用于服务化开发

    0x00 概述 上一节里我们谈到了小型的独立项目如何使用 Docker Compose 来搭建程序的运行环境,对于由多人或多部门参与的中大型服务化架构的项目,仅由一个 Docker Compose 项 ...

  3. Docker学习笔记之Docker 的简历

    0x00 概述 在了解虚拟化和容器技术后,我们就更容易理解 Docker 的相关知识了.在这一小节中,我将介绍关于 Docker 的出现和发展,Docker 背后的技术.同时,我们将阐述 Docker ...

  4. docker 实践

    https://doc.yonyoucloud.com/doc/docker_practice/etcd/etcdctl.html 启动http restful API docker批量映射端口 怎么 ...

  5. Docker源码分析(四):Docker Daemon之NewDaemon实现

    1. 前言 Docker的生态系统日趋完善,开发者群体也在日趋庞大,这让业界对Docker持续抱有极其乐观的态度.如今,对于广大开发者而言,使用Docker这项技术已然不是门槛,享受Docker带来的 ...

  6. 超简单的 Docker部署 SpringBoot项目 步骤

    很久之前就用过,一直没有好好写篇博客,今天就总结一下 创建一个 SpringBoot项目 创建一个SpringBoot项目并打成jar包,结构如图 编写 Dockerfile文件 FROM java: ...

  7. zabbix基本监控各指标简解

    监控项目及使用模板 监控http和https: Template App HTTP Service     Template App HTTPS Service 监控cpu,内存,网络等: Templ ...

  8. salt 安装kubernetes集群3节点

    [root@linux-node1 k8s]# tree .├── etcd.sls├── files│   ├── cfssl-1.2│   │   ├── cfssl-certinfo_linux ...

  9. docker-install-v0.1-alpha

    Written by Zak Zhu docker-install-v0.1-alpha/ ├── inventory ├── roles │ └── docker │ ├── defaults │

随机推荐

  1. C++——字符串处理

    11.用字符数组存储和处理字符串 字符数组的声明和引用  字符串: 字符串常量 “china”,没有字符串变量,用字符数组来存放字符串,字符串以‘\0’结束. 字符串数组的初始化: 逐个输出输入字符串 ...

  2. C++——指针5

    8.2 指向类的静态成员的指针 对类的静态成员的访问不依赖于对象,可以用普通的指针来指向和访问. //通过指针访问类的静态数据成员 #include <iostream> using na ...

  3. nginx启动时指定配置文件

    下载源文件方式安装nginx 会在/usr/local目录下安装nginx 此时虚拟机系统中会有两个nginx 如果启动的时候没有指定配置文件的位置,默认读取的配置文件就是/usr/local/ngi ...

  4. CF-478C Table Decorations (贪心)

    Table Decorations Time limit per test: 1 second Memory limit per test: 256 megabytes Problem Descrip ...

  5. 使用PHP链接MySQL

    一.使用PHP查询MySQL数据库: 1.通过PHP来访问MySQL的步骤是: 连接到MySQL 选择操作的数据库 创建查询的字段 执行查询的语句 检索出结果并在网页上显示 断开与MySQL的连接 我 ...

  6. range()用法

    来源:http://www.cnblogs.com/wangwp/p/4535299.html 例子:http://www.cnblogs.com/hongten/p/hongten_python_r ...

  7. 继 “多闪”后“飞聊”再被diss?其实社交还能这么玩

    近日头条低调上线了新的社交APP——飞聊,目前在AppStore社交排行榜第7位.但很多人使用了之后都觉得新产品的各个功能都让人想起其他的产品.兴趣小组让人想到豆瓣的兴趣小组,生活动态让人想到微博动态 ...

  8. XPath注入

    XPath基础 XPath 即为 XML 路径语言,是一门在XML文档中查找信息的语言.XPath 基于 XML 的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻 ...

  9. 不可将布尔值直接与true或者1进行比较

    不可将布尔值直接与TRUR.FALSE或者"0"."1"进行比较. 根据布尔值的定义,零值为"假"(记为FALSE),任何非零值都是&quo ...

  10. 动态数组、allocator 类

    12.2 动态数组 12.2.1 new 和数组 1.分配一个动态数组即是在分配一个new对象时在类型名之后加一对方括号,用来存放数组大小,该数可以是任意表达式.也可以是0,只需是整形.无需是常量.数 ...