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容器的概念。

接下来,了解一下一些。

类似文章