良许Linux教程网 干货合集 Docker 容器管理基本命令

Docker 容器管理基本命令

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。几乎没有性能开销,可以很容易地在机器和数据中心运行,下面为大家分享一下Docker 容器管理命令

Docker 容器管理基本命令

如何运行 Docker 容器?

众所周知,Docker 容器只是一个运行于宿主操作系统上的应用进程,所以你需要一个镜像来运行它。Docker 镜像以进程的方式运行时就叫做 Docker 容器。你可以加载本地 Docker 镜像,也可以从 Docker Hub 上下载。Docker Hub 是一个提供公有和私有镜像来进行拉取操作的集中仓库。官方的 Docker Hub 位于 hub.docker.com。 当你指示 Docker 引擎运行容器时,它会首先搜索本地镜像,如果没有找到,它会从 Docker Hub 上拉取相应的镜像。

让我们运行一个 Apache web 服务器的 Docker 镜像,比如 httpd 进程。你需要运行 docker container run 命令。旧的命令为 docker run, 但后来 Docker 添加了子命令部分,所以新版本支持下列命令:

   root@kerneltalks # docker container run -d -p 80:80 httpd
   Unable to find image 'httpd:latest' locally
   latest: Pulling from library/httpd
   3d77ce4481b1: Pull complete
   73674f4d9403: Pull complete
   d266646f40bd: Pull complete
   ce7b0dda0c9f: Pull complete
   01729050d692: Pull complete
   014246127c67: Pull complete
   7cd2e04cf570: Pull complete
   Digest: sha256:f4610c3a1a7da35072870625733fd0384515f7e912c6223d4a48c6eb749a8617
   Status: Downloaded newer image for httpd:latest
   c46f2e9e4690f5c28ee7ad508559ceee0160ac3e2b1688a61561ce9f7d99d682

Docker 的 run 命令将镜像名作为强制参数,另外还有很多可选参数。常用的参数有:

  • -d:从当前 shell 脱离容器
  • -p X:Y:绑定容器的端口 Y 到宿主机的端口 X
  • –name:命名你的容器。如果未指定,它将被赋予随机生成的名字
  • -e:当启动容器时传递环境编辑及其值

通过以上输出你可以看到,我们将 httpd 作为镜像名来运行容器。接着,本地镜像没有找到,Docker 引擎从 Docker Hub 拉取了它。注意,它下载了镜像 httpd:latest, 其中 : 后面跟着版本号。如果你需要运行特定版本的容器,你可以在镜像名后面注明版本名。如果不提供版本名,Docker 引擎会自动拉取最新的版本。输出的最后一行显示了你新运行的 httpd 容器的唯一 ID。

如何列出所有运行中的 Docker 容器?

现在,你的容器已经运行起来了,你可能想要确认这一点,或者你想要列出你的机器上运行的所有容器。你可以使用 docker container ls 命令。在旧的 Docker 版本中,对应的命令为 docker ps。

   root@kerneltalks # docker container ls
   CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                NAMES
   c46f2e9e4690        httpd               "httpd-foreground"   11 minutes ago      Up 11 minutes       0.0.0.0:80->80/tcp   cranky_cori

列出的结果是按列显示的。每一列的值分别为:

  • Container ID :一开始的几个字符对应你的容器的唯一 ID
  • Image :你运行容器的镜像名
  • Command :容器启动后运行的命令
  • Created :创建时间
  • Status :容器当前状态
  • Ports :与宿主端口相连接的端口信息
  • Names :容器名(如果你没有命名你的容器,那么会随机创建)

如何查看 Docker 容器的历史纪录?

在第一步我们使用了 -d 参数来将容器,在它一开始运行的时候,就从当前的 shell 中脱离出来。在这种情况下,我们不知道容器里面发生了什么。所以为了查看容器的历史纪录,Docker 提供了 logs 命令。它采用容器名称或 ID 作为参数。

   root@kerneltalks # docker container logs cranky_cori
   AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
   AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
   [Thu May 31 18:35:07.301158 2018] [mpm_event:notice] [pid 1:tid 139734285989760] AH00489: Apache/2.4.33 (Unix) configured -- resuming normal operations
   [Thu May 31 18:35:07.305153 2018] [core:notice] [pid 1:tid 139734285989760] AH00094: Command line: 'httpd -D FOREGROUND'

这里我使用了容器名称作为参数。你可以看到在我们的 httpd 容器中与 Apache 相关的历史纪录。

如何确定 Docker 容器的进程?

容器是一个使用宿主资源来运行的进程。这样,你可以在宿主系统的进程表中定位容器的进程。让我们在宿主系统上确定容器进程。

Docker 使用著名的 top 命令作为子命令的名称,来查看容器产生的进程。它采用容器的名称或 ID 作为参数。在旧版本的 Docker 中,只可运行 docker top 命令。在新版本中,docker top 和 docker container top 命令都可以生效。

   root@kerneltalks # docker container top  cranky_cori
   UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
   root                15702               15690               0                   18:35               ?                   00:00:00            httpd -DFOREGROUND
   bin                 15729               15702               0                   18:35               ?                   00:00:00            httpd -DFOREGROUND
   bin                 15730               15702               0                   18:35               ?                   00:00:00            httpd -DFOREGROUND
   bin                 15731               15702               0                   18:35               ?                   00:00:00            httpd -DFOREGROUND
   
   root@kerneltalks # ps -ef |grep -i 15702
   root     15702 15690  0 18:35 ?        00:00:00 httpd -DFOREGROUND
   bin      15729 15702  0 18:35 ?        00:00:00 httpd -DFOREGROUND
   bin      15730 15702  0 18:35 ?        00:00:00 httpd -DFOREGROUND
   bin      15731 15702  0 18:35 ?        00:00:00 httpd -DFOREGROUND
   root     15993 15957  0 18:59 pts/0    00:00:00 grep --color=auto -i 15702

在第一个输出中,列出了容器产生的进程的列表。它包含了所有细节,包括用户号、进程号,父进程号、开始时间、命令,等等。这里所有的进程号你都可以在宿主的进程表里搜索到。这就是我们在第二个命令里做得。这证明了容器确实是宿主系统中的进程。

如何停止 Docker 容器?

只需要 stop 命令!同样,它采用容器名称或 ID 作为参数。

   root@kerneltalks # docker container stop cranky_cori
   cranky_cori

如何列出停止的或不活动的 Docker 容器?

现在我们停止了我们的容器,这时如果我们使用 ls 命令,它将不会出现在列表中。

   root@kerneltalks # docker container ls
   CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

所以,在这种情况下,如果想要查看停止的或不活动的容器,你需要在 ls 命令里同时使用 -a 参数。

   root@kerneltalks # docker container ls -a
   CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS                     PORTS               NAMES
   c46f2e9e4690        httpd               "httpd-foreground"   33 minutes ago      Exited (0) 2 minutes ago                       cranky_cori

有了 -a 参数,现在我们可以查看已停止的容器。注意这些容器的状态被标注为 已退出。既然容器只是一个进程,那么用“退出”比“停止”更合适!

如何(重新)启动 Docker 容器?

现在,我们来启动这个已停止的容器。这和运行一个容器有所区别。当你运行一个容器时,你将启动一个全新的容器。当你启动一个容器时,你将开始一个已经停止并保存了当时运行状态的容器。它将以停止时的状态重新开始运行。

   root@kerneltalks #  docker container start c46f2e9e4690
   c46f2e9e4690
   
   root@kerneltalks # docker container ls -a
   CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                NAMES
   c46f2e9e4690        httpd               "httpd-foreground"   35 minutes ago      Up 8 seconds        0.0.0.0:80->80/tcp   cranky_cori

如何移除 Docker 容器?

我们使用 rm 命令来移除容器。你不可以移除运行中的容器。移除之前需要先停止容器。你可以使用 -f 参数搭配 rm 命令来强制移除容器,但并不推荐这么做。

   root@kerneltalks # docker container rm cranky_cori
   cranky_cori
   root@kerneltalks # docker container ls -a
   CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

img
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部