了解 Docker 环境的详细信息对于诊断问题、优化配置以及确保兼容性至关重要。 Docker 提供了两个核心命令来获取这些信息:docker info
和 docker version
。
docker info
命令用于显示 Docker 系统的全局信息,包括客户端和服务器端的配置、运行时环境以及资源使用情况。 它提供了 Docker 环境的完整快照,对于排查问题和了解系统容量非常有帮助。
命令格式:
docker info [OPTIONS]
示例:
fly@fly:~$ docker info
Client:
Context: default
Debug Mode: false
Server:
Containers: 4
Running: 4
Paused: 0
Stopped: 0
Images: 2
Server Version: 20.10.12
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runtime.v1.linux runc io.containerd.runc.v2
Default Runtime: runc
Init Binary: docker-init
containerd version: 1.5.9-0ubuntu1~20.04.5
runc version: 1.1.0-0ubuntu1~20.04.2
init version: 0.19.0
Security Options:
apparmor
seccomp
Profile: default
userns
Kernel Version: 5.4.0-135-generic
Operating System: Ubuntu 20.04.5 LTS
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.907GiB
Name: fly
ID: PALW:CS67:UTR6:Q3TR:QUH7:U2LI:KGEJ:U4KL:OG3L:R2WT:2I5X:R33I
Docker Root Dir: /var/lib/docker/165536.165536
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
Live Restore Enabled: false
WARNING: No swap limit support
说明:
Containers: 显示容器的总数、运行中、暂停和停止的容器数量。
Images: 显示本地存储的镜像数量。
Server Version: Docker 服务器版本。
Storage Driver: Docker 使用的存储驱动程序(例如 overlay2)。
Logging Driver: 用于容器日志管理的驱动程序。
Cgroup Driver: 用于资源隔离的 cgroup 驱动程序(例如 cgroupfs)。
Plugins: 已安装的 Docker 插件,包括 Volume, Network, Log 等。
Swarm: Docker Swarm 集群的状态(active 或 inactive)。
Runtimes: Docker 使用的容器运行时(例如 runc, containerd)。
Security Options: 启用的安全特性,如 AppArmor, Seccomp, User Namespaces。
Kernel Version: 底层 Linux 内核版本。
Operating System: 操作系统信息。
CPUs, Total Memory: 系统 CPU 核心数和总内存。
Docker Root Dir: Docker 存储数据的根目录。
Registry: 默认的镜像仓库地址。
docker version
命令用于显示 Docker 客户端和服务器端的版本信息,包括版本号、API 版本、Go 版本、Git Commit 等。 这对于确认 Docker 组件的版本以及检查兼容性非常有用。
命令格式:
docker version [OPTIONS]
-f, --format string
: 使用 Go 模板格式化输出。例如 docker version --format '{{.Client.Version}}'
。
示例:
fly@fly:~$ docker version
Client:
Version: 20.10.12
API version: 1.41
Go version: go1.16.2
Git commit: 20.10.12-0ubuntu2~20.04.1
Built: Wed Apr 6 02:14:38 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server:
Engine:
Version: 20.10.12
API version: 1.41 (minimum version 1.12)
Go version: go1.16.2
Git commit: 20.10.12-0ubuntu2~20.04.1
Built: Thu Feb 10 15:03:35 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.5.9-0ubuntu1~20.04.5
GitCommit:
runc:
Version: 1.1.0-0ubuntu1~20.04.2
GitCommit:
docker-init:
Version: 0.19.0
GitCommit:
说明:
Client: 显示 Docker 客户端的版本和构建信息。
Server: 显示 Docker 服务器 (Docker Engine) 的版本和构建信息,以及 containerd, runc 和 docker-init 的版本信息。
API version: Docker API 的版本,用于客户端与服务器之间的通信。 确保客户端和服务器的 API 版本兼容很重要。
Docker 提供了强大的日志和事件监控功能,方便用户实时了解容器运行状态、排查问题以及追踪镜像的构建过程。 以下介绍三个常用的命令: docker events
, docker logs
和 docker history
。
docker events
命令用于从 Docker 服务器获取实时发生的事件流。它可以监听容器的创建、启动、停止、删除,以及镜像的拉取、推送等各种事件。 对于监控 Docker 环境的整体状态,以及对特定事件做出响应非常有用。
命令格式:
docker events [OPTIONS]
OPTIONS 说明:
-f, --filter filter
: 根据条件过滤事件。可以使用键值对的形式指定过滤条件,例如 event=container
, image=nginx
。 可以多次使用此选项来指定多个过滤器。
--since string
: 从指定的时间戳后显示所有事件。时间戳可以是日期时间字符串,例如 2023-10-27T00:00:00
,或者 Unix 时间戳。
--until string
: 流水时间显示到指定的时间为止。 时间戳可以是日期时间字符串,例如 2023-10-28T00:00:00
,或者 Unix 时间戳。
使用示例:
# 第一个终端执行
docker events
# 第二个终端操作容器,比如docker run -d nginx
docker run -d nginx
docker start/stop/restart <container_id>
# 查看第一个终端输出
输出示例(启动容器事件):
2022-12-08T14:18:01.476501682Z container create 36f6736b9c6289da6db95898507796a378cd03e29b51166039c5a5a593377fb0 (image=nginx, maintainer=NGINX Docker Maintainers <docker-maint@nginx.com>, name=stupefied_newton)
2022-12-08T14:18:01.578704583Z network connect fdb00a147400b60e2c0706129ed2b143a13c02c5675b5fc2871c5d4ed42aa478 (container=36f6736b9c6289da6db95898507796a378cd03e29b51166039c5a5a593377fb0, name=bridge, type=bridge)
2022-12-08T14:18:03.310080179Z container start 36f6736b9c6289da6db95898507796a378cd03e29b51166039c5a5a593377fb0 (image=nginx, maintainer=NGINX Docker Maintainers <docker-maint@nginx.com>, name=stupefied_newton)
输出示例(停止容器事件):
2022-12-08T14:20:19.252053300Z container kill 36f6736b9c6289da6db95898507796a378cd03e29b51166039c5a5a593377fb0 (image=nginx, maintainer=NGINX Docker Maintainers <docker-maint@nginx.com>, name=stupefied_newton, signal=3)
2022-12-08T14:20:19.365758840Z container die 36f6736b9c6289da6db95898507796a378cd03e29b51166039c5a5a593377fb0 (exitCode=0, image=nginx, maintainer=NGINX Docker Maintainers <docker-maint@nginx.com>, name=stupefied_newton)
2022-12-08T14:20:19.468679557Z network disconnect fdb00a147400b60e2c0706129ed2b143a13c02c5675b5fc2871c5d4ed42aa478 (container=36f6736b9c6289da6db95898507796a378cd03e29b51166039c5a5a593377fb0, name=bridge, type=bridge)
2022-12-08T14:20:19.535147938Z container stop 36f6736b9c6289da6db95898507796a378cd03e29b51166039c5a5a593377fb0 (image=nginx, maintainer=NGINX Docker Maintainers <docker-maint@nginx.com>, name=stupefied_newton)
说明:
时间戳: 事件发生的时间。
事件类型: 例如 container create
, network connect
, container start
, container die
, container stop
等。
容器 ID: 受影响的容器的 ID。
其他信息: 事件相关的其他信息,例如镜像名称、维护者、容器名称、退出码等。
docker logs
命令是诊断容器内部问题的关键工具。 由于 Docker 的隔离特性,直接访问容器内部的文件系统较为复杂。 docker logs
允许您访问容器的标准输出(stdout)和标准错误(stderr),从而查看容器内应用程序的日志信息,方便排查程序运行异常、配置错误等问题。
命令格式:
docker logs [OPTIONS] CONTAINER
OPTIONS 说明:
-f, --follow
: 跟踪日志输出,类似于 tail -f
。 实时显示容器产生的最新日志。
--since string
: 显示某个开始时间的所有日志。时间戳可以是日期时间字符串,例如 2023-10-27T00:00:00
,或者 Unix 时间戳。
-t, --timestamps
: 显示时间戳。 在每行日志前添加事件发生的时间。
--tail string
: 仅列出最新 N 条容器日志。 例如 --tail 10
显示最后 10 行日志。
-n, --lines string
: 显示最后多少行的日志,与--tail
作用相同,可以理解为--tail
的简写。
使用示例:
docker logs -f mynginx
docker logs -n 10 mynginx
docker logs --since "2023-10-27T00:00:00" mynginx
docker logs -t --tail 50 mynginx
输出示例:
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/12/06 15:04:21 [notice] 1#1: using the "epoll" event method
2022/12/06 15:04:21 [notice] 1#1: nginx/1.23.2
2022/12/06 15:04:21 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/12/06 15:04:21 [notice] 1#1: OS: Linux 5.4.0-135-generic
2022/12/06 15:04:21 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/12/06 15:04:21 [notice] 1#1: start worker processes
2022/12/06 15:04:21 [notice] 1#1: start worker process 29
2022/12/06 15:04:21 [notice] 1#1: start worker process 30
说明:
输出的内容是容器内应用程序的标准输出和标准错误。
通过分析这些日志,可以了解应用程序的运行状态,发现错误和异常信息。
docker history
命令用于查看指定镜像的创建历史,即镜像是由哪些 Dockerfile 指令构建而成的。
命令格式:
docker history [OPTIONS] IMAGE
OPTIONS 说明:
-H, --human
: 以可读的格式打印镜像大小和日期,默认为 true。 使用 KB, MB, GB 等单位显示大小,并使用易于理解的日期格式。
--no-trunc
: 显示完整的提交记录,不截断。
-q, --quiet
: 仅列出提交记录 ID。
使用示例:
docker history nginx:latest
docker history --no-trunc nginx:latest
docker history -q nginx:latest
输出示例:
IMAGE CREATED CREATED BY SIZE COMMENT
ac8efec875ce 2 days ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
<missing> 2 days ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B
<missing> 2 days ago /bin/sh -c #(nop) EXPOSE 80 0B
<missing> 2 days ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B
<missing> 2 days ago /bin/sh -c #(nop) COPY file:e57eef017a414ca7… 4.62kB
<missing> 2 days ago /bin/sh -c #(nop) COPY file:abbcbf84dc17ee44… 1.27kB
<missing> 2 days ago /bin/sh -c #(nop) COPY file:5c18272734349488… 2.12kB
<missing> 2 days ago /bin/sh -c #(nop) COPY file:7b307b62e82255f0… 1.62kB
<missing> 2 days ago /bin/sh -c set -x && addgroup --system -… 61.2MB
<missing> 2 days ago /bin/sh -c #(nop) ENV PKG_RELEASE=1~bullseye 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV NJS_VERSION=0.7.7 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.23.2 0B
<missing> 2 days ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
<missing> 2 days ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 2 days ago /bin/sh -c #(nop) ADD file:1f1efd56601ebc26a… 80.5MB
说明:
IMAGE: 每一层镜像的 ID。
CREATED: 该层镜像创建的时间。
CREATED BY: 创建该层镜像所执行的 Dockerfile 指令。
SIZE: 该层镜像的大小。
COMMENT: 该层镜像的注释信息。
通过结合使用 docker events
、docker logs
和 docker history
命令,可以有效地监控 Docker 环境、排查容器问题和管理镜像。
Docker 提供了丰富的命令来管理容器的生命周期,包括创建、运行、停止、重启和删除等。 本节将详细介绍 docker create
和 docker run
命令,它们是容器生命周期的起点。
docker create
命令用于创建一个新的容器,但不会立即启动它。这允许您在运行容器之前配置容器的各种参数,例如网络、卷和环境变量。
命令格式:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
docker create
的语法与 docker run
非常相似,只是它不启动容器。
示例:
docker create nginx
这条命令会创建一个基于 nginx
镜像的容器,但容器处于停止状态。
docker run
命令用于创建一个新的容器并立即运行指定的命令。 如果镜像在本地不存在,Docker 会自动从镜像仓库拉取该镜像。
命令格式:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用选项:
选项 | 描述 | 示例 |
---|---|---|
| 将 host:ip 映射记录添加到容器的 /etc/hosts 文件。 |
|
| 附加到 STDIN, STDOUT 或 STDERR。 |
|
| 将容器 ID 写入到指定文件。 |
|
| 后台运行容器并打印容器 ID。 |
|
| 指定将容器切回后台的按键,默认:CTRL-p+CTRL-q。 |
|
| 跳过镜像验证,默认为 TRUE。 |
|
| 设置容器网络服务域名。 |
|
| 覆盖镜像默认程序入口。 |
|
| 设置环境变量。 |
|
| 从文件中读取环境变量。 |
|
| 暴露一个或多个端口。 |
|
| 为容器用户添加更多用户组。 |
|
| 设置主机名。 |
|
| 在容器内运行 init,转发信号并捕获进程。 |
|
| 保持标准输入设备处于打开状态。 |
|
| 设置容器元数据 labels。 |
|
| 从文件中读取以换行作为分隔符的 label。 |
|
| 添加一个其他容器的链接,及修改当容器的 /etc/hosts 文件。 (已过时,建议使用 Docker 网络) |
|
| 容器日志驱动,例如 |
|
| 日志驱动选项。 |
|
| 将文件系统挂载到容器,与 |
|
| 指定容器名称。 |
|
| 授予容器超级权限。 谨慎使用! |
|
| 发布容器端口到主机端口。 |
|
| 将所有暴露的端口发布到主机随机端口。 |
|
| 运行前拉取图像, (always|missing|never), 默认 missing。 |
|
| 限制容器中 PID 个数。 |
|
| 将容器根文件系统装载为只读。 |
|
| 当容器退出时的重启策略,默认为 |
|
| 当容器退出时,自动删除容器。 适用于临时性任务。 |
|
| 将接收到的信号代理到进程(默认为 true)。 |
|
| 停止容器的信号(默认为 "SIGTERM")。 |
|
| 容器停止超时时长,单位 s。 |
|
| 装载 tmpfs 目录。 |
|
| 分配一个伪终端设备。 |
|
| 用户名或用户 ID (格式: <name|uid>[:<group|gid>])。 |
|
| 绑定数据卷。 将主机目录或命名卷挂载到容器中。 |
|
| 容器的可选卷驱动程序。 |
|
| 从指定的容器装载数据卷。 |
|
| 容器内的工作目录。 |
|
使用示例:
运行一个简单的 Nginx 容器:
docker run -d -p 80:80 nginx
这将在后台运行一个 Nginx 容器,并将主机的 80 端口映射到容器的 80 端口。
运行一个交互式的 Ubuntu 容器:
docker run -it ubuntu /bin/bash
这将创建一个新的 Ubuntu 容器,并启动一个交互式的 Bash shell。
使用 --mount
挂载目录:
mkdir /tmp/data docker run -t -i --rm --mount type=bind,src=/tmp/data,dst=/data ubuntu bash
这会将主机上的 /tmp/data
目录挂载到容器内的 /data
目录。
注意:
使用 --rm
选项可以确保容器在退出后自动删除,这对于一次性任务非常有用。
挂载数据卷 (-v
或 --mount
) 可以将数据持久化到容器外部,即使容器被删除,数据也不会丢失。
docker run
不仅仅是简单地“运行”一个容器,它是一个复杂的流程,包括容器的创建、网络的配置、应用程序的启动,以及资源限制、数据持久化、安全配置等诸多方面。 理解 docker run
的工作原理对于有效地使用 Docker 至关重要。 掌握 docker run
的各种选项,可以定制容器的行为,满足各种应用场景的需求。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有