分享8个基本的Docker容器管理命令
前言:
在这篇文章中,我们将带你学习8个基本的Docker容器命令,它们操控着Docker容器的基本活动,例如运行run、列举list、停止stop、查看历史纪录logs、删除delete等等。文末福利!
利用这8个命令可以学习Docker容器的基本管理方式。这是一个为Docker初学者准备的,带有示范命令输出的指南。
在这篇文章中,我们将带你学习8个基本的Docker容器命令,它们操控着Docker容器的基本活动,例如运行run、列举list、停止stop、查看历史纪录logs、删除delete等等。如果你对Docker的概念很陌生,推荐你看看我们的介绍指南,来了解Docker的基本内容以及如何在Linux上安装Docker。现在让我们赶快进入要了解的命令:
如何运行Docker容器?
众所周知,Docker容器只是一个运行于宿主操作系统hostOS上的应用进程,所以你需要一个镜像来运行它。Docker镜像以进程的方式运行时就叫做Docker容器。你可以加载本地Docker镜像,也可以从DockerHub上下载。DockerHub是一个提供公有和私有镜像来进行拉取pull操作的集中仓库。官方的DockerHub位于hub.docker.com。当你指示Docker引擎运行容器时,它会首先搜索本地镜像,如果没有找到,它会从DockerHub上拉取相应的镜像。
让我们运行一个Apacheweb服务器的Docker镜像,比如httpd进程。你需要运行dockercontainerrun命令。旧的命令为dockerrun,但后来Docker添加了子命令部分,所以新版本支持下列命令:
root@kerneltalks#dockercontainerrun-d-p80:80httpd Unabletofindimage'httpd:latest'locally latest:Pullingfromlibrary/httpd 3d77ce4481b1:Pullcomplete 73674f4d9403:Pullcomplete d266646f40bd:Pullcomplete ce7b0dda0c9f:Pullcomplete 01729050d692:Pullcomplete 014246127c67:Pullcomplete 7cd2e04cf570:Pullcomplete Digest:sha256:f4610c3a1a7da35072870625733fd0384515f7e912c6223d4a48c6eb749a8617 Status:Downloadednewerimageforhttpd:latest c46f2e9e4690f5c28ee7ad508559ceee0160ac3e2b1688a61561ce9f7d99d682
Docker的run命令将镜像名作为强制参数,另外还有很多可选参数。常用的参数有:
•-d:从当前shell脱离容器
•-pX:Y:绑定容器的端口Y到宿主机的端口X
•--name:命名你的容器。如果未指定,它将被赋予随机生成的名字
•-e:当启动容器时传递环境编辑及其值
通过以上输出你可以看到,我们将httpd作为镜像名来运行容器。接着,本地镜像没有找到,Docker引擎从DockerHub拉取了它。注意,它下载了镜像httpd:latest,其中:后面跟着版本号。如果你需要运行特定版本的容器,你可以在镜像名后面注明版本名。如果不提供版本名,Docker引擎会自动拉取最新的版本。
输出的最后一行显示了你新运行的httpd容器的唯一ID。
如何列出所有运行中的Docker容器?
现在,你的容器已经运行起来了,你可能想要确认这一点,或者你想要列出你的机器上运行的所有容器。你可以使用dockercontainerls命令。在旧的Docker版本中,对应的命令为dockerps。
root@kerneltalks#dockercontainerls CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES c46f2e9e4690httpd"httpd-foreground"11minutesagoUp11minutes0.0.0.0:80->80/tcpcranky_cori
列出的结果是按列显示的。每一列的值分别为:
ContainerID:一开始的几个字符对应你的容器的唯一ID
Image:你运行容器的镜像名
Command:容器启动后运行的命令
Created:创建时间
Status:容器当前状态
Ports:与宿主端口相连接的端口信息
Names:容器名(如果你没有命名你的容器,那么会随机创建)
如何查看Docker容器的历史纪录?
在第一步我们使用了-d参数来将容器,在它一开始运行的时候,就从当前的shell中脱离出来。在这种情况下,我们不知道容器里面发生了什么。所以为了查看容器的历史纪录,Docker提供了logs命令。它采用容器名称或ID作为参数。
root@kerneltalks#dockercontainerlogscranky_cori AH00558:httpd:Couldnotreliablydeterminetheserver'sfullyqualifieddomainname,using172.17.0.2.Setthe'ServerName'directivegloballytosuppressthismessage AH00558:httpd:Couldnotreliablydeterminetheserver'sfullyqualifieddomainname,using172.17.0.2.Setthe'ServerName'directivegloballytosuppressthismessage [ThuMay3118:35:07.3011582018][mpm_event:notice][pid1:tid139734285989760]AH00489:Apache/2.4.33(Unix)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_cori UIDPIDPPIDCSTIMETTYTIMECMD root1570215690018:35?00:00:00httpd-DFOREGROUND bin1572915702018:35?00:00:00httpd-DFOREGROUND bin1573015702018:35?00:00:00httpd-DFOREGROUND bin1573115702018:35?00:00:00httpd-DFOREGROUND root@kerneltalks#ps-ef|grep-i15702 root1570215690018:35?00:00:00httpd-DFOREGROUND bin1572915702018:35?00:00:00httpd-DFOREGROUND bin1573015702018:35?00:00:00httpd-DFOREGROUND bin1573115702018:35?00:00:00httpd-DFOREGROUND root1599315957018:59pts/000:00:00grep--color=auto-i15702
在第一个输出中,列出了容器产生的进程的列表。它包含了所有细节,包括用户号uid、进程号pid,父进程号ppid、开始时间、命令,等等。这里所有的进程号你都可以在宿主的进程表里搜索到。这就是我们在第二个命令里做得。这证明了容器确实是宿主系统中的进程。
如何停止Docker容器?
只需要stop命令!同样,它采用容器名称或ID作为参数。
root@kerneltalks#dockercontainerstopcranky_cori cranky_cori
如何列出停止的或不活动的Docker容器?
现在我们停止了我们的容器,这时如果我们使用ls命令,它将不会出现在列表中。
root@kerneltalks#dockercontainerls CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
所以,在这种情况下,如果想要查看停止的或不活动的容器,你需要在ls命令里同时使用-a参数。
root@kerneltalks#dockercontainerls-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES c46f2e9e4690httpd"httpd-foreground"33minutesagoExited(0)2minutesagocranky_cori
有了-a参数,现在我们可以查看已停止的容器。注意这些容器的状态被标注为已退出exited。既然容器只是一个进程,那么用“退出”比“停止”更合适!
如何(重新)启动Docker容器?
现在,我们来启动这个已停止的容器。这和运行一个容器有所区别。当你运行一个容器时,你将启动一个全新的容器。当你启动一个容器时,你将开始一个已经停止并保存了当时运行状态的容器。它将以停止时的状态重新开始运行。
root@kerneltalks#dockercontainerstartc46f2e9e4690 c46f2e9e4690 root@kerneltalks#dockercontainerls-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES c46f2e9e4690httpd"httpd-foreground"35minutesagoUp8seconds0.0.0.0:80->80/tcpcranky_cori
如何移除Docker容器?
我们使用rm命令来移除容器。你不可以移除运行中的容器。移除之前需要先停止容器。你可以使用-f参数搭配rm命令来强制移除容器,但并不推荐这么做。
root@kerneltalks#dockercontainerrmcranky_cori cranky_cori root@kerneltalks#dockercontainerls-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
你看,一旦移除了容器,即使再使用ls-a命令也查看不到容器了。
总结
以上所述是小编给大家介绍的8个基本的Docker容器管理命令,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!