登录 / 注册
IT168云计算频道
IT168首页 > 云计算 > 云计算资讯 > 正文

使用Docker客户端管理容器:这些命令必须知道

2018-08-10 16:22    it168网站 原创  作者: 谢涛 编辑: 谢涛

【IT168 编译】有时候,容器管理对于不熟悉这种技术的IT人员来说可能有点“可怕”。笔者希望通过这篇文章向大家解释我们能够如何管理和执行一些涉及容器管理的任务,使这个主题更清晰。

传统上,在管理物理服务器或虚拟机时,我们只需要连接RDP(运行Windows时)或SSH(运行Linux时)来访问控制台,然后从那里执行任务。然而,容器被设计成是准备好可以用于生产的。从理论上讲,我们不应该像以前的IT人员样每天管理它们。但是,理解如何执行此类故障排除任务以及理解技术也是很重要的。

运行容器

IT人员在创建容器时可能犯的第一个错误是忘记映像和容器之间的关系。两者有一种关系是,一个映像允许创建N个容器。请记住,映像是只读的,而当我们创建容器时,有一个薄的读写层,它允许我们将数据写入容器,并且该数据将在容器生命周期中持久存在。

另一个重要的要点是,容器被设计为运行单个应用程序,如果该应用程序被终止,我们可以假设容器也将被停止。

为什么这么说?让我们举一个简单的例子:我们希望立即执行 docker run alpine 以及容器退出,所以我们使用 -it ,这迫使它进行交互并使用当前终端。因为我想让这个会话在后台运行,所以使用键盘按键 Ctrl + p ,然后 Ctrl + q ,这样重复四次,如下图所示。

挑战在于:如果你不指定容器的名称,那么Docker基于自身的算法将为你创建一个名字,但如果我们试图复制一个文件到一个特定的容器中,尽管它们共享相同的映像和有相同的应用程序,我们仍需要能够识别容器。因为稍后很可能我们将不记得那个名称或容器ID信息。

managing containers

如果我们将一个文件复制到第一个容器(例如cranky_pike),那么只有这个容器会有该文件,假设你不记得容器名称或ID,这种情况下最好的解决方案是习惯性地使用开关(switch) --name<name> 以对相应的容器贴标签,这些开关可以在创建容器使用。

由于我们处于当前场景中,如果我们需要返回任何给定容器的shell,我们可以利用 docker container attach <container-name>  命令。

注意:你可以使用容器名称或任何字符串作为容器的唯一标识。我们不需要输入整个容器ID,在这种情况下,我可以只使用字母“f”,因为这个容器是唯一一个以“f”开头的。

managing containers

我当前的容器列表是空的,为什么?

Docker客户端命令 docker container list 只列出活动的容器。要获得所有容器的列表,只需在同一个Docker客户端命令的末尾添加开关 --all (如下图所示)。

managing containers

现在如果我想回到一个特定的容器,去检查一些东西或抓取一个文件,我该怎么做?第一件事是启动容器,然后返回会话。美妙之处在于,用于创建的命令也可以用于启动容器(这是有意义的),因此不需要传递额外的参数。使用以下Docker客户端命令,我们就能够启动任何已停止的容器。

1
2
docker container start <container-name-or-ID>
docker container attach <container-name-or-ID>

有办法自动清理未使用的容器吗? 

没有。如果我们在创建容器时使用开关 --rm ,我们就在容器上设置了一个标记,一旦容器退出,它就会被移除。使用此选项时需要非常小心。

1
docker run -it --name <container-name> --hostname <container-name> --rm alpine

managing containers

如果希望通过一行代码删除所有容器,下面就是了(前两行和最后一行只是为了显示创建一行的逻辑)。请记住,我们正在删除所有容器,所以使用它的风险由您自己承担。

1
2
3
4
docker container list
docker container list -aq
docker container rm $(docker container list -aq) -f
docker container list

managing containers

-name开关有帮助,但是VM内部的名称没有定义

下面是关于如何解决这个问题的方法。使用--name参数将定义给定容器打的标签。如果我们想在容器中配置名称,我们需要一个额外的参数(--hostname)。下面突出显示了用于容器的语法示例。我们连接到给定容器的外壳,并检查Linux容器中使用的名称。 

1
docker run -it --hostname container002 --name container002 alpine

managing containers在容器上执行命令

有时候在管理容器时,在容器上运行命令会更容易,从而节省在其他地方进行故障排除的时间。我们可以使用 docker container exec 命令在任何给定容器上触发特定的命令。

为了便于说明,前两个命令(hostname和ipconfig)在主机上执行。为了直接从容器中获取信息,我们可以使用以下命令:

1
docker container exec <container-name> <command>

managing containers

连接到控制台(Linux和Windows) 

在使用Windows容器(Windows操作系统)时,我们可以执行cmd,这会给我们带来容器的命令提示。下面的Docker客户端命令提供了标签为webserver的容器控制台。

1
docker container exec -it webserver cmd

如果你想使用Linux,我们只需要更改命令指令。以下命令可用于Linux容器:

1
docker container exec -it <container-name> /bin/sh

如果我们在执行Docker命令时使用PowerShell,首先会注意的是CMD的黑色背景。下面图像上执行的所有其他命令都在容器级别执行。如果你不确定,机器的名称也是一个很好的指示,还可以使用tasklist检索进程的数量。

managing containers

管理容器:有待深入

读过这篇文章后,是否意味着我们对容器管理了如指掌了呢?当然不是!我们才刚刚开始!如果你想继续探索和尝试新事物,可以试试这两个Docker客户端命令:

1
2
docker container --help
docker container run—help

现在你正慢慢成为管理容器方面的专家。


原文作者:Anderson Patricio

原文链接:http://techgenix.com/managing-containers-docker/

关键字: Docker , 容器
  • IT168企业级IT168企业级
  • IT168文库IT168文库

扫一扫关注

行车视线文章推荐

首页 评论 返回顶部