当前位置: 首页 > 科技观察

8个基本的Docker容器管理命令

时间:2023-03-11 23:20:41 科技观察

用这8个命令来学习Docker容器的基本管理方法。这是面向Docker初学者的指南,其中包含示例命令输出。在这篇文章中,我们将带你学习8个基本的Docker容器命令,它们控制着Docker容器的基本活动,如运行run、枚举列表、停止stop、查看历史日志、删除delete等等。如果您不熟悉Docker的概念,我建议您查看我们的介绍指南,了解Docker的基础知识以及如何在Linux上安装Docker。现在让我们直接进入我们需要了解的命令:如何运行Docker容器?众所周知,Docker容器只是运行在宿主机操作系统上的一个应用进程,所以需要一个镜像来运行它。当Docker镜像作为进程运行时,它被称为Docker容器。您可以加载本地Docker映像或从DockerHub下载它。DockerHub是一个集中式存储库,为拉取操作提供公共和私有镜像。官方DockerHub位于hub.docker.com。当你指示Docker引擎运行一个容器时,它会首先搜索本地镜像,如果没有找到,它会从DockerHub中拉取对应的镜像。让我们运行ApacheWeb服务器的Docker映像,比如httpd进程。您需要运行dockercontainerrun命令。旧的命令是dockerrun,但是后来Docker增加了子命令,所以新版本支持如下命令:root@kerneltalks#dockercontainerrun-d-p80:80httpdUnabletofindimage'httpd:latest'locallylatest:Pullingfromlibrary/httpd3d77ce4481b1:Pullcomplete73674f4d9403:Pullcompleted266646f40bd:Pullcompletece7b0dda0c9f:Pullcomplete01729050d692:Pullcomplete014246127c67:Pullcomplete7cd2e04cf570:PullcompleteDigest:sha256:f4610c3a1a7da35072870625733fd0384515f7e912c6223d4a48c6eb749a8617Status:Downloadednewerimageforhttpd:latestc46f2e9e4690f5c28ee7ad508559ceee0160ac3e2b1688a61561ce9f7d99d682Docker的run命令将镜像名作为强制参数,另外还有很多Optional范围。常用的参数有:-d:离开当前shell的容器-pX:Y:将容器的端口Y绑定到主机的端口X--name:命名你的容器。如果不指定,将会给它一个随机生成的名字-e:启动容器时传递环境编辑和它的值从上面的输出可以看到我们正在运行以httpd为镜像名称的容器。然后,找不到本地镜像,DockerEngine从DockerHub拉取了。请注意,它会下载镜像httpd:latest,其中:后跟版本号。如果需要运行特定版本的容器,可以在镜像名称后指定版本名称。如果没有提供版本名称,DockerEngine会自动拉取最新版本。最后一行输出显示了新运行的httpd容器的唯一ID。如何列出所有正在运行的Docker容器?现在您的容器正在运行,您可能想要确认这一点,或者您可能想要列出您机器上运行的所有容器。您可以使用dockercontainerls命令。在旧的Docker版本中,对应的命令是dockerps。root@kerneltalks#dockercontainerlsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESc46f2e9e4690httpd"httpd-foreground"11分钟前Up11分钟0.0.0.0:80->80/tcpcranky_cori列出的结果显示在列中。每一列的值是:ContainerID:前几个字符对应你容器的唯一IDImage:你运行的容器的镜像名称Command:容器启动后要运行的命令Created:创建时间Status:容器当前状态Ports:连接到宿主机端口的端口信息Names:容器名称(如果你没有命名你的容器,会随机创建)如何查看Docker容器历史?在第一步中,我们使用-d参数在容器开始运行时将其与当前shell分离。在这种情况下,我们不知道容器内部发生了什么。所以为了查看容器的历史,Docker提供了logs命令。它以容器名称或ID作为参数。root@kerneltalks#dockercontainerlogscranky_coriAH00558:httpd:无法可靠地确定服务器的完全限定域名,使用172.17.0.2。全局设置“ServerName”指令以抑制此消息AH00558:httpd:无法可靠地确定服务器的完全限定域名,使用172.17.0.2。全局设置“ServerName”指令以抑制此消息[ThuMay3118:35:07.3011582018][mpm_event:notice][pid1:tid139734285989760]AH00489:Apache3/2。)configured--resumingnormaloperations[ThuMay3118:35:07.3051532018][core:notice][pid1:tid139734285989760]AH00094:Commandline:'httpd-DFOREGROUND'这里我使用了容器名称作为参数.您可以在我们的httpd容器中查看Apache相关历史记录。如何判断一个Docker容器的进程?容器是一个使用主机资源运行的进程。这样,您就可以在主机系统的进程表中找到容器的进程。让我们识别主机系统上的容器进程。Docker使用著名的top命令作为子命令的名称来查看容器生成的进程。它以容器的名称或ID作为参数。在旧版本的Docker中,只能运行dockertop命令。在新版本中,dockertop和dockercontainertop命令都可以使用。root@kerneltalks#dockercontainertopcranky_coriUIDPIDPPIDCSTIMETTYTIMECMDroot1570215690018:35?00:00:00httpd-DFOREGROUNDbin1572915702018:35?00:00:00httpd-DFOREGROUNDbin1573015702018:35?00:00:00httpd-DFOREGROUNDbin1573115702018:35?00:00:00httpd-DFOREGROUNDroot@kerneltalks#ps-ef|grep-i15702root1570215690018:35?00:00:00httpd-DFOREGROUNDbin1572915702018:35?00:00:00httpd-DFOREGROUNDbin1573015702018:35?00:00:00httpd-DFOREGROUNDbin1573115702018:35?:00:00grep--color=auto-i15702在第一个输出中,列出了容器生成的进程列表。它包含所有详细信息,包括用户号uid、进程号pid、父进程号ppid、启动时间、顺序等。您可以在主机的进程表中在这里搜索所有进程号。这就是我们在第二个命令中所做的。这证明容器确实是宿主系统中的一个进程。如何停止Docker容器?只需要停止命令!同样,它以容器名称或ID作为参数。root@kerneltalks#dockercontainerstopcranky_coricranky_cori如何列出已停止或不活动的Docker容器?现在我们已经停止了我们的容器,如果我们使用ls命令它就不会出现在列表中。root@kerneltalks#dockercontainerlsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES所以,在这种情况下,如果你想查看停止或不活动的容器,你需要在ls命令中使用-a参数。root@kerneltalks#dockercontainerls-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESc46f2e9e4690httpd"httpd-foreground"33分钟前退出(0)2分钟前cranky_cori使用-a参数,我们现在可以查看停止的容器。请注意,这些容器的状态标记为已退出。既然容器只是一个进程,那么“退出”比“停止”更合适!如何(重新)启动Docker容器?现在,让我们启动已停止的容器。这与运行容器不同。当你运行一个容器时,你启动了一个全新的容器。当你启动一个容器时,你启动的是一个已经停止并保存了当时运行状态的容器。它将在它停止的状态重新启动。root@kerneltalks#dockercontainerstartc46f2e9e4690c46f2e9e4690root@kerneltalks#dockercontainerls-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESc46f2e9e4690httpd"httpd-foreground"35minutesagoUp8seconds0.0.0.0:80->80/tcpcranky_cori复制代码容器?我们使用rm命令删除容器。您不能删除正在运行的容器。容器需要在移除前停止。可以在rm命令中使用-f参数强制移除容器,但不推荐这样做。root@kerneltalks#dockercontainerrmcranky_coricranky_coriroot@kerneltalks#dockercontainerls-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES你看,一旦容器被移除,即使你使用ls-a命令查看容器。