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. [Arc068D/At2299] Card Eater - 结论

    [Arc068D/At2299] 有一堆牌,每张牌上有一个数字. 每次可以取出其中 \(3\) 张,丢掉数字最大的和数字最小的牌,把中间那张再放回牌堆. 要求最后所有剩余牌上的数字互不相同,求最多能剩 ...

  2. MapReduce第一个项目 WordCount

    参考自林子雨大数据教学:     http://dblab.xmu.edu.cn/blog/hadoop-build-project-using-eclipse/ 创建一个文件夹:放入一个文本文件:填 ...

  3. pom.xml文件中dependency标签的scope子标签

    1.最近整合了公司的一个项目A,而A又依赖项目B,项目B中pom.xml中有一个依赖的<scope>provided</scope>,查了一下,原来provided属性,jar ...

  4. ASP.NET MVC 获取表单数据

    public class Person { public string Name{get;set;} public string Phone{get;set;} } view层 @model Mode ...

  5. 0007 settings.py配置文件详解

    01 DEBUG调试配置 开发期设置为True,发布时设置为False 02 INSTALLED_APPS已安装的APP配置 INSTALLED_APPS = [ 'django.contrib.ad ...

  6. C++-POJ2960-S-Nim-[限制型Nim]

    每次只能从取集合S中个数的物品,其他和普通Nim游戏相同 预处理出每种物品堆的sg值,然后直接xor一下,xor-sum>0即必胜 #include <set> #include & ...

  7. Docker(一)概念与基础

    Docker 基础 为什么需要docker?在传统部署下,我们会遇到不同机器.不同依赖版本的兼容性等问题,解决此问题一般会消耗大量时间,并且在不同机器上均要执行统一环境的部署也是一个耗时较长的工作.除 ...

  8. 【JS】网站运行时间

    <span id="sitetime"></span> <script language=javascript> function siteTi ...

  9. K3/Cloud点击按钮打开第三方URL

    public override void AfterBarItemClick(BOS.Core.DynamicForm.PlugIn.Args.AfterBarItemClickEventArgs e ...

  10. 【转载】Hadoop Hive基础sql语法

    转自:http://www.cnblogs.com/HondaHsu/p/4346354.html Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在H ...