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. 牛客CSP-S提高组赛前集训营5 赛后总结

    A.无形的博弈 心理题. 答案为\(2^n\),可感性理解结论的正确性. #include<bits/stdc++.h> #define LL long long const LL Mod ...

  2. BZOJ3680 JSOI2004 平衡点 - 随机/近似算法

    迭代乱搞了下就过了…… #include <bits/stdc++.h> using namespace std; ],y[],w[]; double xm,ym,wt,k,lambda= ...

  3. Unable to create initial connections of pool. spring boot mysql

    Unable to create initial connections of pool. 在链接url里添加 将useSSL=true改为useSSL=false 只能说明服务器没有打开SSL功能

  4. Mac下Charles的安装和配置

    一.安装与破解 官网下载,破解方法参考其他,此处略 二.配置 1.电脑端安装 Charles 的根证书 注意:此时钥匙串默认为不信任,需设置为始终信任 2.配置代理:勾选enable transpre ...

  5. Docker最全教程——从理论到实战(十一)

    前言 容器教程的路还很长,笔者尽量根据实践来不断地完善.由于在编写的过程中还会有完善和补充,后续可能会以番外来补充. 接下来会分享TeamCity.树莓派等内容,节奏可能会有点跳脱. 另外,长沙.NE ...

  6. Codeforces Round #601 (Div. 2) A Changing Volume

    好吧,其实我拿到这个题的时候,首先想到了bfs,写完之后,开开森森的去交代码,却在第二个数据就TEL,然后优化半天,还是不行. 最终,我盯着1,2,5发呆半天,wc,然后直接贪心 #include&l ...

  7. SQL Server查询中特殊字符的处理方法 (SQL Server特殊符号的转义处理)

    SQL Server查询中特殊字符的处理方法 (SQL Server特殊符号的转义处理) SQL Server查询中,经常会遇到一些特殊字符,比如单引号'等,这些字符的处理方法,是SQL Server ...

  8. 关于微信小程序

    1.设置了tabBar的页面,好像用navigator跳不过去.

  9. xstart访问centos7

    参考文档:https://blog.csdn.net/wuzhimang/article/details/51523867

  10. [CCPC2019 哈尔滨] A. Artful Paintings - 差分约束,最短路

    Description 给 \(N\) 个格子区间涂色,有两类限制条件 区间 \([L,R]\) 内至少 \(K\) 个 区间 \([L,R]\) 外至少 \(K\) 个 求最少要涂多少个格子 Sol ...