15个管理容器的Docker命令[列表、停止、启动、删除等]
Docker 是一个流行的构建和运行容器化应用程序的工具。它可用于多个平台,并作为 Kubernetes 中的后端容器技术之一。
在 Docker 中,您可以构建自己的镜像以作为容器运行应用程序,或者您可以从 Docker 仓库中拉取和使用成千上万个公共镜像,并在项目中使用它们。一旦镜像准备好,您就可以使用这些镜像启动您的容器。容器是 Docker 镜像的运行实例。
管理容器是作为管理 Docker 主机/容器的系统管理员最重要的方面之一。
在本文中,我们将重点关注 run 命令。
run 命令
docker run
命令用于通过指定镜像 ID 或仓库和/或标签名称来运行容器。
$ docker run {image}
示例:
$ docker run nginx
上述命令在 docker 主机上运行一个 nginx 应用程序实例,如果它已经存在的话。如果在 Docker 主机上不存在,它会去 docker hub(默认)拉取镜像。但这只会在第一次时执行,后续的运行会复用相同的镜像。
如果您想运行特定版本的镜像,请使用冒号分隔其版本。这被称为标签。如果您没有指定任何标签,docker 将默认将其视为最新版本。
此外,如果您想以后台模式运行容器,使得 Docker 在启动容器后返回到提示符,请使用 -d 标志。
示例:
$ docker run nginx
上述命令会在 docker 主机上运行 nginx 应用程序的一个实例,如果它已经存在的话。如果在 Docker 主机上不存在,它会去 docker hub 拉取镜像。但这只会在第一次时执行,后续的运行会复用相同的镜像。
ps 命令
docker ps
命令列出所有正在运行的容器以及有关它们的一些基本信息。例如容器 ID、镜像名称、容器创建时间、当前状态和容器名称。每个容器都有一个随机名称(如果没有明确指定)和 ID。
示例:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
133f5e0267a5 nginx "/docker-entrypoint.…" 10秒前 起動中 80/tcp jolly_elion
要一次列出所有运行中和未运行/已退出的容器,您可以使用:
$ docker ps -a
示例:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fcec129f0eb4 nginx "/docker-entrypoint.…" 46小时前 已退出 (0) 46小时前 interesting_ishizaka
6e8b1e441aa6 hello-world "/hello" 2天前 已退出 (0) 2天前 keen_shirley
ls 命令
与 ps
命令类似,ls
也可以用来列出容器。可以使用 -a
标志列出所有容器(不仅仅是运行中的)。
$ docker container ls
示例:
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
15796e91c30b redis "docker-entrypoint.s…" 2秒前 起动 1秒前 6379/tcp flamboyant_neumann
904390b65d45 nginx "/docker-entrypoint.…" 14分钟前 起动 14分钟前 80/tcp nginx_new
$
stop 命令
docker stop
命令用于停止运行中的容器。在这里,我们需要提供容器的名称或ID。
$ docker stop {容器ID}
如果成功,它会返回 Docker 的名称或 ID。
示例:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
133f5e0267a5 nginx "/docker-entrypoint.…" 50秒前 起动 49秒前 80/tcp jolly_elion
这将返回 CONTAINER ID
,您可以使用它来停止容器。
$ docker stop 133f5
133f5
对于此示例和接下来的示例,请注意您无需指定完整的 CONTAINER ID
值。它将接受能使其在其他运行中的容器中唯一的部分。
rm 命令
docker rm
命令用于删除已停止或已退出的容器。
$ docker rm {容器名称或ID}
示例:
$ docker rm 133f5
133f5
$
exec 命令
我们可以使用 exec
命令进入一个运行中的容器。这对于调试运行中的容器或在容器内执行一些操作很有用。
$ docker exec –it {容器} {命令}
示例:
假设您想要在交互模式下在名为 unruffled_meninsky
的容器中启动 bash
shell(假设镜像中有可用的 Bash,您也可以使用其他可用的 shell),请使用:
$ docker exec –it unruffled_meninsky /bin/bash
这将使您进入容器中的 bash
shell。这里的标志 -i
代表交互模式,-t
代表终端。如果您只想执行一个或多个命令并从容器中退出,您可以使用:
$ docker exec unruffled_meninsky cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 cd2eed4acf34
日志命令
如果容器以分离模式启动,并且我们想要查看其日志,我们可以使用logs
命令来查看其日志:
$ docker logs {容器名称或ID}
示例:
$ docker logs 7da6dcebaf9c
/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
2021/08/15 12:14:09 [notice] 1#1: using the "epoll" event method
2021/08/15 12:14:09 [notice] 1#1: nginx/1.21.1
2021/08/15 12:14:09 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6)
2021/08/15 12:14:09 [notice] 1#1: OS: Linux 5.8.0-1039-azure
2021/08/15 12:14:09 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/08/15 12:14:09 [notice] 1#1: start worker processes
2021/08/15 12:14:09 [notice] 1#1: start worker process 31
2021/08/15 12:14:09 [notice] 1#1: start worker process 32
$
复制命令
要在容器和本地文件系统之间复制文件,可以使用cp
命令。
$ docker container cp {容器名称或ID:SRC_PATH} {DEST_PATH}|-
示例:
$ docker container cp quirky_cray:/etc/nginx/nginx.conf nginx.conf.bkp
导出命令
Docker容器命令提供了将容器的文件系统导出为TAR文件的选项。
$ docker container export {容器名称或ID}
检查命令
我们可以使用inspect
命令来检查容器的详细信息:
$ docker inspect {容器名称或ID}
或者
$ docker container inspect {容器名称或ID}
终止命令
可以使用kill
命令终止正在运行的容器,可选的--signal
或-s
标志。可以指定多个容器以一次性终止它们。
$ docker kill {容器名称或ID} [--signal VAL]
示例:
$ docker kill cd9005a0b5d2 -s 9
cd9005a0b5d2
$
统计命令
要显示容器的资源使用情况的实时流,请使用stats
命令:
$ docker container stats {容器名称或ID}
示例:
$ docker container stats thirsty_volhard
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
904390b65d45 thirsty_volhard 0.00% 3.406MiB / 7.775GiB 0.04% 1.02kB / 0B 0B / 8.19kB 3
顶部命令
与Linux中的top
命令类似,我们可以在Docker中使用它来获取正在运行的进程列表。
$ docker container top {容器名称或ID}
示例:
$ docker container top thirsty_volhard
UID PID PPID C STIME TTY TIME CMD
root 2603 2582 0 12:34 ? 00:00:00 nginx: 主进程 nginx -g daemon off;
systemd+ 2659 2603 0 12:34 ? 00:00:00 nginx: 工作进程
systemd+ 2660 2603 0 12:34 ? 00:00:00 nginx: 工作进程
$
rename 命令
使用rename
命令来重命名一个已存在的容器。
$ docker container rename {旧容器名称} {新容器名称}
例子:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
904390b65d45 nginx "/docker-entrypoint.…" 7分钟前 Up 7分钟 80/tcp nginx_container
$ docker container rename nginx_container nginx_new
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
904390b65d45 nginx "/docker-entrypoint.…" 7分钟前 Up 7分钟 80/tcp nginx_new
$
diff 命令
我们可以使用diff
命令来检查容器文件系统中文件或目录的变化。
$ docker container diff {容器名称或ID}
例子:
$ docker container diff nginx_new
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/uwsgi_temp
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf
C /run
A /run/nginx.pid
$
总结
总而言之,Docker提供了一套广泛的命令来管理容器,从创建到销毁。本文介绍了其中一些命令及其用法,应该可以给你一个很好的管理Docker容器的概念。
接下来,了解一下一些。