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 | docker ps |
输出详情介绍:
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
: 容器状态(如running
、paused
、exited
)。 -
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
: 返回指定类型的对象信息(可选类型:container
、image
、network
、volume
)。
实例
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 | [ |
使用场景
-
调试容器: 获取容器的详细配置信息,以便进行调试和排查问题。
-
查看网络配置: 查看容器的网络配置信息,了解其网络连接状态。
-
监控资源: 获取容器的资源配置信息和使用情况,便于进行资源管理和监控。
-
脚本自动化: 在自动化脚本中使用
docker inspect
获取对象的详细信息,以进行后续操作。
docker inspect
命令是 Docker 中非常强大和实用的命令之一,允许用户获取容器、镜像、卷、网络等对象的详细信息。通过使用该命令,用户可以深入了解和管理 Docker 对象的配置和状态,满足各种调试、监控和管理需求。
Docker top 命令
docker top
命令用于显示指定容器中的正在运行的进程。
docker top
命令类似于 Linux 中的 top
或 ps
命令,它帮助用户查看容器内的进程信息,便于监控和调试容器内的活动。
语法
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 | UID PID PPID C STIME TTY TIME CMD |
自定义输出:
docker top my_container -o pid,comm
示例输出:
1 | PID COMMAND |
常用场景
-
监控容器内部活动: 通过查看容器内的进程,用户可以监控容器内部正在运行的应用程序和服务。
-
调试和排查问题: 当容器出现问题时,可以通过
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 | 2023-07-22T15:04:05.123456789Z container create 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 | 2023-07-22T15:04:05.123456789Z - container - create |
显示从指定时间开始的事件:
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 | hello world |
跟随日志输出
docker logs -f my_container
持续显示 my_container 的日志输出,输出内容:
1 | hello world |
显示带时间戳的日志
docker logs -t my_container
显示包含时间戳的日志,输出内容:
1 | 2023-07-22T15:04:05.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 | docker run --name test_container1 ubuntu bash -c "exit 1" |
使用 docker wait 命令等待多个容器退出并获取它们的退出代码:
docker wait test_container1 test_container2
输出:
1 | 1 |
此命令等待 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
(可选): 协议类型(tcp
或udp
),默认是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 | runoob@runoob:~$ docker stats |
输出详情介绍:
CONTAINER ID 与 NAME: 容器 ID 与名称。
CPU % 与 MEM %: 容器使用的 CPU 和内存的百分比。
MEM USAGE / LIMIT: 容器正在使用的总内存,以及允许使用的内存总量。
NET I/O: 容器通过其网络接口发送和接收的数据量。
BLOCK I/O: 容器从主机上的块设备读取和写入的数据量。
PIDs: 容器创建的进程或线程数。
根据容器等 ID 或名称现实信息:
1 | runoob@runoob:~$ docker stats awesome_brattain 67b2525d8ad1 |
以 JSON 格式输出:
1 | runoob@runoob:~$ docker stats nginx --no-stream --format "{{ json . }}" |
输出指定的信息:
1 | runoob@runoob:~$ docker stats --all --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" fervent_panini 5acfcb1b4fd1 drunk_visvesvaraya big_heisenberg |
常用场景
-
实时监控: 实时查看容器的资源使用情况,以便进行性能监控和优化。
-
故障排除: 在容器出现问题时,检查资源使用情况,帮助排查问题根源。
-
资源管理: 监控容器的资源使用情况,确保资源分配合理,避免资源浪费或瓶颈。
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>]
-
例如:
500m
、2g
等。
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 权重(范围:10
到 1000
),表示容器对磁盘 I/O 操作的优先级。默认值为 500
。
docker update --blkio-weight 800 my_container
8、--pids-limit
:设置容器可以使用的最大进程数。
-
格式:
<number>
,例如:100
。
docker update --pids-limit 200 my_container
9、--restart
:设置容器的重启策略(no
、on-failure
、always
、unless-stopped
)。
docker update --restart always my_container
实例
-
更新容器的内存限制:
docker update -m 2g my_container这条命令将 my_container 的内存限制更新为 2GB。
-
设置 CPU 核心数限制:
docker update --cpus 1.5 my_container
这条命令将 my_container 限制为最多使用 1.5 个 CPU 核心。
-
更新容器的 CPU 权重:
docker update --cpu-shares 1024 my_container
这条命令将容器的 CPU 权重设置为 1024,默认值就是 1024。
-
更新容器的块 I/O 权重:
docker update --blkio-weight 700 my_container
这条命令将容器的磁盘 I/O 权重设置为 700,权重范围是 10 到 1000。
使用限制
-
docker update
命令会立即生效,但并不会影响容器内运行的应用程序,容器继续保持运行状态。 -
仅支持调整容器的资源限制,对于其他容器配置(如环境变量、端口映射等)无法修改。