Docker 通过提供一系列精细的命令,使得容器管理变得异常便捷。这些命令可以根据它们的用途和使用频率被归纳为核心命令和辅助命令两大类。
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:等待一个或多个容器停止,然后返回它们的退出状态。
通过这些命令,Docker 提供了一个全面的工具集,用于容器的创建、运行、监控和管理,极大地简化了容器化应用的生命周期管理。
常见命令解析
Docker 提供了 docker container ls
命令,以便我们可以查看 Docker 守护进程当前管理的容器列表。这个命令支持多种选项,允许我们根据需要获取不同维度的容器信息。
-a
或 --all
:显示所有容器,包括那些未在运行的。-q
或 --quiet
:仅显示容器的 ID 列表。--latest
:仅显示最近创建的容器的相关信息。docker container ls
docker container ls -l
docker container ls -a
docker container ls -q
docker container ls -s
CONTAINER 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
的别名,可以互换使用。Up
:容器正在运行。Exited
:容器已退出。Paused
:容器被暂停。Created
:容器已创建但未启动。-s
选项时显示)。通过这些选项和字段,我们可以有效地管理和监控 Docker 容器的运行状态和资源使用情况。
Docker 的 docker run
命令是创建和启动新容器的关键工具。它支持丰富的参数,能够满足多样化的运行需求,从而使得容器的部署和管理变得异常灵活和强大。
-d
或 --detach
:以 detached 模式在后台运行容器。-it
:组合参数,-i
表示交互式,-t
分配一个伪终端。--rm
:容器退出时自动删除容器实例,适用于临时任务或测试环境。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
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
,但长选项需要单独使用。通过深入理解 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 的选项
使用 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 的场景非常有用。
注意事项
通过使用 docker start 命令,我们可以灵活地控制容器的启动和停止,从而更好地管理容器的生命周期。
在使用 -d
参数启动 Docker 容器后,容器会在后台运行。有时,我们可能需要进入容器内部进行操作或调试。以下是几种常用的方法:
docker attach
是 Docker 提供的用于连接到正在运行的容器的命令。它允许我们与容器内的进程进行交互。
docker attach cool_boyd
选项:
--sig-proxy
:通过 Docker 守护进程代理信号。--no-stdin
:不挂载容器的标准输入。--no-stdout
:不挂载容器的标准输出。--no-stderr
:不挂载容器的标准错误输出。注意:
attach
命令不会创建新的进程,它只是将本地的 stdin、stdout 和 stderr 连接到容器。/bin/sh
或 /bin/bash
),可以使用 ctrl + p
然后 ctrl + q
。 nsenter
是一个更底层的工具,它允许我们进入容器的命名空间。这通常需要我们知道容器的主进程的 PID。
首先,我们需要找到容器的第一个进程的 PID:
docker inspect -f '{{ .State.Pid }}' cool_boyd
然后,使用 nsenter
进入容器:
nsenter -t <PID> -m -p -- bash
这里的 <PID>
是容器主进程的 PID。-m
、-p
和 --
是 nsenter
的选项,分别用于挂载、进程和网络命名空间,而 bash
是我们希望在容器内部运行的 shell。
注意:
nsenter
工具,它通常包含在 util-linux
包中。nsenter
需要对容器的命名空间有更深入的理解。docker exec
:执行一个新的命令行会话在已经运行的容器中,不会与容器的原始进程交互。docker-compose exec
命令进入容器。 docker cp
是 Docker 提供的一个实用命令,它允许我们在本地文件系统和 Docker 容器之间复制文件或文件夹。这个命令在需要从容器中提取日志、配置文件或数据时特别有用。
-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.host Successfully 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 cp
命令,我们可以方便地处理容器文件系统中的文件,无论是将文件拷贝到容器中还是从容器中取出。
docker exec
在运行的容器中执行命令 docker exec
是 Docker 提供的一个强大的命令,它允许我们在已经运行的容器实例中执行命令。这对于进入容器进行维护任务、调试或仅仅是查看容器内部的状态非常有用。
-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
文件的内容。
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 会话。-t
选项),则即使使用了 -it
,我们也可能无法获得交互式 shell。通过 docker exec
,我们可以灵活地访问和操作容器内部,执行各种命令,而无需停止并重新启动容器。
docker logs
查看容器日志信息 docker logs
命令用于获取 Docker 容器的日志输出。Docker 容器的日志是由 Docker 守护进程生成的,并且可以通过这个命令进行查看和分析。
-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 logs
命令,我们可以方便地查看和分析容器的日志输出,这对于调试和监控容器的运行状态非常重要。
docker rm
删除容器 docker rm
命令用于删除一个或多个 Docker 容器。这是管理容器生命周期的基本命令之一,允许我们清理不再需要的容器实例。
-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 rm
命令,我们可以有效地管理容器资源,释放不再使用的容器所占用的空间。
docker commit
从容器创建新镜像 docker commit
命令允许我们从更改过的容器中创建一个新的 Docker 镜像。这个命令在需要保存容器的状态并将其作为新镜像重用时非常有用。
-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 commit
,我们可以快速地将容器的当前状态保存为一个新的镜像,但推荐的做法是使用 Dockerfile 来构建镜像,以便更好地控制镜像的构建过程。
docker create
创建容器但不启动 docker create
命令用于创建一个新的 Docker 容器实例,但它不会启动容器。这个命令在我们想要预先配置容器,或者在启动之前设置特定的配置时非常有用。
docker create -it sre-nginx
这个命令将创建一个基于 sre-nginx 镜像的容器实例,并且容器将具有一个交互式的 shell(由于 -it
参数),但容器不会被启动。
-it
:这个组合参数是 -i
和 -t
的简写。-i
或 --interactive
:保持容器的标准输入打开。-t
或 --tty
:分配一个伪终端。 通常,我们使用 docker run
命令来创建并启动容器。docker run
命令实际上在背后调用了 docker create
来创建容器,然后调用 docker start
来启动它。使用 run
命令是启动容器的标准做法,因为它简单且直接。
docker start sad_meninsky
这个命令将启动之前使用 docker create
创建的名为 sad_meninsky的容器。
create
创建容器,然后进行配置。Created
,直到我们使用 docker start
命令启动它。docker create
创建的容器不会自动启动,这与 docker run
的行为不同。通过使用 docker create
,我们可以更细致地控制容器的生命周期,尤其是在需要精细控制容器创建和启动过程的场景中。
docker diff
命令对比容器变化 docker diff
命令用于展示 Docker 容器的文件系统变化,即比较容器运行过程中对文件系统所做的更改。这个命令对于调试容器内部的更改非常有用,尤其是当我们想要了解某个容器的文件系统发生了什么变化时。
docker diff admiring_mendel
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf
C /run
A /run/nginx.pid
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/scgi_temp
A /var/cache/nginx/uwsgi_temp
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
这个命令会列出名为 admiring_mendel 的容器的文件系统变化,包括新增、删除或修改的文件和目录。
目前,docker diff
命令没有特定的选项,但它接受一个容器的名称或 ID 作为参数。
docker diff
只能显示容器文件系统的变化,不包括运行中的进程信息或其他非文件系统的状态变化。docker inspect
命令。通过 docker diff
命令,我们可以方便地跟踪和审查容器对文件系统所做的更改,这对于维护和调试容器非常有价值。
docker export
导出容器文件系统 docker export
命令允许我们将一个容器的文件系统导出成一个 tar 归档文件。这个命令对于备份容器的文件系统或迁移容器到另一个 Docker 主机非常有用。
-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 文件中。
docker import
命令从该 tar 包中导入一个新的镜像。docker import
导入镜像docker image import five_minute_sre_nginx.tar.gz five_minute_sre_nginx:v1.0
这个命令将 tar 文件 five_minute_sre_nginx.tar.gz
导入为一个新的 Docker 镜像,命名为 five_minute_sre_nginx
并打上标签 v1.0
。
docker export
命令导出的是容器的文件系统,不包括容器的运行状态或配置。docker import
导入的镜像不会保留原始容器的元数据。通过 docker export
和 docker import
,我们可以方便地备份和迁移容器的文件系统,但要注意这只是一个文件系统级别的操作,不涉及容器的运行状态和其他配置。
docker inspect
查看容器详细信息 docker inspect
命令用于返回 Docker 对象的详细信息,如容器、镜像、卷或网络。默认情况下,它会以 JSON 格式输出结果,但可以通过 --format
选项使用 Go 的模板语法来格式化输出。
--format
:使用 Go 的模板语法格式化输出。--type
:指定对象类型,如 container
、image
、volume
或 network
。--format
的示例docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' admiring_mendel172.17.0.2 这个命令会输出容器 admiring_mendel 的 IP 地址。
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 的网关地址。
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 网络接口的详细信息。
.Field
语法,而应该使用模板语言的 index
函数。--format
选项时,可以多次使用该选项来获取多个不同格式的输出。通过 docker inspect
,我们可以获取 Docker 对象的详细信息,对于调试、分析容器配置或自动化脚本编写非常有用。
docker kill
命令停止容器运行 docker kill
命令用于发送信号给一个或多个正在运行的 Docker 容器,以终止它们的运行。默认情况下,该命令发送 SIGKILL
信号,这是一个不能被忽略的信号,它会立即结束容器。
--signal
:指定要发送的信号。可以是信号名称(如 SIGINT
)或信号的数字表示(如 2
)。如果不指定信号,将默认发送 SIGKILL
。docker kill admiring_mendel
这个命令将发送 SIGKILL
信号给名为 admiring_mendel的容器,立即停止容器的运行。
docker kill --signal SIGHUP admiring_mendel
这个命令将发送 SIGHUP
信号给容器,这可能不会立即停止容器,具体取决于容器的主进程如何处理该信号。
docker stop
命令在发送停止信号之前会等待一段时间(默认为 10 秒),以允许容器优雅地关闭。如果容器在这段时间内没有停止,docker stop
将发送 SIGKILL
信号。SIGKILL
和 SIGSTOP
是两个不能被忽略或阻塞的信号,它们将立即结束或停止容器的运行。通过 docker kill
命令,我们可以根据需要发送不同的信号给容器,提供了比 docker stop
更多的灵活性。了解不同信号的行为对于控制容器的生命周期和处理信号是非常重要的。
docker pause
暂停容器运行 docker pause
命令用于暂停容器内所有进程的执行,但不会影响容器的网络连接和挂载的卷。这个命令可以用来临时冻结容器的状态,以便进行维护或检查。
-f
或 --force
:强制暂停容器,即使容器中运行的进程不会响应暂停请求。docker pause eager_mendel 这个命令将暂停名为 eager_mendel 的容器内的所有进程。
docker unpause
命令。docker unpause eager_mendel 这个命令将恢复之前被暂停的容器。
docker prune -f
这个命令与 docker pause
不同,它用于删除所有未被容器镜像关联的悬空容器。
通过 docker pause
和 docker unpause
命令,我们可以灵活地控制容器的运行状态,而不会影响容器的配置和网络状态。这为容器的维护和管理提供了更多的选项。
docker unpause
恢复暂停的容器 docker unpause
命令用于恢复之前使用 docker pause
命令暂停的容器。当容器暂停时,其内部的所有进程都会冻结,但不会停止。使用 docker unpause
后,这些进程将继续执行,容器恢复到正常工作状态。
docker unpause eager_mendel
这个命令将恢复名为 eager_mendel的容器的运行。
通过 docker unpause
命令,我们可以轻松地管理容器的运行状态,实现对容器生命周期的灵活控制。
docker port
查看容器端口映射信息docker port
命令用于显示 Docker 容器的端口映射信息,即容器内部端口与宿主机端口之间的映射关系。
docker port eager_mendel 这个命令列出了名为 eager_mendel 的容器所有端口的映射信息。
docker port eager_mendel80/tcp 这个命令显示了容器 eager_mendel 的 80 端口使用 TCP 协议的映射信息。
-p
或 -P
参数指定的。如果没有指定端口映射,容器的端口将不会映射到宿主机。-p
参数允许我们指定具体的端口映射,而 -P
参数会将容器内部的所有端口随机映射到宿主机的高端口(默认从 32768 开始)。通过 docker port
命令,我们可以方便地查看和验证容器的端口映射配置,确保容器的网络服务能够按预期从外部访问。
docker prune
移除未使用的容器 docker prune
命令是 Docker 提供的一个非常有用的命令,它允许我们一次性移除所有未使用的资源。对于容器而言,这包括所有未被镜像关联的悬空容器(即那些没有标签的容器,也称为 "dangling" 容器)。
docker container prune -fDeleted Containers:f218e72b681ddb2a4973c0f7e952246088f9ec122ff85df094dabe2fb8f3c08da88f7080de30066169bcd4265aeda8f5dc741e3ac84a559865481c7f8b1cb691 Total reclaimed space: 1.095kB
这个命令将强制(-f
或 --force
)移除所有未使用的容器。
docker prune
命令时,需要确保我们确实不再需要这些未使用的容器,因为一旦执行,这些容器将被永久删除,且无法恢复。docker prune
还可以用于移除未使用的镜像、卷、网络等资源。具体可以使用 docker image prune
、docker volume prune
和 docker network prune
等命令。docker prune
可以帮助清理 Docker 环境中的残留资源,优化性能并释放空间。通过 docker prune
命令,我们可以有效地管理 Docker 资源,保持系统的整洁和高效运行。
docker rename
为容器进行重命名操作docker rename
命令用于重命名一个现有的 Docker 容器。我们可以使用容器的当前名称或 ID 来进行重命名。
docker rename eager_mendel five_minute_sre 这个命令将名为 eager_mendel 的容器重命名为 five_minute_sre 。
docker rename 25680370ee7f five_minute_sre
这个命令将 ID 为 25680370ee7f 的容器重命名为 five_minute_sre
。
通过 docker rename
命令,我们可以更容易地管理和识别容器,特别是在拥有大量容器时,一个有意义且独特的名称可以帮助快速定位和引用特定的容器。
docker restart
重启容器docker restart
命令用于重启一个或多个正在运行的 Docker 容器。这个命令会对容器进行优雅的重启,即先停止容器,再启动它。
-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。
-t
参数,Docker 会默认等待 10 秒。这是因为 docker restart
命令实际上是先发送 stop
请求,然后发送 start
请求,两次操作之间有 10 秒的间隔。通过 docker restart
命令,我们可以方便地重启容器,这在需要重新加载配置或重启服务时非常有用。
docker stats
查看容器的运行状态docker stats
命令用于实时显示一个或多个容器的资源使用情况,包括 CPU、内存、网络 I/O 和块设备 I/O 等信息。
--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
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 stats
命令,我们可以方便地监控容器的资源使用情况,这对于性能调优和资源规划非常有用。
docker top
查看容器的进程信息 docker top
命令用于显示指定容器内部的进程信息,类似于在容器内部执行 top
或 ps
命令。这对于诊断容器内部的应用程序和性能问题非常有用。
-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;systemd+ 6845 6806 0 05:32 pts/0 00:00:00 nginx: worker processsystemd+ 6846 6806 0 05:32 pts/0 00:00:00 nginx: worker processsystemd+ 6847 6806 0 这个命令将显示名为 five_minute_sre的容器内部的进程信息。
docker top
命令的输出通常包括以下字段:
PID
:容器内部的进程 ID。USER
:运行进程的用户。PR
:进程的优先级。NI
:nice 值,用于调整进程的优先级。VIRT
:进程虚拟内存的使用量。RES
:进程占用的物理内存。SHR
:共享内存的大小。S
:进程的状态(如 S 代表睡眠,R 代表运行等)。%CPU
:进程使用的 CPU 百分比。%MEM
:进程使用的内存百分比。TIME+
:自进程启动以来消耗的累计 CPU 时间。COMMAND
:启动进程的命令。docker top
命令仅显示容器内部的进程,不包括宿主机的进程。top
或 htop
等工具。通过 docker top
命令,我们可以方便地查看容器内部的进程状态,这对于管理和调试容器内部的应用程序非常有价值。
docker update
更新容器的配置 docker update
命令用于更新 Docker 容器的配置,主要包括内存和 CPU 限制。这个命令对于资源管理非常重要,可以帮助管理员控制容器可以使用的资源量,以确保系统的稳定运行。
-m
或 --memory
:设置容器的内存限制。--memory-swap
:设置容器的总内存和交换分区的大小(包括内存限制)。--cpus
:设置容器可以使用的 CPU 核心数。docker update -m 200000000 --memory-swap 200000000 five_minute_sre 这个命令将名为 five_minute_sre 的容器的内存限制更新为约 200MB,并将总内存和交换分区的大小设置为 200MB。
docker update
命令只能用于更新正在运行的容器的资源限制。通过 docker update
命令,我们可以动态调整容器的资源限制,而不需要重新创建或停止容器,这为资源管理和优化提供了极大的灵活性。
docker wait
命令查看容器的退出状态 docker wait
命令用于等待一个或多个容器停止运行,通常用于在容器完成其任务后需要执行某些操作的场景。
--condition
:指定等待的条件。默认情况下,docker wait
会等待容器停止(退出),但可以使用 --condition
来指定其他条件,如 not-running
或 next-exit
。docker wait five_minute_sre 这个命令将等待名为 five_minute_sre 的容器退出,并返回容器的退出状态码。
docker wait
命令在容器停止时返回容器的退出状态码,这个状态码可以用于脚本或程序中,判断容器是否成功完成任务或发生了错误。docker wait
会立即返回该容器的退出状态码。通过 docker wait
命令,我们可以同步容器的运行状态,确保在容器停止后再执行后续操作,这在自动化脚本和容器编排中非常有用。
Docker 容器管理是 Docker 技术的核心,它提供了一套完整的工具集,让我们能够以高效和灵活的方式控制容器的生命周期。Docker 的命令行工具支持多种参数,以适应不同的使用场景和个性化需求。
在本文中,我们详细探讨了 Docker 容器管理的关键方面,包括:
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
查看容器内部的进程信息。通过这些命令的详细介绍和示例,我们应该能够更加熟练地管理 Docker 容器,提高开发、测试和运维的效率。掌握这些基础知识,将使我们能够更深入地探索 Docker 的高级功能,如网络配置、数据卷管理、以及与 Docker Compose 和 Docker Swarm 等容器编排工具的集成。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。