如何使用 docker secret ls 命令列出机密

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何有效使用 docker secret ls 命令,在 Docker 集群(swarm)环境中管理和查看机密信息。你将从初始化 Docker 集群并创建一个示例机密开始。接着,你将探索如何列出所有现有的机密,根据机密名称和标签过滤输出,最后,为了提高可读性和提取特定信息,对机密列表的输出进行格式化。通过这个实践经验,你将掌握有效定位和管理以 Docker 机密形式存储的敏感数据的技能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/create("Create Container") subgraph Lab Skills docker/ls -.-> lab-555222{{"如何使用 docker secret ls 命令列出机密"}} docker/create -.-> lab-555222{{"如何使用 docker secret ls 命令列出机密"}} end

列出所有机密

在这一步中,你将学习如何列出 Docker 环境中的所有机密。Docker 机密用于管理敏感数据,如密码、TLS 证书和 SSH 密钥。它们被安全地存储在 Docker 集群(swarm)中,并且可以被集群中运行的服务访问。

在列出机密之前,你需要初始化一个 Docker 集群。集群是一组 Docker 引擎。为了测试目的,你可以在单个节点上初始化一个集群。

打开你的终端并运行以下命令来初始化集群:

docker swarm init

你应该会看到输出信息,表明集群已初始化,并且当前节点现在是一个管理器。

现在集群已经初始化,你可以创建一个机密。我们将创建一个名为 my_secret 的简单机密,其值为 my_secret_value

运行以下命令来创建机密:

echo "my_secret_value" | docker secret create my_secret -

此命令获取字符串 "my_secret_value",并将其通过管道传递给 docker secret create 命令,然后将该机密命名为 my_secret。末尾的连字符 - 表示机密值是从标准输入读取的。

现在,让我们列出 Docker 集群中存在的机密。你可以使用 docker secret ls 命令来完成此操作。

运行以下命令:

docker secret ls

你应该会看到类似于以下的输出,显示你刚刚创建的机密的 ID、名称和创建时间:

ID                          NAME        CREATED
<secret_id>                 my_secret   About a minute ago

此命令列出了当前由你的 Docker 集群管理的所有机密。在接下来的步骤中,你将学习如何过滤和格式化此输出。

按名称过滤机密

在这一步中,你将学习如何使用带有 --filter 标志的 docker secret ls 命令,按名称过滤机密列表。当你有许多机密,并且想要查找特定的一个或一组名称相似的机密时,这非常有用。

在上一步中,你创建了一个名为 my_secret 的机密。让我们再创建一个机密来演示过滤功能。我们将这个机密命名为 another_secret

运行以下命令来创建新的机密:

echo "another_value" | docker secret create another_secret -

现在,如果你再次运行 docker secret ls,你将看到这两个机密:

docker secret ls

输出将类似于以下内容,显示 my_secretanother_secret

ID                          NAME            CREATED
<secret_id_1>               my_secret       About 2 minutes ago
<secret_id_2>               another_secret  About a few seconds ago

要过滤列表,只显示名为 my_secret 的机密,你可以使用 --filter name=my_secret 选项。

运行以下命令:

docker secret ls --filter name=my_secret

现在输出将只显示名为 my_secret 的机密:

ID                          NAME        CREATED
<secret_id_1>               my_secret   About 2 minutes ago

你还可以使用部分名称进行过滤。例如,要过滤出名称中包含 "secret" 的机密,你可以使用类似的过滤器,不过对于精确的名称匹配,前面的命令更为准确。name 过滤器执行的是精确匹配。

在拥有大量机密的环境中,这种过滤功能非常有用,它能让你快速定位到需要处理的特定机密。

按标签过滤机密

在这一步中,你将学习如何根据标签过滤机密。标签是可以附加到 Docker 对象(包括机密)上的键值对,用于组织和分类这些对象。按标签过滤是在复杂环境中管理机密的强大方法。

首先,让我们创建一个新的机密,并在创建过程中为其添加一个标签。我们将创建一个名为 labeled_secret 的机密,并添加标签 environment=production

运行以下命令来创建带有标签的机密:

echo "production_value" | docker secret create --label environment=production labeled_secret -

此命令与之前的 docker secret create 命令类似,但我们添加了 --label environment=production 标志,以便为机密附加一个标签。

现在,让我们创建另一个带有不同标签的机密。我们将其命名为 dev_secret,并为其添加标签 environment=development

运行以下命令:

echo "development_value" | docker secret create --label environment=development dev_secret -

如果你现在使用 docker secret ls 列出所有机密,你将看到所有四个机密:

docker secret ls

输出将显示 my_secretanother_secretlabeled_secretdev_secret

要过滤机密,只显示带有标签 environment=production 的机密,你可以使用 --filter label=environment=production 选项。

运行以下命令:

docker secret ls --filter label=environment=production

你应该会在输出中只看到 labeled_secret

ID                          NAME            CREATED
<secret_id_3>               labeled_secret  About a minute ago

同样,要过滤出带有标签 environment=development 的机密,你可以使用 --filter label=environment=development

运行以下命令:

docker secret ls --filter label=environment=development

这将只显示 dev_secret

ID                          NAME        CREATED
<secret_id_4>               dev_secret  About a minute ago

你还可以通过使用 --filter label=environment 来过滤出具有特定标签键(无论其值如何)的机密。

运行以下命令:

docker secret ls --filter label=environment

这将显示 labeled_secretdev_secret,因为它们都具有 environment 标签键:

ID                          NAME            CREATED
<secret_id_3>               labeled_secret  About 2 minutes ago
<secret_id_4>               dev_secret      About 2 minutes ago

按标签过滤是一种灵活的方式,可根据你自己定义的类别来管理和检索机密。

格式化机密列表的输出

在这一步中,你将学习如何使用 --format 标志来格式化 docker secret ls 命令的输出。这使你能够自定义显示的信息及其呈现方式,这对于脚本编写或生成报告非常有用。

默认情况下,docker secret ls 会输出一个包含 ID、NAME 和 CREATED 列的表格。你可以使用带有 Go 模板语法的 --format 标志来更改此格式。

例如,要仅显示机密名称,你可以使用格式 {{.Name}}

运行以下命令:

docker secret ls --format "{{.Name}}"

现在输出将仅列出机密的名称,每个名称占一行:

my_secret
another_secret
labeled_secret
dev_secret

你还可以指定多个字段并将它们格式化为表格。例如,要显示用制表符分隔的 ID 和名称,你可以使用 table {{.ID}}\t{{.Name}}table 关键字可确保输出按列对齐。

运行以下命令:

docker secret ls --format "table {{.ID}}\t{{.Name}}"

输出将是一个包含两列的表格:

ID                          NAME
<secret_id_1>               my_secret
<secret_id_2>               another_secret
<secret_id_3>               labeled_secret
<secret_id_4>               dev_secret

你还可以以 JSON 格式输出信息,这对于编程处理非常有用。使用格式 json

运行以下命令:

docker secret ls --format "json"

输出将是一个 JSON 数组,其中每个元素代表一个机密:

[
  {
    "ID": "<secret_id_1>",
    "Name": "my_secret",
    "CreatedAt": "2023-10-27 10:00:00 +0000 UTC",
    "UpdatedAt": "2023-10-27 10:00:00 +0000 UTC",
    "Labels": {}
  },
  {
    "ID": "<secret_id_2>",
    "Name": "another_secret",
    "CreatedAt": "2023-10-27 10:01:00 +0000 UTC",
    "UpdatedAt": "2023-10-27 10:01:00 +0000 UTC",
    "Labels": {}
  },
  {
    "ID": "<secret_id_3>",
    "Name": "labeled_secret",
    "CreatedAt": "2023-10-27 10:02:00 +0000 UTC",
    "UpdatedAt": "2023-10-27 10:02:00 +0002 UTC",
    "Labels": {
      "environment": "production"
    }
  },
  {
    "ID": "<secret_id_4>",
    "Name": "dev_secret",
    "CreatedAt": "2023-10-27 10:03:00 +0000 UTC",
    "UpdatedAt": "2023-10-27 10:03:00 +0000 UTC",
    "Labels": {
      "environment": "development"
    }
  }
]

--format 标志在你查看和处理 Docker 机密信息的方式上提供了很大的灵活性。

总结

在本次实验中,你学习了如何使用 docker secret ls 命令列出 Docker 环境中的所有机密。你首先初始化了一个 Docker 集群并创建了一个示例机密。然后,你使用 docker secret ls 查看了所创建机密的 ID、名称和创建时间。

你还学习了如何使用 --filter 标志按名称和标签过滤机密列表,以及如何格式化 docker secret ls 命令的输出,以提高可读性或便于脚本编写。