15 个管理容器的 Docker 命令 [列出、停止、启动、删除等]
已发表: 2021-08-17Docker 是构建和运行容器化应用程序的流行工具。 它可用于多个平台,并用作 Kubernetes 中的后端容器技术之一。
在 Docker 中,您可以构建自己的镜像以将应用程序作为容器运行,也可以从 Docker 存储库中提取和使用数千个公共镜像并在项目中使用它们。 镜像准备好后,您可以使用这些镜像启动容器。 容器是 Docker 映像的运行实例。
作为管理 Docker 主机/容器的系统管理员,管理 Docker 容器是最重要的方面之一。
在本文中,我们将重点介绍使用 docker 命令管理容器。
运行命令
docker run
命令用于通过指定Image ID
或Repository
和/或Tag
名称从镜像运行容器。
$ docker run {image}
例子:
$ docker run nginx
上面的命令在docker 主机上运行<span class="NormalTextRun SpellingErrorV2 SCXW251451022 BCX0">nginx</span>
应用程序的实例,如果它已经存在的话。 如果它在 Docker 主机上不存在,它会输出到 docker hub(默认情况下)并拉下图像。 但这是唯一的第一次。 对于后续时间,相同的图像被重复使用。
如果要运行特定版本的映像,请指定其版本,用冒号分隔。 这称为Tag
。 如果您不指定任何标签,docker 将默认将其视为最新的。
此外,如果您想在后台以分离模式运行容器,以便在 Docker 启动容器后返回提示符,请使用-d
标志。
例子:
$ docker run nginx Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx 33847f680f63: Pull complete dbb907d5159d: Pull complete 8a268f30c42a: Pull complete b10cf527a02d: Pull complete c90b090c213b: Pull complete 1f41b2f2bf94: Pull complete Digest: sha256:8f335768880da6baf72b70c701002b45f4932acae8d574dedfddaf967fc3ac90 Status: Downloaded newer image for nginx:latest /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:13:23 [notice] 1#1: using the "epoll" event method 2021/08/15 12:13:23 [notice] 1#1: nginx/1.21.1 2021/08/15 12:13:23 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 2021/08/15 12:13:23 [notice] 1#1: OS: Linux 5.8.0-1039-azure 2021/08/15 12:13:23 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2021/08/15 12:13:23 [notice] 1#1: start worker processes 2021/08/15 12:13:23 [notice] 1#1: start worker process 33 2021/08/15 12:13:23 [notice] 1#1: start worker process 34
ps 命令
docker ps
命令列出所有正在运行的容器以及一些关于它们的基本信息。 如容器 ID、镜像名称、容器创建时间、当前状态和容器名称。 每个容器都有一个随机名称(如果没有明确指定)和 ID。
例子:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 133f5e0267a5 nginx "/docker-entrypoint.…" 10 seconds ago Up 10 seconds 80/tcp jolly_elion
要一次列出所有正在运行和未运行/退出的容器,您可以使用:
$ docker ps -a
例子:
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fcec129f0eb4 nginx "/docker-entrypoint.…" 46 hours ago Exited (0) 46 hours ago interesting_ishizaka 6e8b1e441aa6 hello-world "/hello" 2 days ago Exited (0) 2 days ago 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 seconds ago Up 1 second 6379/tcp flamboyant_neumann 904390b65d45 nginx "/docker-entrypoint.…" 14 minutes ago Up 14 minutes 80/tcp nginx_new $
停止命令
docker stop
命令用于停止正在运行的容器。 在这里,我们需要将容器名称或 ID 与此一起放置。
$ docker stop {container-id}
成功时,它将返回 docker 名称或 ID。
例子:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 133f5e0267a5 nginx "/docker-entrypoint.…" 50 seconds ago Up 49 seconds 80/tcp jolly_elion
这将返回可用于停止容器的CONTAINER ID
。
$ docker stop 133f5 133f5
对于这个示例和接下来的示例,请注意您不需要指定CONTAINER ID
的完整值。 它将接受部分,这使得它在其他正在运行的容器中是独一无二的,因为 Docker 知道要停止哪个容器。
rm 命令
docker rm
命令删除一个停止或退出的容器。
$ docker rm {CONTAINER NAME or ID}
例子:
$ docker rm 133f5 133f5 $
执行命令
我们可以使用exec
命令进入正在运行的容器中。 这对于调试正在运行的容器或在容器中做一些事情很有用。
$ docker exec –it {container} {command}
例子:
假设您要在名为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 {CONTAINER NAME or 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 命令
要在容器和 localhost 文件系统之间复制文件,可以使用cp
命令。
$ docker container cp {CONTAINER NAME or ID:SRC_PATH} {DEST_PATH}|-
例子:
$ docker container cp quirky_cray:/etc/nginx/nginx.conf nginx.conf.bkp
导出命令
Docker 容器命令提供了将容器的文件系统导出为 TAR 文件的选项。
$ docker container export {CONTAINER NAME or ID}
检查命令
我们可以使用inspect
命令检查有关容器的详细信息,如下所示:
$ docker inspect {CONTAINER NAME or ID}
或者
$ docker container inspect {CONTAINER NAME or ID}
杀死命令
可以使用带有可选--signal
或-s
标志的kill
命令杀死正在运行的容器。 可以指定多个容器一次性杀死它们。
$ docker kill {CONTAINER NAME or ID} [--signal VAL]
例子:
$ docker kill cd9005a0b5d2 -s 9 cd9005a0b5d2 $
统计命令
要显示容器资源使用情况的实时流,您可以使用stats
命令:
$ docker container stats {CONTAINER NAME or 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 {CONTAINER NAME or ID}
例子:
$ docker container top thirsty_volhard UID PID PPID C STIME TTY TIME CMD root 2603 2582 0 12:34 ? 00:00:00 nginx: master process nginx -g daemon off; systemd+ 2659 2603 0 12:34 ? 00:00:00 nginx: worker process systemd+ 2660 2603 0 12:34 ? 00:00:00 nginx: worker process $
重命名命令
要重命名现有容器,请使用rename
命令。
$ docker container rename {OLD CONTAINER NAME} {NEW CONTAINER NAME}
例子:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 904390b65d45 nginx "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 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 minutes ago Up 7 minutes 80/tcp nginx_new $
diff 命令
我们可以使用diff
命令检查容器文件系统上文件或目录的更改。
$ docker container diff {CONTAINER NAME or 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 $
概括
总而言之,Doker 提供了一套广泛的命令来管理从创建到销毁的容器。 我们已经在本文中介绍了一些重要的命令及其用法,这应该可以让您对管理 docker 容器有一个很好的了解。
接下来,找出一些学习 DevOps 的资源。