
docker ls:展示当前活跃的容器,帮助我们快速了解哪些容器正在运行。docker run:启动一个新的容器实例,它是容器生命周期的开始。docker stop:终止一个或多个运行中的容器,相当于给容器发送停止信号。docker start:恢复一个或多个之前停止的容器的运行。docker cp:实现本地系统与容器间的文件或目录复制,便于资源共享和数据迁移。docker exec:在运行的容器中执行命令,用于容器内部操作和故障排查。docker logs:获取容器的日志信息,对监控和排错至关重要。docker rm:移除一个或多个容器,释放系统资源。
docker attach:连接到一个正在运行的容器,进行实时交互。docker commit:从已修改的容器创建一个新的镜像,适用于快速生成新的基础镜像。docker create:创建一个新的容器实例,但不立即启动,允许我们预先设置容器配置。docker diff:展示容器文件系统的变动,有助于理解容器内部的变化。docker export:将容器的文件系统导出为 tar 包,用于容器快照和备份。docker inspect:获取容器的详细信息,包括配置和状态,是调试的强有力工具。docker kill:向容器发送信号,通常用于紧急终止容器运行。docker pause:暂停容器中的所有进程,而不停容器,适用于临时冻结容器状态。docker port:列出容器的端口映射关系,帮助我们了解容器的网络配置。docker prune:清理所有未使用的容器、镜像、网络和卷,优化系统资源。docker rename:给容器设置一个新的名字,便于识别和管理。docker restart:重启一个或多个容器,适用于快速恢复容器服务。docker stats:实时显示容器的资源使用情况,如 CPU 和内存使用率。docker top:展示容器内运行的进程,类似于 Linux 的 top 命令。docker unpause:恢复之前被暂停的容器中的所有进程。docker update:更新容器的配置,如资源限制。docker wait:等待一个或多个容器停止,然后返回它们的退出状态。
常见命令解析
-a 或 --all:显示所有容器,包括那些未在运行的。
-q 或 --quiet:仅显示容器的 ID 列表。
--latest:仅显示最近创建的容器的相关信息。
列出所有正在运行的容器:
docker container ls列出最近启动的一个容器:
docker container ls -l列出所有容器,包括已退出的:
docker container ls -a列出正在运行的容器的 ID:
docker container ls -q列出正在运行的容器及其数据大小:
docker container ls -sCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE3a1bdfa88872 dockerfile-sre-nginx "/bin/bash" 8 hours ago Up 8 hours (unhealthy) goofy_taussig 0B (virtual 356MB)
ls、ps 和 list 都是 docker container ls 的别名,可以互换使用。
CONTAINER ID:容器的唯一标识符。
IMAGE:容器使用的镜像信息。
COMMAND:容器启动时执行的命令。
CREATED:容器创建的时间。
STATUS:容器的当前状态,常见状态包括:
Up:容器正在运行。
Exited:容器已退出。
Paused:容器被暂停。
Created:容器已创建但未启动。
PORTS:容器的端口映射信息。
NAMES:容器的名称。
SIZE:容器产生的数据大小(仅在使用 -s 选项时显示)。
Docker 的 docker run 命令是创建和启动新容器的关键工具。它支持丰富的参数,能够满足多样化的运行需求,从而使得容器的部署和管理变得异常灵活和强大。
-d 或 --detach:以 detached 模式在后台运行容器。
-it:组合参数,-i 表示交互式,-t 分配一个伪终端。
--rm:容器退出时自动删除容器实例,适用于临时任务或测试环境。
本地镜像检查:Docker 守护进程首先检查本地是否存在指定的镜像标签。如果不存在,Docker 将尝试下载它。
镜像下载:如果本地没有所需的镜像,Docker 将从 Docker Hub 或私有仓库下载镜像。Docker 的缓存机制允许只下载缺失的层,优化下载过程。
容器创建:Docker 基于镜像创建一个新的容器实例,配置其执行环境,包括根文件系统、网络和存储。
文件系统分配:Docker 使用联合文件系统为容器分配文件系统,通常包括一个只读的镜像层和一个可写的容器层。
网络配置:Docker 为容器配置网络接口,默认使用桥接网络,自动分配 IP 地址。
IP 地址分配:Docker 为容器分配一个唯一的 IP 地址,用于容器的网络通信。
应用程序执行:Docker 执行我们指定的命令或应用程序,这是容器的主要目的。
容器终止:当容器内的应用程序结束或被外部命令终止时,容器将停止,Docker 负责清理资源。
镜像标签:通过指定完整的镜像名(如 username/repo:tag)来拉取特定版本的镜像。
网络模式:使用 --network 标志选择不同的网络配置,如 host、bridge、none 或自定义网络。
存储卷:通过 -v 或 --volume 标志挂载存储卷,实现数据持久化或共享。
环境变量:使用 -e 或 --env 标志为容器设置环境变量。
用户权限:通过 --user 标志指定容器内应用程序的运行用户。
资源限制:使用 --memory 和 --cpus 标志限制容器使用的资源。
[Docker Host] -- Docker Daemon||- [Docker Network Bridge] -- IP: <bridge-ip>|+---- [Container A] -- IP: <container-a-ip>| |- [App A] -- Process: <user-specified-app>| +---- [Filesystem] -- Overlay File System (Read-Only Image + Read-Write Layer)|+---- [Container B] -- IP: <container-b-ip>|- [App B] -- Process: <user-specified-app>+---- [Filesystem] -- Overlay File System (Read-Only Image + Read-Write Layer)||- [Docker Volumes] -- Persistent Data Storage|- [Docker Images] -- Image Cache
在 Docker 的架构中,Docker 守护进程管理着主机上的镜像、容器和网络。每个容器都连接到 Docker 的默认网桥网络,并拥有独立的网络接口和 IP 地址。容器的文件系统由只读的镜像层和可写的容器层组成,而 Docker 卷提供了数据的持久化存储。
前台运行容器:
docker run nginx:1.20.1后台运行容器:
docker run -d nginx:1.20.1交互式 shell:
docker run -i -t alpine sh短期任务:
docker run -d alpine sleep 10指定启动命令:
docker run -d nginx:1.20.1 tail -f /etc/hosts命名和自动删除:
docker run --rm --name my-nginx -it nginx:1.20.1 bash主机映射:
docker run --rm -it --add-host myhost:19.165.213.212 alpine环境变量和工作目录:
docker run --rm -it -e MY_ENV_VAR=value -w /app alpine短选项可以合并使用,例如 -dit,但长选项需要单独使用。
如果不指定 COMMAND,Docker 将使用镜像中预设的默认 COMMAND。
通过深入理解 docker run 命令及其参数,我们可以更加灵活和高效地创建和管理 Docker 容器,满足各种复杂的应用场景需求。
-t, --time:指定在停止容器前等待容器内应用程序优雅关闭的超时时间(单位为秒)。
查看所有容器(包括终止的容器):
docker ps -a这里的 -a 或 --all 选项允许查看所有容器,无论它们当前的状态如何。
查看容器的详细状态:
docker inspect <container_id_or_name>这个命令将提供容器的详细信息,包括它的状态。
重启终止的容器:
docker start <container_id_or_name>这个命令可以重启一个已经终止的容器。
删除终止的容器:
docker rm <container_id_or_name>如果一个容器不再需要,可以使用此命令将其从系统中删除。
删除所有终止的容器:
docker container prune这个命令会删除所有当前处于终止状态的容器,释放它们占用的资源。
停止单个容器:
docker stop pedantic_wright停止名为 "pedantic_wright" 的容器。
停止多个容器:
docker stop pedantic_wright cool_boyd停止名为 "pedantic_wright" 和 "cool_boyd" 的容器。
设置超时时间:
docker stop -t 3 cool_boyd停止名为 "cool_boyd" 的容器,并在 3 秒后发送 SIGKILL 信号。
同时停止多个容器并设置超时:
docker stop -t 1 cool_boyd crazy_easley停止 "cool_boyd" 和 "crazy_easley" 容器,并在 1 秒后发送 SIGKILL 信号。
如果不使用 -t 选项,默认情况下,Docker 会在 10 秒后向容器发送 SIGKILL 信号,强制终止容器。
优雅地关闭容器可以让容器内运行的应用程序有机会执行清理工作,如保存状态、释放资源等。
通过使用 docker stop 命令,我们可以根据需要控制容器的生命周期,同时确保容器资源得到合理管理和释放。
docker start 命令用于重新启动一个或多个之前已停止的 Docker 容器。这使得我们可以轻松地将容器从停止状态恢复到运行状态,而无需重新创建它们。
docker start 的选项
-ai:启动容器后附加到容器的标准输入(interactive mode)。这个组合选项是 -a 和 -i 的简写,通常用于交互式 shell。
使用 docker start 的示例
启动单个容器:
docker container start crazy_easley这个命令将启动名为 "crazy_easley" 的容器。
启动多个容器:
docker container start crazy_easley cool_boyd这个命令将启动 "crazy_easley" 和 "cool_boyd" 这两个容器。
交互式启动容器:
docker container start -ai cool_boyd当使用 -ai 选项时,容器的标准输出和标准错误将被输出到当前终端,并且会分配一个交互式的标准输入。这对于需要交互式 shell 的场景非常有用。
注意事项
当使用 -i 选项时,所启动的容器内的程序必须支持交互式输入。例如,sh 或 bash 可以很好地工作,因为它们是交互式 shell,而像 tail 或 sleep 这样的命令则不支持交互式输入,因此 -i 选项对它们无效。
通过使用 docker start 命令,我们可以灵活地控制容器的启动和停止,从而更好地管理容器的生命周期。
docker attach cool_boyd
--sig-proxy:通过 Docker 守护进程代理信号。
--no-stdin:不挂载容器的标准输入。
--no-stdout:不挂载容器的标准输出。
--no-stderr:不挂载容器的标准错误输出。
使用 attach 命令不会创建新的进程,它只是将本地的 stdin、stdout 和 stderr 连接到容器。
要退出容器,如果是交互式 shell(如 /bin/sh 或 /bin/bash),可以使用 ctrl + p 然后 ctrl + q。
当容器内指定的 COMMAND 退出时,容器的生命周期也会结束。
docker inspect -f '{{ .State.Pid }}' cool_boyd
nsenter -t <PID> -m -p -- bash
注意:
确保我们的系统上安装了 nsenter 工具,它通常包含在 util-linux 包中。
使用 nsenter 需要对容器的命名空间有更深入的理解。
docker exec:执行一个新的命令行会话在已经运行的容器中,不会与容器的原始进程交互。
Docker Compose:如果我们使用 Docker Compose,可以通过 docker-compose exec 命令进入容器。
-L:如果源文件是一个符号链接,-L 选项会使得 docker cp 命令复制链接所指向的目标文件,而不是链接本身。
将本地文件拷贝到容器中:
docker cp /etc/hosts cool_boyd:/Successfully copied 2.05kB to cool_boyd:/
这个命令将本地的 /etc/hosts 文件复制到名为 cool_boyd的容器的根目录下。
将本地文件拷贝到容器中并重命名:
docker cp /etc/hosts cool_boyd:/five_minute_sre.hostSuccessfully copied 2.05kB to cool_boyd:/five_minute_sre.host
这个命令将本地的 /etc/hosts 文件复制到容器中,并将其重命名为 five_minute_sre.host
从容器中拷贝文件到本地:
docker cp cool_boyd:/five_minute_sre.host ./Successfully copied 2.05kB to /root/./
这个命令将容器中的 /five_minute_sre.host 文件复制到当前本地目录。
从容器中拷贝文件到本地并重命名:
docker cp cool_boyd:/five_minute_sre.host ./sre.hostSuccessfully copied 2.05kB to /root/sre.host
这个命令将容器中的 /five_minute_sre.host 文件复制到当前本地目录,并将其重命名为 sre.host。
如果目标路径不存在,docker cp 命令可能会失败。在执行复制操作之前,最好确保目标路径是有效的。
使用 docker cp 命令时,我们需要确保 Docker 守护进程正在运行,并且有适当的权限来执行该命令。
docker exec 在运行的容器中执行命令
-it:这个组合选项是 -i 和 -t 的简写。
-i 或 --interactive:保持标准输入开放,即使不附加到终端。
-t 或 --tty:分配一个伪终端。
--privileged:给予执行的命令额外的权限,类似于 Docker 容器的 --privileged 启动选项。
在容器中列出目录:
docker container exec cool_boyd ls -l /etc/hosts-rw-r--r-- 1 root root 174 May 2 21:00 /etc/hosts
这个命令在名为 cool_boyd 的容器中执行 ls -l /etc/hosts,列出 /etc/hosts 目录的内容。
在容器中查看文件内容:
docker container exec cool_boyd cat /etc/hosts127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters172.17.0.2 377b7097f6e7
这个命令在容器中执行 cat /etc/hosts,输出 /etc/hosts 文件的内容。
在容器中启动交互式 shell:
docker container exec -w /etc/ -it cool_boyd sh# pwd/etc
这个命令在 inspiring_hertz 容器中启动一个交互式 shell:
-w /etc/ 设置了 shell 的工作目录。
-it 分配了一个伪终端和交互式标准输入。
容器必须已经在运行状态,否则 docker exec 命令将无法执行。
使用 -it 选项时,我们可以通过 exit 命令或 Ctrl+D 来关闭 shell 会话。
如果容器启动时没有分配 tty(即没有使用 -t 选项),则即使使用了 -it,我们也可能无法获得交互式 shell。
docker logs 查看容器日志信息
-f 或 --follow:跟随输出,即实时显示最新的日志条目。
--since:显示自指定时间以来的日志。可以是一个时间戳或相对时间(如 1h 表示 1 小时前)。
--until:显示指定时间前的日志。
--tail:指定最后显示的日志条目数量。如果不设置,默认会显示所有可用的日志。
查看容器日志:
docker logs cool_boyd这个命令显示名为 cool_boyd的容器的所有日志。
实时查看容器日志:
docker logs -f cool_boyd使用 -f 选项可以实时查看最新的日志条目。
查看特定时间范围内的日志:
docker logs -tf --since 2024-05-02T01:13:08Z --until 2024-05-03T05:28:38Z cool_boyd
这个命令显示 cool_boyd 容器在指定时间范围内的日志:
-t 显示每条日志前面的时间戳。
-f 跟随输出,实时更新。
--since 指定开始时间。
--until 指定结束时间。
日志的默认格式可能不包含时间戳。如果需要时间戳,可以使用 -t 选项。
如果日志量很大,使用 --tail 选项限制输出的日志条目数量可以提高性能。
Docker 容器的日志可以配置通过多种方式进行管理,包括使用 Docker 的日志驱动或第三方日志管理工具。
docker rm 删除容器
-f 或 --force:强制删除一个正在运行的容器。在删除之前,Docker 会尝试停止容器。
-v 或 --volumes:删除容器时,也删除与容器关联的所有本地卷数据。
删除已停止的容器:
docker rm crazy_easley这个命令将删除名为 crazy_easley 的已停止容器。
删除正在运行的容器:
docker rm -f cool_boyd使用 -f 选项强制删除名为 cool_boyd 的正在运行的容器。
删除容器及其关联的卷:
docker rm -f -v cool_boyd这个命令不仅会强制删除容器,还会删除其关联的匿名卷。
删除所有容器:
docker rm -f `docker ps -aq`这个命令结合了 docker ps -aq(列出所有容器的 ID)和反引号(执行命令并返回结果)来强制删除所有容器。
使用 -f 选项时要小心,因为它会强制停止并删除正在运行的容器,可能会导致数据丢失或其他问题。
使用 -v 选项时,只有匿名卷会被删除,命名卷需要手动删除或使用 docker volume rm 命令。
删除容器后,容器的网络设置和挂载的卷不会自动删除,除非使用 -v 选项。
docker commit 从容器创建新镜像
-a 或 --author:为创建的镜像设置作者信息。
-m 或 --message:为提交操作添加说明信息,通常用来描述这次提交做了哪些更改。
docker commit 的示例
docker commit -a "five_nimute_sre" -m "add by alex" admiring_mendel sre-nginx:v2.0sha256:8c05dabc915290cbaa5875d8b8ef69b0e96f0efc06590ff91cb50900da48e3e4
admiring_mendel 是要提交的容器的名称。
five_nimute_sre 是指定的作者信息。
"add by alex" 是提交时的说明信息。
sre-nginx:v2.0 是新镜像的名称。
提交镜像会创建一个只读的镜像层,这意味着无法从镜像中回滚更改。因此,最佳实践是使用 Dockerfile 来定义镜像内容,以便可以版本控制和复现。
使用 docker commit 创建的镜像不会保存容器的历史或元数据,这可能会使得镜像的创建和分发变得困难。
docker create 创建容器但不启动
docker create -it sre-nginx-it:这个组合参数是 -i 和 -t 的简写。
-i 或 --interactive:保持容器的标准输入打开。
-t 或 --tty:分配一个伪终端。
启动容器:
docker start sad_meninsky这个命令将启动之前使用 docker create 创建的名为 sad_meninsky的容器。
预先配置:如果我们需要在容器启动之前进行一些特定的配置或设置,可以先使用 create 创建容器,然后进行配置。
分离创建和启动过程:在某些自动化脚本或容器编排工具中,可能需要先创建容器,再根据需要启动容器。
创建容器后,容器的状态会显示为 Created,直到我们使用 docker start 命令启动它。
使用 docker create 创建的容器不会自动启动,这与 docker run 的行为不同。
docker diff 命令对比容器变化
docker diff admiring_mendelC /etcC /etc/nginxC /etc/nginx/conf.dC /etc/nginx/conf.d/default.confC /runA /run/nginx.pidC /varC /var/cacheC /var/cache/nginxA /var/cache/nginx/scgi_tempA /var/cache/nginx/uwsgi_tempA /var/cache/nginx/client_tempA /var/cache/nginx/fastcgi_tempA /var/cache/nginx/proxy_temp
docker diff 只能显示容器文件系统的变化,不包括运行中的进程信息或其他非文件系统的状态变化。
如果需要查看容器的实时状态,可以使用 docker inspect 命令。
docker export 导出容器文件系统
-o 或 --output:指定输出的 tar 文件路径。如果不使用 -o 选项,tar 文件将被输出到标准输出,可以通过重定向操作符(>)将其重定向到文件。
使用 -o 选项导出容器:
docker export -o five_minute_sre_nginx.tar.gz admiring_mendel
这个命令将名为 admiring_mendel 的容器的文件系统导出到名为 five_minute_sre_nginx.tar.gzz 的 tar 文件中。
使用重定向导出容器:
docker export admiring_mendel > five_minute_sre_nginx.v2.0.tar.gz
这个命令使用重定向操作符将容器的文件系统导出到一个 tar 文件中。
导出容器文件系统到 tar 包后,可以使用 docker import 命令从该 tar 包中导入一个新的镜像。
docker import 导入镜像
docker image import five_minute_sre_nginx.tar.gz five_minute_sre_nginx:v1.0docker export 命令导出的是容器的文件系统,不包括容器的运行状态或配置。
导出和导入的过程不包含容器的网络配置或存储卷。
使用 docker import 导入的镜像不会保留原始容器的元数据。
docker inspect 查看容器详细信息
--format:使用 Go 的模板语法格式化输出。
--type:指定对象类型,如 container、image、volume 或 network。
--format 的示例
查看容器的 IP 地址:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' admiring_mendel172.17.0.2
这个命令会输出容器 admiring_mendel 的 IP 地址。
查看容器的 MAC 地址:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' admiring_mendel02:42:ac:11:00:02
这个命令会输出容器 admiring_mendel 的 MAC 地址。
查看容器的网关地址:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.Gateway}}{{end}}' admiring_mendel172.17.0.1
这个命令会输出容器 admiring_mendel 的网关地址。
查看特定网络接口的 IP 地址:
docker inspect -f '{{.NetworkSettings.Networks.bridge.IPAddress}}' admiring_mendel172.17.0.2
这个命令会输出容器 admiring_mendel 使用 bridge 网络接口的 IP 地址。
返回特定网络接口的详细信息:
docker inspect --format='{{json .NetworkSettings.Networks.bridge}}' admiring_mendel{"IPAMConfig":null,"Links":null,"Aliases":null,"MacAddress":"02:42:ac:11:00:02","NetworkID":"266489f641ec4f3c5b89f8d7a3764a4a7ff66714620a65d47409eae9af0578f7","EndpointID":"1b825f2196c22320e9cac1c47afdc6da3c0e1f4b73c1b73c7209c73620a92755","Gateway":"172.17.0.1","IPAddress":"172.17.0.2","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"DriverOpts":null,"DNSNames":null}
这个命令会以 JSON 格式返回容器 admiring_mendel 使用 bridge 网络接口的详细信息。
Go 的模板语法非常强大,可以用来提取 JSON 输出中的特定字段。
如果字段名以数字开头,不能使用 .Field 语法,而应该使用模板语言的 index 函数。
使用 --format 选项时,可以多次使用该选项来获取多个不同格式的输出。
docker kill 命令停止容器运行
--signal:指定要发送的信号。可以是信号名称(如 SIGINT)或信号的数字表示(如 2)。如果不指定信号,将默认发送 SIGKILL。
发送 SIGKILL 信号终止容器:
docker kill admiring_mendel
这个命令将发送 SIGKILL 信号给名为 admiring_mendel的容器,立即停止容器的运行。
发送自定义信号终止容器:
docker kill --signal SIGHUP admiring_mendel这个命令将发送 SIGHUP 信号给容器,这可能不会立即停止容器,具体取决于容器的主进程如何处理该信号。
docker stop 命令在发送停止信号之前会等待一段时间(默认为 10 秒),以允许容器优雅地关闭。如果容器在这段时间内没有停止,docker stop 将发送 SIGKILL 信号。
SIGKILL 和 SIGSTOP 是两个不能被忽略或阻塞的信号,它们将立即结束或停止容器的运行。
docker pause 暂停容器运行
-f 或 --force:强制暂停容器,即使容器中运行的进程不会响应暂停请求。
暂停容器:
docker pause eager_mendel这个命令将暂停名为 eager_mendel 的容器内的所有进程。
暂停容器是一个非破坏性的操作,容器的网络连接和卷挂载仍然保持活跃状态。
被暂停的容器可以被恢复,使用 docker unpause 命令。
恢复容器:
docker unpause eager_mendel这个命令将恢复之前被暂停的容器。
强制删除所有未使用的容器:
docker prune -f这个命令与 docker pause 不同,它用于删除所有未被容器镜像关联的悬空容器。
docker unpause 恢复暂停的容器
docker unpause eager_mendel运行时间不重置:恢复暂停的容器不会重置容器的运行时间。容器的总运行时间将包括暂停前后的持续时间。
服务可访问性:一旦容器被恢复,容器内提供的服务将再次变得可访问,可以继续通过网络连接到这些服务。
容器暂停和恢复的操作是即时的,它们不会影响容器的网络连接或存储状态。
暂停和恢复容器是 Docker 提供的用于管理和维护容器运行状态的工具,适用于需要临时冻结容器的场景。
docker port 查看容器端口映射信息
查看容器的所有端口映射信息:
docker port eager_mendel这个命令列出了名为 eager_mendel 的容器所有端口的映射信息。
查看容器特定端口的映射信息:
docker port eager_mendel80/tcp这个命令显示了容器 eager_mendel 的 80 端口使用 TCP 协议的映射信息。
端口映射是在创建容器时通过 -p 或 -P 参数指定的。如果没有指定端口映射,容器的端口将不会映射到宿主机。
-p 参数允许我们指定具体的端口映射,而 -P 参数会将容器内部的所有端口随机映射到宿主机的高端口(默认从 32768 开始)。
端口映射信息通常包括容器内部端口、协议(TCP 或 UDP)、宿主机端口。
docker prune 移除未使用的容器
移除所有未使用的容器:
docker container prune -fDeleted Containers:f218e72b681ddb2a4973c0f7e952246088f9ec122ff85df094dabe2fb8f3c08da88f7080de30066169bcd4265aeda8f5dc741e3ac84a559865481c7f8b1cb691Total reclaimed space: 1.095kB
这个命令将强制(-f 或 --force)移除所有未使用的容器。
使用 docker prune 命令时,需要确保我们确实不再需要这些未使用的容器,因为一旦执行,这些容器将被永久删除,且无法恢复。
除了容器,docker prune 还可以用于移除未使用的镜像、卷、网络等资源。具体可以使用 docker image prune、docker volume prune 和 docker network prune 等命令。
定期使用 docker prune 可以帮助清理 Docker 环境中的残留资源,优化性能并释放空间。
docker rename 为容器进行重命名操作
根据容器名称进行重命名:
docker rename eager_mendel five_minute_sre这个命令将名为 eager_mendel 的容器重命名为 five_minute_sre 。
根据容器 ID 进行重命名:
docker rename 25680370ee7f five_minute_sre这个命令将 ID 为 25680370ee7f 的容器重命名为 five_minute_sre。
重命名容器不会影响容器的运行状态或内部配置。
重命名操作是即时的,一旦执行,容器将立即以新名称被识别。
docker restart 重启容器
-t, --time:指定重启前等待的时间(单位为秒)。如果不指定此参数,Docker 默认会等待 10 秒。
指定等待时间后重启容器:
docker restart -t 1 five_minute_sre
这个命令将在等待 1 秒后重启名为five_minute_sre 的容器。
重启多个容器:
docker restart five_minute_sre priceless_moore这个命令将重启两个容器,分别是 five_minute_sre 和 priceless_moore。重启操作是依次进行的,即先重启 five_minute_sre,然后再重启priceless_moore。
重启容器时,容器内部的应用程序将接收到停止信号,然后 Docker 会等待应用程序优雅地关闭。如果应用程序没有在指定的时间内关闭,Docker 将发送 SIGKILL 信号强制结束应用程序。
重启操作不会影响容器的文件系统或配置,容器的 ID 和网络设置保持不变。
默认等待时间:如果不指定 -t 参数,Docker 会默认等待 10 秒。这是因为 docker restart 命令实际上是先发送 stop 请求,然后发送 start 请求,两次操作之间有 10 秒的间隔。
串行重启:当重启多个容器时,Docker 会依次重启每个容器,而不是并行执行。这意味着第一个容器重启完成后,才会开始重启第二个容器。
docker stats 查看容器的运行状态
--no-stream:禁用实时流,只显示一次结果。
-a 或 --all:显示所有容器的统计信息,包括未运行的容器。
查看所有正在运行的容器的状态:
docker statsCONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS25680370ee7f five_minute_sre 0.00% 6.824MiB / 7.712GiB 0.09% 3.18kB / 0B 0B / 4.1kB 9586f4392812c priceless_moore 0.00% 7.117MiB / 7.712GiB 0.09% 3.88kB / 0B 0B / 12.3kB 9
查看所有容器的状态(包括未运行的容器):
docker stats --no-stream -a查看指定容器的状态:
docker stats --no-stream five_minute_sre以 JSON 格式查看指定容器的状态:
docker stats --no-stream --format "{{ json . }}" five_minute_sre | jq{"BlockIO": "0B / 4.1kB","CPUPerc": "0.00%","Container": "five_minute_sre","ID": "25680370ee7f","MemPerc": "0.09%","MemUsage": "6.824MiB / 7.712GiB","Name": "five_minute_sre","NetIO": "3.36kB / 0B","PIDs": "9"}
这里使用了 --format 选项来格式化输出为 JSON 格式,并通过 jq 命令对 JSON 进行解析。
自定义格式查看容器状态:
docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" five_minute_sre 这个命令定制了输出的格式,只显示了容器名称或 ID、CPU 百分比和内存使用情况。
CONTAINER ID:容器的 ID。
NAME:容器的名称。
CPU %:容器使用的 CPU 百分比。
MEM USAGE / LIMIT:容器使用的内存和内存限制。
MEM %:容器使用的内存百分比。
NET I/O:容器通过网络接口发送和接收的数据量。
BLOCK I/O:容器从主机上的块设备读取和写入的数据量。
PIDS:容器创建的进程或线程数。
实时模式会持续输出容器的资源使用情况,直到我们停止该命令。
使用 --no-stream 选项可以获取容器的一次性快照。
docker top 查看容器的进程信息
-o 或 --order:通过指定的字段对输出进行排序。默认情况下,进程列表是按照进程 ID 排序的。
查看容器的进程信息:
docker top five_minute_sreUID PID PPID C STIME TTY TIME CMDroot 6806 6783 0 05:32 pts/0 00:00:00 nginx: master process nginx -g daemon off;6845 6806 0 05:32 pts/0 00:00:00 nginx: worker process6846 6806 0 05:32 pts/0 00:00:00 nginx: worker process6847 6806 0
这个命令将显示名为 five_minute_sre的容器内部的进程信息。
PID:容器内部的进程 ID。
USER:运行进程的用户。
PR:进程的优先级。
NI:nice 值,用于调整进程的优先级。
VIRT:进程虚拟内存的使用量。
RES:进程占用的物理内存。
SHR:共享内存的大小。
S:进程的状态(如 S 代表睡眠,R 代表运行等)。
%CPU:进程使用的 CPU 百分比。
%MEM:进程使用的内存百分比。
TIME+:自进程启动以来消耗的累计 CPU 时间。
COMMAND:启动进程的命令。
docker top 命令仅显示容器内部的进程,不包括宿主机的进程。
为了获取更详细的信息,可以考虑在容器内部运行 top 或 htop 等工具。
docker update 更新容器的配置
-m 或 --memory:设置容器的内存限制。
--memory-swap:设置容器的总内存和交换分区的大小(包括内存限制)。
--cpus:设置容器可以使用的 CPU 核心数。
更新容器的内存限制:
docker update -m 200000000 --memory-swap 200000000 five_minute_sre
这个命令将名为 five_minute_sre 的容器的内存限制更新为约 200MB,并将总内存和交换分区的大小设置为 200MB。
docker update 命令只能用于更新正在运行的容器的资源限制。
更新资源限制时,需要确保新的限制不会影响容器内应用程序的正常运行。
docker wait 命令查看容器的退出状态
--condition:指定等待的条件。默认情况下,docker wait 会等待容器停止(退出),但可以使用 --condition 来指定其他条件,如 not-running 或 next-exit。
等待容器退出并返回状态码:
docker wait five_minute_sre这个命令将等待名为 five_minute_sre 的容器退出,并返回容器的退出状态码。
docker wait 命令在容器停止时返回容器的退出状态码,这个状态码可以用于脚本或程序中,判断容器是否成功完成任务或发生了错误。
如果容器已经停止,docker wait 会立即返回该容器的退出状态码。
退出状态码 0:通常表示容器成功完成了其任务。
非零退出状态码:通常表示容器在执行任务时遇到了错误或异常。
容器生命周期管理:如何使用 docker container ls 列出容器,docker run 启动新容器,docker stop 和 docker start 分别停止和启动容器,以及 docker rm 删除容器。
容器操作:如何使用 docker exec 在运行的容器中执行命令,docker logs 查看容器日志,以及 docker stats 实时监控容器资源使用情况。
容器信息和状态:如何使用 docker inspect 获取容器的详细信息,docker kill 发送信号给容器,以及 docker container prune 清理未使用的容器资源。
高级功能:如何使用 docker update 更新容器的资源限制,docker wait 等待容器停止并获取退出状态,以及使用 docker top 查看容器内部的进程信息。
原文作者:五分钟学SRE;如有侵权,请联系管理员删除。