首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 Docker 客户端管理容器:这些命令必须知道

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

作者头像
用户6543014
发布2019-10-25 18:41:25
9310
发布2019-10-25 18:41:25
举报
文章被收录于专栏:CU技术社区CU技术社区

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

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

运行容器

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

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

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

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

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

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

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

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

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

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

docker container start <container-name-or-ID>

docker container attach <container-name-or-ID>

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

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

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

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

docker container list

docker container list -aq

docker container rm $(docker container list -aq) -f

docker container list

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

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

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

在容器上执行命令

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

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

docker container exec <container-name> <command>

连接到控制台 (Linux 和 Windows)

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

docker container exec -it webserver cmd

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

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

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

管理容器: 有待深入

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

docker container --help

docker container run—help

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

原文作者:Anderson Patricio 原文链接:http://techgenix.com/managing-containers-docker/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SACC开源架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档