docker secret ls コマンドを使ってシークレットを一覧表示する方法

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、docker secret ls コマンドを効果的に使用して、Docker swarm 環境内のシークレットを管理および表示する方法を学びます。まず、Docker swarm を初期化し、サンプルのシークレットを作成します。その後、既存のすべてのシークレットを一覧表示する方法、シークレット名とラベルに基づいて出力をフィルタリングする方法を調べ、最後に、シークレット一覧の出力を整形して、読みやすさを向上させ、特定の情報を抽出する方法を学びます。この実践的な経験を通じて、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 内に安全に保存され、swarm 内で実行されているサービスからアクセスできます。

シークレットを一覧表示する前に、Docker swarm を初期化する必要があります。swarm とは、Docker エンジンのクラスターです。テスト目的で単一ノード上で swarm を初期化することができます。

ターミナルを開き、以下のコマンドを実行して swarm を初期化します。

docker swarm init

swarm が初期化され、現在のノードがマネージャーになったことを示す出力が表示されるはずです。

swarm が初期化されたので、シークレットを作成することができます。値が my_secret_value で、名前が my_secret の単純なシークレットを作成します。

以下のコマンドを実行してシークレットを作成します。

echo "my_secret_value" | docker secret create my_secret -

このコマンドは、文字列 "my_secret_value" を取得し、それを docker secret create コマンドにパイプし、シークレットの名前を my_secret に設定します。末尾のハイフン - は、シークレットの値が標準入力から読み取られることを示しています。

では、Docker swarm 内に存在するシークレットを一覧表示しましょう。これには docker secret ls コマンドを使用できます。

以下のコマンドを実行します。

docker secret ls

作成したシークレットの ID、名前、作成時間が表示される、次のような出力が表示されるはずです。

ID                          NAME        CREATED
<secret_id>                 my_secret   About a minute ago

このコマンドは、現在 Docker swarm で管理されているすべてのシークレットを一覧表示します。次のステップでは、この出力をフィルタリングおよび整形する方法を学びます。

名前でシークレットをフィルタリングする

このステップでは、--filter フラグを使用した docker secret ls コマンドを使って、シークレットの一覧を名前でフィルタリングする方法を学びます。多数のシークレットがあり、特定のシークレットや似た名前のシークレットのグループを見つけたい場合に便利です。

前のステップで、my_secret という名前のシークレットを作成しました。フィルタリングを実演するために、もう 1 つのシークレットを作成しましょう。このシークレットの名前は 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 を使ってすべてのシークレットを一覧表示すると、3 つのシークレットがすべて表示されます。

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

これにより、environment というラベルキーを持つ labeled_secretdev_secret の両方が表示されます。

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}}"

これで、出力にはシークレットの名前のみが 1 行ごとに表示されます。

my_secret
another_secret
labeled_secret
dev_secret

複数のフィールドを指定し、テーブルとしてフォーマットすることもできます。たとえば、ID と名前をタブで区切って表示するには、table {{.ID}}\t{{.Name}} を使用できます。table キーワードを使用すると、出力が列に整列されます。

以下のコマンドを実行します。

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

出力は 2 列のテーブルになります。

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 swarm を初期化し、サンプルのシークレットを作成しました。その後、docker secret ls を使用して、作成したシークレットの ID、名前、作成時間を表示しました。

また、--filter フラグを使用してシークレットの一覧を名前とラベルでフィルタリングする方法や、docker secret ls コマンドの出力をより読みやすくするため、またはスクリプトで使用するためにフォーマットする方法も学びました。