15 个管理容器的 Docker 命令 [列出、停止、启动、删除等]

已发表: 2021-08-17

Docker 是构建和运行容器化应用程序的流行工具。 它可用于多个平台,并用作 Kubernetes 中的后端容器技术之一。

在 Docker 中,您可以构建自己的镜像以将应用程序作为容器运行,也可以从 Docker 存储库中提取和使用数千个公共镜像并在项目中使用它们。 镜像准备好后,您可以使用这些镜像启动容器。 容器是 Docker 映像的运行实例。

作为管理 Docker 主机/容器的系统管理员,管理 Docker 容器是最重要的方面之一。

在本文中,我们将重点介绍使用 docker 命令管理容器。

运行命令

docker run命令用于通过指定Image IDRepository和/或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 的资源。