站内链接:
本篇文章主要讲解除了仓库,镜像,容器之外的 docker 命令, 上述三者命令说明见 docker 基础知识文章介绍
logs
格式
批量获取当前正在执行的容器
中的日志信息, 命令格式: docker logs [OPTIONS] CONTAINER
, 其中命令 options:
1 2 3 4 5 6 7
| --details: 除了显示正常的日志信息之外, 还会添加环境变量, 标签等信息 --follow/-f: 持续的获取容器的stdout/stderr输出 --timestamps/-t:输出日志的时候显示每一行的时间戳信息, 该选项常常配合后面的since使用 --tail/-n: 显示末尾的 N 行数据
--since: 获取某一个时间戳之后的日志(例如: 2021-03-01), 或者相对时间(12h, 42m, 3s) --until: 获取给定时间之前的日志信息
|
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| docker logs -t -n 10 cid docker logs -t --tail=10 cid
docker logs -t --since="2021-04-17T06:00:00" cid docker logs -f --since="2021-04-17T06:00:00" cid docker logs -t --since="30m" cid
docker logs -t --since="2021-04-17" --until="2021-04-20" cid
docker logs -t -f cid docker logs -t -n 10 -f cid
dockr logs -f cid 2>&1 |grep --line-buffered XX docker logs 2>/dev/null | grep hello
docker logs -f --tail 0 container_id 2>&1 | grep "something"
|
cp
格式
在 container 和本地文件系统之间进行文件/目录的拷贝.
1 2
| docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
|
注意, -
可以作为标准输入输入相应路径信息. 另外, 命令 options:
1 2
| --archive/-a: 不仅拷贝文件还拷贝uid/gid等信息 --follow-link/-L: 仅仅创建软链接
|
实例
1 2 3 4
| docker cp a.txt ec049b7:/tmp/
docker cp dir1 ec049b7:/tmp/
|
diff And history
diff
检查当前容器相比于其image
, 文件系统中的文件和目录所做的改动信息, 命令格式:
1
| docker diff container-ID
|
输出信息头部代表含义:
1 2 3
| A 添加一个新的文件或者目录 D 删除 C 更改
|
例子:
history
展示一个image
而不是容器的构建历史信息, 命令格式: docker history [OPTIONS] IMAGE
1 2
| --quiet/-q: 仅仅显示image id信息 --no-trunc: 不截断输出
|
实例:
1
| docker history bifeng_blog:10
|
其输出如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| IMAGE CREATED CREATED BY SIZE COMMENT <missing> 3 months ago /bin/sh -c #(nop) CMD ["node"] 0B <missing> 3 months ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry… 0B <missing> 3 months ago /bin/sh -c #(nop) COPY file:238737301d473041… 116B <missing> 3 months ago /bin/sh -c set -ex && for key in 6A010… 8.47MB <missing> 3 months ago /bin/sh -c #(nop) ENV YARN_VERSION=1.22.5 0B <missing> 3 months ago /bin/sh -c ARCH= && dpkgArch="$(dpkg --print… 66.5MB <missing> 3 months ago /bin/sh -c #(nop) ENV NODE_VERSION=10.23.1 0B <missing> 3 months ago /bin/sh -c groupadd --gid 1000 node && use… 333kB <missing> 3 months ago /bin/sh -c set -ex; apt-get update; apt-ge… 561MB <missing> 3 months ago /bin/sh -c apt-get update && apt-get install… 142MB <missing> 3 months ago /bin/sh -c set -ex; if ! command -v gpg > /… 7.81MB <missing> 3 months ago /bin/sh -c set -eux; apt-get update; apt-g… 23.2MB <missing> 3 months ago /bin/sh -c #(nop) CMD ["bash"] 0B <missing> 3 months ago /bin/sh -c #(nop) ADD file:166cd044a29ad501c… 101MB
|
export And load
export
将一个容器文件系统导出为归档文件, 命令格式: docker export [OPTIONS] CONTAINER
1
| --output/-o 写入一个指定的文件, 代替标准输出
|
实例:
1 2 3 4
| docker export ec049b7 > a.tar
docker export --output="a.tar" ec049b7
|
load
从标准输出或者指定的 tar 文件中加载镜像信息, 命令格式: docker load [OPTIONS]
1 2
| --input/-i: 指定文件或者从标准输入中获取 --quiet/-q: 仅仅输出较少信息
|
实例:
1 2 3 4
| docker load < a.tar
docker load --input a.tar
|
exec And attach
exec
在容器
中运行某个命令, 其命令格式: docker exec [OPTIONS] container cmd [args]
1 2 3 4 5 6 7 8
| --detach/-d: 后台运行某个命令 --env/-e: 设置环境变量 --env-file 从指定文件中读取并设置环境变量 --interactive/-i: 确保交互式标准输入开启 --privileged: 对所执行命令赋予额外的权限 --tty/-t: 运行一个终端 --user/-u: 用户名/uid --workdir/-w: 工作目录, 默认情况下使用启动容器的工作目录
|
实例如下:
1 2 3 4 5 6 7 8 9
| docker run --name ubuntu_bash --rm -i -t ubuntu bash
docker exec -d ubuntu_bash touch /tmp/execWorks
docker exec -it -e VAR=1 ubuntu_bash bash
docker exec -it -w /root ubuntu_bash pwd
|
attach
attach
一个运行中的容器的标准输出, 标准输入, 标准错误流信息, 另外 attach 不会在容器中创建进程进行额外的命令, 仅仅是附着
在命令上. 对于 bash 命令启动的容器, 使用 attach 命令附着的效果类似 exec, 但是对于不是 bash 命令启动的容器, 则需要使用 exec.attach 命令格式: docker attach [OPTIONS] CONTAINER
1 2 3
| --no-stdin 不附着标准输入 --sig-proxy=true 接收所有信号到容器中 --detach-keys 覆盖退出容器的按键, 一旦设置, 某些退出键按住不会生效
|
实例:
1 2 3 4 5 6 7 8 9
| docker restart ec049b7a2c34
docker exec -it ec049b7a2c34 bash
docker attach ec049b7a2c34 exit
|
stats
格式
持续性显示实时的容器使用资源统计信息, 命令格式: docker stats [options] [container..]
1 2 3 4
| --all , -a 显示所有的容器统计信息 --format 使用go模板来更加优雅的输出 --no-stream 不需要持续性显示信息流程, 仅显示第一个信息流即可 --no-trunc 不截断输出信息
|
其中--all
各列输出信息说明如下:
1 2 3 4 5 6
| COMMAND ID/NAME: 容器ID或者名字 CPU%, MEM%: CPU和内存占用百分比 MEM USAGE / LIMIT: 容器当前使用的总内存/容器可以使用的最高内存上限 NET I/O: 容器从网卡接口发送/接收的数据量 BLOCK I/O: 磁盘 I/O 数据 PIDS: PID号
|
实例
- 获取当前所有容器资源占用(ubuntu):
docker stats
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS c9d34ba2852f app-web_1 0.00% 31.8MiB / 15.37GiB 0.20% 23.1MB / 270MB 143kB / 16.4MB 19 e35a920cf7d0 app-backend_1 2.11% 3.319GiB / 15.37GiB 21.59% 12GB / 5.5GB 19.8MB / 3.13MB 56 22316e423a78 app-collector_1 1.74% 2.791GiB / 15.37GiB 18.16% 3.46GB / 1.25GB 496kB / 0B 186 b91c6ac00609 app-flower_1 0.38% 131.5MiB / 15.37GiB 0.84% 8.59GB / 904MB 6.98MB / 12.3kB 10 4dfe71e26d0a app-redis_1 0.50% 27.32MiB / 15.37GiB 0.17% 42.2GB / 77.8GB 2.81MB / 0B 4 e88929929cd6 app-db_1 0.08% 487.8MiB / 15.37GiB 3.10% 36.9GB / 86.3GB 31.3MB / 15.5GB 84 8acb8df6b150 notice-web_1 0.00% 18.24MiB / 15.37GiB 0.12% 758kB / 82.9kB 6.56MB / 0B 21 41f84a753998 notice_1 3.11% 629.9MiB / 15.37GiB 4.00% 86.5GB / 24.9GB 4.32MB / 328kB 24 7f67a3c5af5c notice-redis_1 0.44% 2.375MiB / 15.37GiB 0.02% 24.9GB / 86.5GB 283kB / 0B 4 cf60aeb8a06a notice-db_1 0.07% 192.7MiB / 15.37GiB 1.22% 1.37MB / 772kB 10.9MB / 30.1MB 30 718401c2b600 cmdb_1 0.05% 62.98MiB / 15.37GiB 0.40% 6.06MB / 4.94MB 1.21MB / 328kB 4 9325e866139a cmdb-db_1 0.08% 198.3MiB / 15.37GiB 1.26% 4.72MB / 4.55MB 12MB / 170MB 30 7b125ffd861f idaas_1 0.16% 675MiB / 15.37GiB 4.29% 1.77GB / 4.01GB 12.9MB / 303kB 50 b4c63e8d8236 idaas-db_1 0.08% 192MiB / 15.37GiB 1.22% 727MB / 1.64GB 610kB / 871MB 38
|
- 某些系统可能未显示 name 等字段, 则可以通过
--format
来指定输出列:
1 2 3 4 5
|
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
docker stats $(docker ps --format={{.Names}})
|
非持续性的监控输出: docker stats --no-stream
指定容器名称或者容器 ID: docker stats app-web_1 22316
参考