背景说明
Docker —format 参数提供了基于 Go模板 的日志格式化输出辅助功能,并提供了一些内置的增强函数,例如如下命令
[root@template ~]# docker version
Client: Docker Engine - Community
Version: 20.10.14
API version: 1.41
Go version: go1.16.15
Git commit: a224086
Built: Thu Mar 24 01:49:57 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.14
API version: 1.41 (minimum version 1.12)
Go version: go1.16.15
Git commit: 87a90dc
Built: Thu Mar 24 01:48:24 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.5.11
GitCommit: 3df54a852345ae127d1fa3092b95168e4a88e2f8
runc:
Version: 1.0.3
GitCommit: v1.0.3-0-gf46b6ba
docker-init:
Version: 0.19.0
GitCommit: de40ad0
[root@template ~]#
则可以使用--format
进行定义JSON输出
[root@template ~]# docker version --format='{{json .}}'
{"Client":{"Platform":{"Name":"Docker Engine - Community"},"Version":"20.10.14","ApiVersion":"1.41","DefaultAPIVersion":"1.41","GitCommit":"a224086","GoVersion":"go1.16.15","Os":"linux","Arch":"amd64","BuildTime":"Thu Mar 24 01:49:57 2022","Context":"default","Experimental":true},"Server":{"Platform":{"Name":"Docker Engine - Community"},"Components":[{"Name":"Engine","Version":"20.10.14","Details":{"ApiVersion":"1.41","Arch":"amd64","BuildTime":"Thu Mar 24 01:48:24 2022","Experimental":"false","GitCommit":"87a90dc","GoVersion":"go1.16.15","KernelVersion":"3.10.0-957.el7.x86_64","MinAPIVersion":"1.12","Os":"linux"}},{"Name":"containerd","Version":"1.5.11","Details":{"GitCommit":"3df54a852345ae127d1fa3092b95168e4a88e2f8"}},{"Name":"runc","Version":"1.0.3","Details":{"GitCommit":"v1.0.3-0-gf46b6ba"}},{"Name":"docker-init","Version":"0.19.0","Details":{"GitCommit":"de40ad0"}}],"Version":"20.10.14","ApiVersion":"1.41","MinAPIVersion":"1.12","GitCommit":"87a90dc","GoVersion":"go1.16.15","Os":"linux","Arch":"amd64","KernelVersion":"3.10.0-957.el7.x86_64","BuildTime":"2022-03-24T01:48:24.000000000+00:00"}}
[root@template ~]# docker version --format='{{json .}}' | jq .
{
"Client": {
"Platform": {
"Name": "Docker Engine - Community"
},
"Version": "20.10.14",
"ApiVersion": "1.41",
"DefaultAPIVersion": "1.41",
"GitCommit": "a224086",
"GoVersion": "go1.16.15",
"Os": "linux",
"Arch": "amd64",
"BuildTime": "Thu Mar 24 01:49:57 2022",
"Context": "default",
"Experimental": true
},
"Server": {
"Platform": {
"Name": "Docker Engine - Community"
},
"Components": [
{
"Name": "Engine",
"Version": "20.10.14",
"Details": {
"ApiVersion": "1.41",
"Arch": "amd64",
"BuildTime": "Thu Mar 24 01:48:24 2022",
"Experimental": "false",
"GitCommit": "87a90dc",
"GoVersion": "go1.16.15",
"KernelVersion": "3.10.0-957.el7.x86_64",
"MinAPIVersion": "1.12",
"Os": "linux"
}
},
{
"Name": "containerd",
"Version": "1.5.11",
"Details": {
"GitCommit": "3df54a852345ae127d1fa3092b95168e4a88e2f8"
}
},
{
"Name": "runc",
"Version": "1.0.3",
"Details": {
"GitCommit": "v1.0.3-0-gf46b6ba"
}
},
{
"Name": "docker-init",
"Version": "0.19.0",
"Details": {
"GitCommit": "de40ad0"
}
}
],
"Version": "20.10.14",
"ApiVersion": "1.41",
"MinAPIVersion": "1.12",
"GitCommit": "87a90dc",
"GoVersion": "go1.16.15",
"Os": "linux",
"Arch": "amd64",
"KernelVersion": "3.10.0-957.el7.x86_64",
"BuildTime": "2022-03-24T01:48:24.000000000+00:00"
}
}
[root@template ~]#
仅输出版本信息
[root@template ~]# docker version --format='{{ .Client.Version }}'
20.10.14
[root@template ~]#
解决方案
镜像输出
[root@template docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest beae173ccac6 3 months ago 1.24MB
nginx latest 605c77e624dd 3 months ago 141MB
[root@template docker]#
[root@template docker]# docker images --format '{{ json . }}'| jq .
{
"Containers": "N/A",
"CreatedAt": "2021-12-31 03:19:41 +0800 CST",
"CreatedSince": "3 months ago",
"Digest": "<none>",
"ID": "beae173ccac6",
"Repository": "busybox",
"SharedSize": "N/A",
"Size": "1.24MB",
"Tag": "latest",
"UniqueSize": "N/A",
"VirtualSize": "1.24MB"
}
{
"Containers": "N/A",
"CreatedAt": "2021-12-30 03:28:29 +0800 CST",
"CreatedSince": "3 months ago",
"Digest": "<none>",
"ID": "605c77e624dd",
"Repository": "nginx",
"SharedSize": "N/A",
"Size": "141MB",
"Tag": "latest",
"UniqueSize": "N/A",
"VirtualSize": "141.5MB"
}
这里针对常用需求进行格式拼装
"table {{.Repository}}:{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}"
命令执行验证
[root@template docker]# docker images --format "table {{.Repository}}:{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}"
REPOSITORY:TAG IMAGE ID CREATED AT
busybox:latest beae173ccac6 2021-12-31 03:19:41 +0800 CST
nginx:latest 605c77e624dd 2021-12-30 03:28:29 +0800 CST
[root@template docker]#
容器输出
首先运行一个容器
[root@template ~]# docker container run -d nginx
d91aa5eac508bcd9ba44371dce3415bda6f3d9baaf15112cac611791ab877a9f
查看容器实例
[root@template ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d91aa5eac508 nginx "/docker-entrypoint.…" 11 seconds ago Up 10 seconds 80/tcp blissful_darwin
[root@template ~]# docker ps --format '{{json .}}' |jq .
{
"Command": "\"/docker-entrypoint.…\"",
"CreatedAt": "2022-04-09 05:49:13 +0800 CST",
"ID": "d91aa5eac508",
"Image": "nginx",
"Labels": "maintainer=NGINX Docker Maintainers <docker-maint@nginx.com>",
"LocalVolumes": "0",
"Mounts": "",
"Names": "blissful_darwin",
"Networks": "bridge",
"Ports": "80/tcp",
"RunningFor": "11 minutes ago",
"Size": "1.09kB (virtual 141MB)",
"State": "running",
"Status": "Up 11 minutes"
}
[root@template ~]#
这里针对常用需求进行格式拼装
"table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Networks}}\t{{.Status}}\t{{.Ports}}"
命令执行验证
[root@template ~]# docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Networks}}\t{{.Status}}\t{{.Ports}}"
CONTAINER ID NAMES IMAGE NETWORKS STATUS PORTS
d91aa5eac508 blissful_darwin nginx bridge Up 15 minutes 80/tcp
[root@template ~]#
容器主机
[root@template ~]# docker inspect --format "{{println}}{{.Name}} {{.Config.Image}} {{.Config.Hostname}} {{.NetworkSettings.IPAddress}} {{.NetworkSettings.Ports}} {{.Args}}{{println}}" $(docker ps -q)
/blissful_darwin nginx d91aa5eac508 172.17.0.2 map[80/tcp:[]] [nginx -g daemon off;]
[root@template ~]#
别名汇总
alias docker-img='docker images --format "table {{.Repository}}:{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}"'
alias docker-ps='docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Networks}}\t{{.Status}}\t{{.Ports}}"'
alias docker-ip='docker inspect --format "{{println}}{{.Name}} {{.Config.Image}} {{.Config.Hostname}} {{.NetworkSettings.IPAddress}} {{.NetworkSettings.Ports}} {{.Args}}{{println}}" $(docker ps -q)'