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. pandas 读取excel时,遇到数字变为科学计数法了, 怎么破?? 别慌 这样来处理

    # 指定字段以string 方式读取 df = pd.read_excel("./test.xlsx", converters={"id": str})

  2. navicat 连接报2059错误

    原因 navicat不支持mysql新版本的加密规则,mysql8 之前的版本中加密规则是mysql_native_password, mysql8之后,加密规则是caching_sha2_passw ...

  3. VTK坐标系统及视图分割

    计算机图像学里广泛应用的坐标系统有四种,分别是:模型坐标系统(model),世界坐标系统(world),视图坐标系统(view)和显示坐标系统(display). 模型坐标系统就是定义模型时所用的坐标 ...

  4. django实现简易登录注册

    经过一些文档的理解,以及一些时间的琢磨.我觉得可以用django做一些小项目了 先说说登录功能吧. 先创建一个app,用admin命令 在cmd打开到manage.py同级目录下,django-adm ...

  5. HCTF2018-admin[Unicode欺骗]

    看源码发现 在修改密码,登录,注册时都有都用strlower()来转小写 看了网上师傅的wp,经验之谈,python中自带转小写函数lower(),但这里使用strlower(),可能存在猫腻. 跟进 ...

  6. 【动态规划】【C/C++】简单的背包问题

    简单的背包问题 背包问题动态规划中非常经典的一个问题,本文只包含01背包,完全背包和多重背包.更加详尽的背包问题的讲解请参考崔添翼大神的<背包九讲> 简单的01背包 问题导入:新年到了,m ...

  7. AcWing 532. 货币系统

    #include <cstring> #include <iostream> #include <algorithm> using namespace std; ; ...

  8. StreamPipes

    MQTT is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol. It was desi ...

  9. codeforces 1288E. Messenger Simulator(树状数组)

    链接:https://codeforces.com/contest/1288/problem/E 题意:序列p的长度为n,初始序列为1 2 3 4 ...n,然后有m次操作,每次指定序列中一个数移动到 ...

  10. codeforces 1282B2. K for the Price of One (Hard Version) (dp)

    链接 https://codeforces.com/contest/1282/problem/B2 题意: 商店买东西,商店有n个物品,每个物品有自己的价格,商店有个优惠活动,当你买恰好k个东西时可以 ...