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