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. git本地仓库远程仓库地址更改

    git remote rm origingit remote add origin git@52.82.8.87:iot3.0-service/test.gitgit push -u origin - ...

  2. C语言运算符的优先级与结合性

    结合性:左结合是从左到右依次执行,右结合是从右到左依次执行. 优先级 运算符 名称或作用 运算类型 结合方向 特点 1 () [] -> . 小括号运算符 下标运算符 指向结构成员运算符 结构成 ...

  3. 关于vue :style 的几种使用方式

    :style的使用 一 ,最通用的写法 <p :style="{fontFamily:arr.conFontFamily,color:arr.conFontColor,backgrou ...

  4. python面试的100题(16)

    Python高级 元类 42.Python中类方法.类实例方法.静态方法有何区别? 类方法: 是类对象的方法,在定义时需要在上方使用 @classmethod 进行装饰,形参为cls,表示类对象,类对 ...

  5. centos软连接的增删

    软连接操作 增加 ln-s 源文件 软连接名 修改 ln –snf 源文件 软连接 删除 只删除软连接 rm -rf 软连接名 只删除源文件 rm -rf 源文件 -r循环 -f强制

  6. LED Decorative Light Supplier - LED Environmental Decorative Lighting Application

    Creating ambient lighting in the home can bridge the gap between the internal world and the outside ...

  7. org.apache.catalina.connector.ClientAbortException: java.io.IOException: 您的主机中的软件中止了一个已建立的连接。

    日志文件中有“java.io.IOException: 您的主机中的软件中止了一个已建立的连接.”错误 org.apache.catalina.connector.ClientAbortExcepti ...

  8. c数据结构 -- 栈与队列

    栈和队列 ·栈和队列是两种常用的.重要的数据结构 ·栈和队列是限定插入和删除只能在表的“端点”进行的线性表 栈 只能在队尾插入,只能在队尾删除 -- 后进后出 表尾称为栈顶:表头称为栈底 插入元素到栈 ...

  9. koa2第一天

    router.get("/hello",async(ctx )=>{ const a=await new Promise(reslove=>reslove(123)) ...

  10. Apache Kafka(二)- Kakfa 安装与启动

    安装并启动Kafka 1.下载最新版Kafka(当前为kafka_2.12-2.3.0)并解压: > wget http://mirror.bit.edu.cn/apache/kafka/2.3 ...