Docker命令-容器操作

Docker ps 命令


docker ps 命令用于列出 Docker 容器。

默认情况下,docker ps 命令只显示运行中的容器,但也可以通过指定选项来显示所有容器,包括停止的容器。

语法

docker ps [OPTIONS]

OPTIONS说明:

  • -a, --all: 显示所有容器,包括停止的容器。

  • -q, --quiet: 只显示容器 ID。

  • -l, --latest: 显示最近创建的一个容器,包括所有状态。

  • -n: 显示最近创建的 n 个容器,包括所有状态。

  • --no-trunc: 不截断输出。

  • -s, --size: 显示容器的大小。

  • --filter, -f: 根据条件过滤显示的容器。

  • --format: 格式化输出。

实例

1、列出所有在运行的容器信息

默认情况下,docker ps 只显示正在运行的容器。

1
2
3
4
docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
09b93464c2f7 nginx:latest "nginx -g 'daemon off" ... 80/tcp, 443/tcp myrunoob
96f7f14e99ab mysql:5.6 "docker-entrypoint.sh" ... 0.0.0.0:3306->3306/tcp mymysql

输出详情介绍:

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。

状态有7种:

  • created(已创建)

  • restarting(重启中)

  • running(运行中)

  • removing(迁移中)

  • paused(暂停)

  • exited(停止)

  • dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

2、列出所有容器,包括停止的容器

docker ps -a

显示所有容器,包括停止的容器。

3、只显示容器 ID

docker ps -q

只显示容器 ID。

4、显示最近创建的一个容器

docker ps -l

显示最近创建的一个容器,包括所有状态。

5、显示最近创建的 n 个容器

docker ps -n 3

显示最近创建的 3 个容器,包括所有状态。

6、显示容器的大小

docker ps -s

显示容器的大小。

7、根据条件过滤显示的容器

docker ps -f "status=exited"

显示状态为 exited 的容器。

docker ps -f "name=my_container"

显示名称包含 my_container 的容器。

8、格式化输出

docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"

以表格形式显示容器的 ID、名称和状态。

常见过滤器

  • status: 容器状态(如 runningpausedexited)。

  • name: 容器名称。

  • id: 容器 ID。

  • label: 容器标签。

  • ancestor: 容器镜像。

使用场景

  • 监控容器状态: 实时监控运行中的容器状态和资源使用情况。

  • 调试和管理: 查看所有容器,包括停止的容器,以便进行调试和管理操作。

  • 自动化脚本: 使用过滤器和格式化选项,便于在自动化脚本中获取特定容器信息。

docker inspect 命令


docker inspect 命令用于获取 Docker 对象(容器、镜像、卷、网络等)的详细信息。

docker inspect 命令返回 JSON 格式的详细信息,可以帮助用户了解对象的配置和状态。

语法

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

OPTIONS 说明:

  • -f, --format: 使用 Go 模板语法格式化输出。

  • --type: 返回指定类型的对象信息(可选类型:containerimagenetworkvolume)。

实例

1、检查容器

docker inspect my_container

返回 my_container 容器的详细信息。

2、检查镜像

docker inspect my_image

返回 my_image 镜像的详细信息。

3、检查卷

docker inspect my_volume

返回 my_volume 卷的详细信息。

4、检查网络

docker inspect my_network

返回 my_network 网络的详细信息。

5、格式化输出

docker inspect --format '{{ .State.Running }}' my_container

返回 my_container 容器的运行状态,格式化输出为布尔值。

6、检查多个对象

docker inspect my_container my_image

返回 my_container 容器和 my_image 镜像的详细信息。

实例输出

容器信息:

docker inspect my_container

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
[
{
"Id": "d2f5e3f19a6a",
"Created": "2024-07-23T00:00:00Z",
"Path": "bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 12345,
"ExitCode": 0,
"Error": "",
"StartedAt": "2024-07-23T00:00:00Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:abc123",
"ResolvConfPath": "/var/lib/docker/containers/d2f5e3f19a6a/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/d2f5e3f19a6a/hostname",
"HostsPath": "/var/lib/docker/containers/d2f5e3f19a6a/hosts",
"LogPath": "/var/lib/docker/containers/d2f5e3f19a6a/d2f5e3f19a6a-json.log",
"Name": "/my_container",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": null,
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": null,
"DiskQuota": 0,
"KernelMemory": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"Mounts": [],
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/l/abc123/diff",
"MergedDir": "/var/lib/docker/overlay2/merged",
"UpperDir": "/var/lib/docker/overlay2/upper",
"WorkDir": "/var/lib/docker/overlay2/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "d2f5e3f19a6a",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"bash"
],
"Image": "ubuntu",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "abc123",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/abc123",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "abc123",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "abc123",
"EndpointID": "abc123",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]

使用场景

  • 调试容器: 获取容器的详细配置信息,以便进行调试和排查问题。

  • 查看网络配置: 查看容器的网络配置信息,了解其网络连接状态。

  • 监控资源: 获取容器的资源配置信息和使用情况,便于进行资源管理和监控。

  • 脚本自动化: 在自动化脚本中使用 docker inspect 获取对象的详细信息,以进行后续操作。

docker inspect 命令是 Docker 中非常强大和实用的命令之一,允许用户获取容器、镜像、卷、网络等对象的详细信息。通过使用该命令,用户可以深入了解和管理 Docker 对象的配置和状态,满足各种调试、监控和管理需求。

Docker top 命令


docker top 命令用于显示指定容器中的正在运行的进程。

docker top 命令类似于 Linux 中的 topps 命令,它帮助用户查看容器内的进程信息,便于监控和调试容器内的活动。

语法

docker top [OPTIONS] CONTAINER [ps OPTIONS]

查看容器内的进程:

docker top my_container

这将显示容器 my_container 中所有正在运行的进程。

使用自定义 ps 选项:

docker top my_container -o pid,comm

这将显示容器 my_container 中所有正在运行的进程,并只显示 pid 和 comm 列。

实例

查看容器内的进程:

docker top my_container

示例输出:

1
2
3
UID       PID        PPID      C      STIME    TTY        TIME          CMD
root 1725 1708 0 14:02 ? 00:00:00 bash
root 1767 1725 0 14:03 ? 00:00:00 ps

自定义输出:

docker top my_container -o pid,comm

示例输出:

1
2
3
PID                 COMMAND
1725 bash
1767 ps

常用场景

  • 监控容器内部活动: 通过查看容器内的进程,用户可以监控容器内部正在运行的应用程序和服务。

  • 调试和排查问题: 当容器出现问题时,可以通过 docker top 命令查看容器内的进程,帮助排查问题。

  • 资源管理: 了解容器内的进程和资源使用情况,便于进行资源管理和优化。

docker top 命令是一个有用的工具,帮助用户查看容器内正在运行的进程信息。通过该命令,用户可以监控、调试和管理容器内的活动,确保容器正常运行。

Docker attach 命令


docker attach 命令用于附加到正在运行的 Docker 容器的标准输入、输出和错误输出(stdin、stdout、stderr)。允许用户直接与容器交互,就像与正在运行的进程交互一样。

语法

docker attach [OPTIONS] CONTAINER

常用选项

  • --detach-keys: 设置一个在容器中分离的键序列(例如,ctrl-c)。

  • --no-stdin: 不附加标准输入。

  • --sig-proxy: 当键盘中断时,将信号代理到容器(默认为 true)。

实例

附加到正在运行的容器:

docker attach my_container

附加到名为 my_container 的容器,用户可以直接与容器的标准输入、输出和错误输出交互。

附加到容器并禁用标准输入:

docker attach --no-stdin my_container

附加到 my_container 容器,但不附加标准输入。

设置分离键序列:

docker attach --detach-keys="ctrl-c" my_container

附加到 my_container 容器,并设置 ctrl-c 为分离键序列。

注意事项

  • 如果附加到一个已经附加了其他会话的容器,所有会话将共享相同的标准输入、输出和错误输出。这意味着多个会话中的输出可能会混杂在一起。

  • 使用 docker attach 进行交互时,需要注意正确设置分离键序列,以确保能够安全地分离而不停止容器。

常用场景

  • 调试和故障排除: 直接附加到正在运行的容器进行调试和故障排除。

  • 监控: 实时查看容器内的输出和日志。

  • 交互操作: 需要与容器内的应用程序进行交互时使用。

docker attach 命令是 Docker 中一个有用的命令,允许用户附加到正在运行的容器并与其交互。通过此命令,用户可以实时查看容器的输出,进行调试和故障排除,以及执行其他交互操作。使用适当的选项和分离键序列,可以灵活地管理和控制与容器的交互。

Docker events 命令


docker events 命令用于实时获取 Docker 守护进程生成的事件。

docker events 命令允许用户监控 Docker 容器、镜像、网络和卷的各种操作事件,例如创建、启动、停止、删除等。

语法

docker events [OPTIONS]

OPTIONS说明:

  • -f, --filter: 根据提供的条件过滤输出。

  • --format: 使用 Go 模板格式化输出。

  • --since: 显示从指定时间开始的事件。

  • --until: 显示直到指定时间的事件。

实例

获取所有事件:

docker events

输出:

1
2
3
4
2023-07-22T15:04:05.123456789Z container create 123abc456def (image=ubuntu, name=my_container)
2023-07-22T15:04:06.123456789Z container start 123abc456def (image=ubuntu, name=my_container)
2023-07-22T15:04:10.123456789Z container stop 123abc456def (image=ubuntu, name=my_container)
2023-07-22T15:04:11.123456789Z container destroy 123abc456def (image=ubuntu, name=my_container)

过滤事件:

docker events --filter event=stop

以上命令只显示容器停止事件。

输出:

2023-07-22T15:04:10.123456789Z container stop 123abc456def (image=ubuntu, name=my_container)

格式化输出:

docker events --format '{{.Time}} - {{.Type}} - {{.Action}}'

以上命令使用指定格式显示事件。

输出:

1
2
3
4
2023-07-22T15:04:05.123456789Z - container - create
2023-07-22T15:04:06.123456789Z - container - start
2023-07-22T15:04:10.123456789Z - container - stop
2023-07-22T15:04:11.123456789Z - container - destroy

显示从指定时间开始的事件:

docker events --since "2023-07-22T15:04:05"

以上命令显示从 2023-07-22T15:04:05 开始的事件。

显示直到指定时间的事件:

docker events --until "2023-07-22T16:04:05"

以上命令显示直到 2023-07-22T16:04:05 的事件。

Docker logs 命令


docker logs 命令用于获取和查看容器的日志输出。

docker logs 命令非常有用,可以帮助用户调试和监控运行中的容器。

语法

docker logs [OPTIONS] CONTAINER

常用选项:

  • -f, --follow: 跟随日志输出(类似于 tail -f)。

  • --since: 从指定时间开始显示日志。

  • -t, --timestamps: 显示日志时间戳。

  • --tail: 仅显示日志的最后部分,例如 --tail 10 显示最后 10 行。

  • --details: 显示提供给日志的额外详细信息。

  • --until: 显示直到指定时间的日志。

实例

显示容器日志

docker logs my_container

显示名为 my_container 的容器的所有日志,输出内容:

1
2
3
4
hello world
hello world
hello world
...

跟随日志输出

docker logs -f my_container

持续显示 my_container 的日志输出,输出内容:

1
2
3
4
hello world
hello world
hello world
...

显示带时间戳的日志

docker logs -t my_container

显示包含时间戳的日志,输出内容:

1
2
3
4
2023-07-22T15:04:05.123456789Z hello world
2023-07-22T15:04:06.123456789Z hello world
2023-07-22T15:04:07.123456789Z hello world
...

从指定时间开始显示日志

1
docker logs --since="2023-07-22T15:00:00" my_container

显示 2023-07-22T15:00:00 之后的日志。

显示最后 10 行日志

docker logs --tail 10 my_container

显示 my_container 的最后 10 行日志。

显示额外详细信息的日志

docker logs --details my_container

显示 my_container 的日志,并包含额外详细信息。

显示直到指定时间的日志

docker logs --until=“2023-07-22T16:00:00” my_container

显示 2023-07-22T16:00:00 之前的日志。

Docker wait 命令


docker wait 命令用于阻塞,直到指定的容器停止运行,然后返回容器的退出代码。

docker wait 命令对于自动化脚本非常有用,因为它可以等待容器完成某项任务,并根据容器的退出状态采取后续操作。

语法

docker wait [OPTIONS] CONTAINER [CONTAINER...]

等待一个容器停止并获取其退出代码:

docker wait my_container

等待多个容器停止并获取它们的退出代码:

docker wait container1 container2

实例

启动一个会立即退出的容器:

docker run --name test_container ubuntu bash -c “exit 5”

使用 docker wait 命令等待容器退出并获取退出代码:

docker wait test_container

输出:

5

此命令等待 test_container 退出,并返回退出代码 5。

启动多个会立即退出的容器:

1
2
docker run --name test_container1 ubuntu bash -c "exit 1"
docker run --name test_container2 ubuntu bash -c "exit 2"

使用 docker wait 命令等待多个容器退出并获取它们的退出代码:

docker wait test_container1 test_container2

输出:

1
2
1
2

此命令等待 test_container1 和 test_container2 退出,并返回它们的退出代码 1 和 2。

注意事项

  • docker wait 命令会阻塞直到容器停止,因此在长时间运行的容器上使用时需要注意。

  • 该命令仅返回容器的退出代码,不提供其他关于容器的状态或输出的信息。

docker wait 命令是一个简单但非常有用的工具,允许用户等待容器停止并获取其退出代码。通过该命令,用户可以轻松地在脚本中实现任务同步和自动化操作。使用 docker wait 命令,可以确保在指定的容器完成其任务之前,不会进行任何后续操作。

Docker export 命令


docker export 命令用于将 Docker 容器的文件系统导出为一个 tar 归档文件。

docker export 命令主要用于备份或迁移容器的文件系统,而不包括 Docker 镜像的所有层和元数据。

语法

docker export [OPTIONS] CONTAINER

OPTIONS说明:

  • -o, --output: 将输出保存到指定文件,而不是输出到标准输出。

导出容器文件系统:

docker export my_container

将名为 my_container 的容器的文件系统导出到标准输出。

将导出文件保存为 tar 文件:

docker export my_container > my_container_backup.tar

将容器 my_container 的文件系统导出并保存到 my_container_backup.tar 文件中。

使用 --output 选项保存导出文件:

shdocker export -o my_container_backup.tar my_container

将容器 my_container 的文件系统导出并保存到 my_container_backup.tar 文件中。

实例

启动一个容器:

docker run -d --name my_container ubuntu bash -c "echo hello > /hello.txt && sleep 3600"

导出容器的文件系统:

docker export my_container > my_container_backup.tar

查看导出的 tar 文件内容:

tar -tf my_container_backup.tar

输出:

hello.txt

导入文件系统到新的容器:

cat my_container_backup.tar | docker import - my_new_image

注意事项

  • docker export 只导出容器的文件系统,不包括 Docker 镜像的层、元数据或运行时信息。

  • 如果容器正在运行,导出的文件系统将是容器当前状态的快照。

  • 导出的 tar 文件可能会很大,具体取决于容器的文件系统大小。

docker export 命令是一个有用的工具,用于将容器的文件系统导出为 tar 归档文件。这对于备份、迁移和分析容器的文件系统非常有用。通过使用 --output 选项,用户可以将导出内容保存为指定文件,方便管理和使用。

Docker port 命令


docker port 命令用于显示容器的端口映射信息,即容器内部的端口如何映射到宿主机的端口。

docker port 命令对于了解容器如何与宿主机网络交互非常有用。

语法

docker port CONTAINER [PRIVATE_PORT[/PROTO]]

  • CONTAINER: 要查询端口映射的容器的名称或 ID。

  • PRIVATE_PORT (可选): 容器内部的端口号。

  • PROTO (可选): 协议类型(tcpudp),默认是 tcp

查看容器的所有端口映射:

docker port my_container

显示名为 my_container 的容器的所有端口映射信息。

查看特定端口的映射:

docker port my_container 80

显示名为 my_container 的容器内部的端口 80 映射到宿主机的哪个端口。

查看特定端口和协议的映射:

docker port my_container 80/tcp

显示名为 my_container 的容器内部的 TCP 端口 80 映射到宿主机的哪个端口。

实例

启动一个容器并映射端口:

docker run -d -p 8080:80 --name my_container nginx

此命令将 my_container 容器的端口 80 映射到宿主机的端口 8080。

查看容器的端口映射:

docker port my_container

输出:

80/tcp -> 0.0.0.0:8080

显示容器的端口 80 映射到宿主机的 8080 端口。

查看特定端口的映射:

docker port my_container 80

输出:

0.0.0.0:8080

注意事项

  • docker port 命令仅显示端口映射信息,不会显示容器内部运行的服务的状态或其他信息。

  • 如果容器没有暴露任何端口,或者没有进行端口映射,docker port 命令将不会返回任何信息。

docker port 命令是一个用于查看容器端口映射的工具,帮助用户了解容器的端口如何映射到宿主机。通过使用这个命令,用户可以方便地检查和调试容器的网络配置。

Docker stats 命令


docker stats 命令用于实时显示 Docker 容器的资源使用情况,包括 CPU、内存、网络 I/O 和块 I/O。

docker stats 似于 Linux 系统中的 top 命令,但它专门针对 Docker 容器。通过 docker stats,用户可以监控容器的资源使用情况,帮助优化性能和进行故障排除。

语法

docker stats [OPTIONS] [CONTAINER...]

OPTIONS 说明:

  • –all , -a :显示所有的容器,包括未运行的。

  • –format :指定返回值的模板文件。

  • –no-stream :展示当前状态就直接退出了,不再实时更新。

  • –no-trunc :不截断输出。

显示所有运行的容器的资源使用情况:

docker stats

显示指定容器的资源使用情况:

docker stats my_container

显示所有容器(包括未运行的容器)的资源使用情况:

docker stats --all

只显示一次数据而不是持续刷新:

docker stats --no-stream

使用自定义格式输出:

docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"

实例

列出所有在运行的容器信息。

1
2
3
4
5
6
runoob@runoob:~$  docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
b95a83497c91 awesome_brattain 0.28% 5.629MiB / 1.952GiB 0.28% 916B / 0B 147kB / 0B 9
67b2525d8ad1 foobar 0.00% 1.727MiB / 1.952GiB 0.09% 2.48kB / 0B 4.11MB / 0B 2
e5c383697914 test-1951.1.kay7x1lh1twk9c0oig50sd5tr 0.00% 196KiB / 1.952GiB 0.01% 71.2kB / 0B 770kB / 0B 1
4bda148efbc0 random.1.vnc8on831idyr42slu578u3cr 0.00% 1.672MiB / 1.952GiB 0.08% 110kB / 0B 578kB / 0B 2

输出详情介绍:

CONTAINER ID 与 NAME: 容器 ID 与名称。

CPU % 与 MEM %: 容器使用的 CPU 和内存的百分比。

MEM USAGE / LIMIT: 容器正在使用的总内存,以及允许使用的内存总量。

NET I/O: 容器通过其网络接口发送和接收的数据量。

BLOCK I/O: 容器从主机上的块设备读取和写入的数据量。

PIDs: 容器创建的进程或线程数。

根据容器等 ID 或名称现实信息:

1
2
3
4
5
runoob@runoob:~$ docker stats awesome_brattain 67b2525d8ad1

CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
b95a83497c91 awesome_brattain 0.28% 5.629MiB / 1.952GiB 0.28% 916B / 0B 147kB / 0B 9
67b2525d8ad1 foobar 0.00% 1.727MiB / 1.952GiB 0.09% 2.48kB / 0B 4.11MB / 0B 2

以 JSON 格式输出:

1
2
runoob@runoob:~$ docker stats nginx --no-stream --format "{{ json . }}"
{"BlockIO":"0B / 13.3kB","CPUPerc":"0.03%","Container":"nginx","ID":"ed37317fbf42","MemPerc":"0.24%","MemUsage":"2.352MiB / 982.5MiB","Name":"nginx","NetIO":"539kB / 606kB","PIDs":"2"}

输出指定的信息:

1
2
3
4
5
6
7
8
runoob@runoob:~$ docker stats --all --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" fervent_panini 5acfcb1b4fd1 drunk_visvesvaraya big_heisenberg
{"BlockIO":"0B / 13.3kB","CPUPerc":"0.03%","Container":"nginx","ID":"ed37317fbf42","MemPerc":"0.24%","MemUsage":"2.352MiB / 982.5MiB","Name":"nginx","NetIO":"539kB / 606kB","PIDs":"2"}

CONTAINER CPU % MEM USAGE / LIMIT
fervent_panini 0.00% 56KiB / 15.57GiB
5acfcb1b4fd1 0.07% 32.86MiB / 15.57GiB
drunk_visvesvaraya 0.00% 0B / 0B
big_heisenberg 0.00% 0B / 0B

常用场景

  • 实时监控: 实时查看容器的资源使用情况,以便进行性能监控和优化。

  • 故障排除: 在容器出现问题时,检查资源使用情况,帮助排查问题根源。

  • 资源管理: 监控容器的资源使用情况,确保资源分配合理,避免资源浪费或瓶颈。

docker stats 命令是一个强大的工具,用于实时监控 Docker 容器的资源使用情况。通过该命令,用户可以获取容器的 CPU、内存、网络 I/O 和块 I/O 的详细信息,帮助进行性能优化、故障排除和资源管理。

Docker update 命令


docker update 命令用于更新 Docker 容器的资源限制,包括内存、CPU 等。

docker update命令可以在容器运行时动态调整资源限制,而不需要停止和重新启动容器。

语法

docker update [OPTIONS] CONTAINER [CONTAINER...]

常用参数

  • CONTAINER:要更新资源限制的容器名称或容器 ID。你可以指定一个或多个容器。

  • OPTIONS:用于指定需要更新的资源限制。

常用选项 OPTIONS:

1、--memory, -m:设置容器的内存限制。

  • 格式:<size>[<unit>]

  • 例如:500m2g 等。

docker update -m 2g my_container

2、--memory-swap:设置容器的内存和交换空间(swap)的总限制。如果设置为 -1,表示不限制交换空间。

  • 格式:<size>[<unit>],如 2g,或 -1 表示无限制。

docker update --memory-swap 3g my_container

3、--cpu-shares:设置容器的 CPU 优先级,相对值。默认为 1024,较大的值表示较高的优先级。

  • 该选项不会直接限制容器的 CPU 使用量,而是控制 CPU 资源分配的优先级。

docker update --cpu-shares 2048 my_container

4、--cpus:设置容器使用的 CPU 核心数。这个选项可以限制容器最多使用的 CPU 核心数。

  • 格式:<number>,例如:1.5 表示最多使用 1.5 个 CPU 核心。

docker update --cpus 2 my_container

5、--cpu-period:设置 CPU 周期时间。用于配合 --cpu-quota 限制容器的 CPU 使用时间。单位是微秒(默认值:100000 微秒 = 100ms)。

docker update --cpu-period 50000 my_container

6、--cpu-quota:设置容器在每个周期内可以使用的最大 CPU 时间。单位是微秒。需要与 --cpu-period 配合使用。

docker update --cpu-quota 25000 my_container

7、--blkio-weight:设置块 I/O 权重(范围:101000),表示容器对磁盘 I/O 操作的优先级。默认值为 500

docker update --blkio-weight 800 my_container

8、--pids-limit:设置容器可以使用的最大进程数。

  • 格式:<number>,例如:100

docker update --pids-limit 200 my_container

9、--restart:设置容器的重启策略(noon-failurealwaysunless-stopped)。

docker update --restart always my_container

实例

  1. 更新容器的内存限制:

docker update -m 2g my_container这条命令将 my_container 的内存限制更新为 2GB。

  1. 设置 CPU 核心数限制:

docker update --cpus 1.5 my_container

这条命令将 my_container 限制为最多使用 1.5 个 CPU 核心。

  1. 更新容器的 CPU 权重:

docker update --cpu-shares 1024 my_container

这条命令将容器的 CPU 权重设置为 1024,默认值就是 1024。

  1. 更新容器的块 I/O 权重:

docker update --blkio-weight 700 my_container

这条命令将容器的磁盘 I/O 权重设置为 700,权重范围是 10 到 1000。

使用限制

  • docker update 命令会立即生效,但并不会影响容器内运行的应用程序,容器继续保持运行状态。

  • 仅支持调整容器的资源限制,对于其他容器配置(如环境变量、端口映射等)无法修改。